diff --git a/Sources/App/AppDelegate.swift b/Sources/App/AppDelegate.swift
index e3dadaeee45e42c7a4c7ff5338773abbb9027198..00b8875eaf650d668ae4541fb254fc52c2c50980 100644
--- a/Sources/App/AppDelegate.swift
+++ b/Sources/App/AppDelegate.swift
@@ -143,8 +143,8 @@ public class AppDelegate: UIResponder, UIApplicationDelegate {
         open url: URL,
         options: [UIApplication.OpenURLOptionsKey : Any] = [:]
     ) -> Bool {
-        if let username = getUsernameFromInvitationDeepLink(url),
-           let router = try? DependencyInjection.Container.shared.resolve() as PushRouter {
+        if let username = getUsernameFromInvitationDeepLink(url) {
+            let router = try! DependencyInjection.Container.shared.resolve() as PushRouter
             invitation = username
             router.navigateTo(.search, {})
 
diff --git a/Sources/App/DependencyRegistrator.swift b/Sources/App/DependencyRegistrator.swift
index 4466aea4744e5585fb3e69bce23c33939d04320a..05d03f78e33764ef8a3f3cd325b5fa1b9d958c18 100644
--- a/Sources/App/DependencyRegistrator.swift
+++ b/Sources/App/DependencyRegistrator.swift
@@ -251,46 +251,3 @@ struct DependencyRegistrator {
             ) as ChatListCoordinating)
     }
 }
-
-extension PushRouter {
-    static func live(navigationController: UINavigationController) -> PushRouter {
-        PushRouter { route, completion in
-            if let launchController = navigationController.viewControllers.last as? LaunchController {
-                launchController.pendingPushRoute = route
-            } else {
-                switch route {
-                case .search:
-                    if (navigationController.viewControllers.last as? SearchContainerController) == nil {
-                        navigationController.setViewControllers([
-                            ChatListController(),
-                            SearchContainerController()
-                        ], animated: true)
-                    }
-
-                case .requests:
-                    if (navigationController.viewControllers.last as? RequestsContainerController) == nil {
-                        navigationController.setViewControllers([RequestsContainerController()], animated: true)
-                    }
-                case .contactChat(id: let id):
-                    if let session = try? DependencyInjection.Container.shared.resolve() as SessionType,
-                       let contact = try? session.dbManager.fetchContacts(.init(id: [id])).first {
-                        navigationController.setViewControllers([
-                            ChatListController(),
-                            SingleChatController(contact)
-                        ], animated: true)
-                    }
-                case .groupChat(id: let id):
-                    if let session = try? DependencyInjection.Container.shared.resolve() as SessionType,
-                       let info = try? session.dbManager.fetchGroupInfos(.init(groupId: id)).first {
-                        navigationController.setViewControllers([
-                            ChatListController(),
-                            GroupChatController(info)
-                        ], animated: true)
-                    }
-                }
-            }
-
-            completion()
-        }
-    }
-}
diff --git a/Sources/App/PushRouter.swift b/Sources/App/PushRouter.swift
new file mode 100644
index 0000000000000000000000000000000000000000..d81f841fc2c8b28a0380da507e37208c0bf2faf9
--- /dev/null
+++ b/Sources/App/PushRouter.swift
@@ -0,0 +1,51 @@
+import UIKit
+import PushFeature
+import Integration
+import ChatFeature
+import SearchFeature
+import LaunchFeature
+import ChatListFeature
+import RequestsFeature
+import DependencyInjection
+
+extension PushRouter {
+    static func live(navigationController: UINavigationController) -> PushRouter {
+        PushRouter { route, completion in
+            if let launchController = navigationController.viewControllers.last as? LaunchController {
+                launchController.pendingPushRoute = route
+            } else {
+                switch route {
+                case .search:
+                    if !(navigationController.viewControllers.last is SearchContainerController) {
+                        navigationController.setViewControllers([
+                            ChatListController(),
+                            SearchContainerController()
+                        ], animated: true)
+                    }
+                case .requests:
+                    if !(navigationController.viewControllers.last is RequestsContainerController) {
+                        navigationController.setViewControllers([RequestsContainerController()], animated: true)
+                    }
+                case .contactChat(id: let id):
+                    if let session = try? DependencyInjection.Container.shared.resolve() as SessionType,
+                       let contact = try? session.dbManager.fetchContacts(.init(id: [id])).first {
+                        navigationController.setViewControllers([
+                            ChatListController(),
+                            SingleChatController(contact)
+                        ], animated: true)
+                    }
+                case .groupChat(id: let id):
+                    if let session = try? DependencyInjection.Container.shared.resolve() as SessionType,
+                       let info = try? session.dbManager.fetchGroupInfos(.init(groupId: id)).first {
+                        navigationController.setViewControllers([
+                            ChatListController(),
+                            GroupChatController(info)
+                        ], animated: true)
+                    }
+                }
+            }
+
+            completion()
+        }
+    }
+}
diff --git a/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift b/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift
index cab4842ca9f44ca0f8985f941387bd5692bc155a..8206e136f89d0068432458ccac97d8ebe544c2da 100644
--- a/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift
+++ b/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift
@@ -48,6 +48,8 @@ final class SearchLeftViewModel {
             stateSubject.value.input = pendingInvitation
             hudSubject.send(.onAction(Localized.Ud.Search.cancel))
 
+            networkCancellable.removeAll()
+
             networkMonitor.statusPublisher
                 .first { $0 == .available }
                 .eraseToAnyPublisher()
diff --git a/Tests/AppTests/General/InvitationTests.swift b/Tests/AppTests/General/InvitationTests.swift
index bbd80d6e2e1507fb35fd4751fa087fa4be687788..146c885afab3c85686cc5f216c8e85ff851911b5 100644
--- a/Tests/AppTests/General/InvitationTests.swift
+++ b/Tests/AppTests/General/InvitationTests.swift
@@ -4,18 +4,18 @@ import XCTest
 
 final class AppDelegateTests: XCTestCase {
     func test_invitationDeeplink() {
-        let host = "messenger"
-        let query = "invitation"
-        let scheme = "xxnetwork"
-        let username = "john_doe"
+        XCTAssertNil(
+            getUsernameFromInvitationDeepLink(URL(string: "http://messenger?invitation=john_doe")!)
+        )
 
-        let url = URL(string: "\(scheme)://\(host)?\(query)=\(username)")!
-        XCTAssertEqual(getUsernameFromInvitationDeepLink(url), username)
+        XCTAssertNotEqual(
+            getUsernameFromInvitationDeepLink(URL(string: "xxnetwork://messenger?invitation=the_rock")!),
+            "john_doe"
+        )
 
-        let malformedURL = URL(string: "\(scheme)\(host)\(query)\(username)")!
-        XCTAssertNil(getUsernameFromInvitationDeepLink(malformedURL))
-
-        let urlAnotherUsername = URL(string: "\(scheme)://\(host)?\(query)=asdfg")!
-        XCTAssertNotEqual(getUsernameFromInvitationDeepLink(urlAnotherUsername), username)
+        XCTAssertEqual(
+            getUsernameFromInvitationDeepLink(URL(string: "xxnetwork://messenger?invitation=john_doe")!),
+            "john_doe"
+        )
     }
 }