diff --git a/Package.swift b/Package.swift
index b74da3460ef87448c09191338411819e7b5e5a0b..c4e214a96a77d35bc509e339f27703c3ce6a708b 100644
--- a/Package.swift
+++ b/Package.swift
@@ -223,6 +223,7 @@ let package = Package(
             dependencies: [
                 .target(name: "Models"),
                 .target(name: "Defaults"),
+                .target(name: "ReportingFeature"),
                 .target(name: "DependencyInjection"),
                 .product(name: "XXDatabase", package: "client-ios-db"),
             ]
@@ -625,6 +626,7 @@ let package = Package(
                 .target(name: "Defaults"),
                 .target(name: "Presentation"),
                 .target(name: "DrawerFeature"),
+                .target(name: "ReportingFeature"),
                 .target(name: "DependencyInjection"),
             ]
         ),
diff --git a/Sources/App/DependencyRegistrator.swift b/Sources/App/DependencyRegistrator.swift
index 026bfd56440502e4597d9cb00d2e8a4bb4000b75..7cc24828d71c4e61893d51610986662b8366cf07 100644
--- a/Sources/App/DependencyRegistrator.swift
+++ b/Sources/App/DependencyRegistrator.swift
@@ -129,14 +129,14 @@ struct DependencyRegistrator {
 
         container.register(
             TermsCoordinator.live(
-                usernameFactory: OnboardingUsernameController.init(_:),
+                usernameFactory: OnboardingUsernameController.init,
                 chatListFactory: ChatListController.init
             )
         )
 
         container.register(
             LaunchCoordinator(
-                termsFactory: TermsConditionsController.init(_:),
+                termsFactory: TermsConditionsController.init,
                 searchFactory: SearchContainerController.init,
                 requestsFactory: RequestsContainerController.init,
                 chatListFactory: ChatListController.init,
diff --git a/Sources/ChatFeature/Controllers/GroupChatController.swift b/Sources/ChatFeature/Controllers/GroupChatController.swift
index 5cae4a063a3969e806e1b7c9089d888d345357f3..557d8f3f9e137de6648cc4028952c81196592e31 100644
--- a/Sources/ChatFeature/Controllers/GroupChatController.swift
+++ b/Sources/ChatFeature/Controllers/GroupChatController.swift
@@ -7,7 +7,6 @@ import Combine
 import XXModels
 import Voxophone
 import ChatLayout
-import Integration
 import DrawerFeature
 import DifferenceKit
 import ReportingFeature
@@ -23,7 +22,7 @@ typealias OutgoingFailedGroupReplyCell = CollectionCell<FlexibleSpace, ReplyStac
 
 public final class GroupChatController: UIViewController {
     @Dependency private var hud: HUD
-    @Dependency private var session: SessionType
+    @Dependency private var database: Database
     @Dependency private var coordinator: ChatCoordinating
     @Dependency private var reportingStatus: ReportingStatus
     @Dependency private var makeReportDrawer: MakeReportDrawer
@@ -360,7 +359,7 @@ extension GroupChatController: UICollectionViewDataSource {
 
         var isSenderBanned = false
 
-        if let sender = try? session.dbManager.fetchContacts(.init(id: [item.senderId])).first {
+        if let sender = try? database.fetchContacts(.init(id: [item.senderId])).first {
             isSenderBanned = sender.isBanned
         }
 
diff --git a/Sources/ChatFeature/ViewModels/GroupChatViewModel.swift b/Sources/ChatFeature/ViewModels/GroupChatViewModel.swift
index 15754255d38b1ceba68ffd9ee2b20a815b493516..4e27cad3cb94ea2bff302a5393be41f215c35296 100644
--- a/Sources/ChatFeature/ViewModels/GroupChatViewModel.swift
+++ b/Sources/ChatFeature/ViewModels/GroupChatViewModel.swift
@@ -93,7 +93,7 @@ final class GroupChatViewModel {
     }
 
     func didRequestReport(_ message: Message) {
-        if let contact = try? session.dbManager.fetchContacts(.init(id: [message.senderId])).first {
+        if let contact = try? database.fetchContacts(.init(id: [message.senderId])).first {
             reportPopupSubject.send(contact)
         }
     }
@@ -253,7 +253,7 @@ final class GroupChatViewModel {
                 username: contact.username!
             ),
             recipient: .init(
-                userId: session.myId.base64EncodedString(),
+                userId: myId.base64EncodedString(),
                 username: username!
             ),
             type: .group,
@@ -288,7 +288,7 @@ final class GroupChatViewModel {
     private func blockContact(_ contact: Contact) {
         var contact = contact
         contact.isBlocked = true
-        _ = try? session.dbManager.saveContact(contact)
+        _ = try? database.saveContact(contact)
     }
 
     private func presentReportConfirmation(contact: Contact) {
diff --git a/Sources/ChatFeature/ViewModels/SingleChatViewModel.swift b/Sources/ChatFeature/ViewModels/SingleChatViewModel.swift
index 3593e3da61ec3c4be761455e58cdb4bd37bcf902..5014a493ed5a80276d08483bdf94e33d557ecd79 100644
--- a/Sources/ChatFeature/ViewModels/SingleChatViewModel.swift
+++ b/Sources/ChatFeature/ViewModels/SingleChatViewModel.swift
@@ -6,6 +6,7 @@ import Combine
 import XXLogger
 import XXModels
 import XXClient
+import Defaults
 import Foundation
 import Permissions
 import ToastFeature
@@ -424,7 +425,7 @@ final class SingleChatViewModel: NSObject {
                 username: contact.username!
             ),
             recipient: .init(
-                userId: session.myId.base64EncodedString(),
+                userId: myId.base64EncodedString(),
                 username: username!
             ),
             type: .dm,
@@ -454,7 +455,7 @@ final class SingleChatViewModel: NSObject {
     private func blockContact() {
         var contact = contact
         contact.isBlocked = true
-        _ = try? session.dbManager.saveContact(contact)
+        _ = try? database.saveContact(contact)
     }
 
     private func presentReportConfirmation() {
diff --git a/Sources/ChatListFeature/ViewModel/ChatListViewModel.swift b/Sources/ChatListFeature/ViewModel/ChatListViewModel.swift
index ab527d846e9966c888a8b36eacc0f1742b01d33a..e578d5f791b87c69e1cf27bba917f32c9c4b1af3 100644
--- a/Sources/ChatListFeature/ViewModel/ChatListViewModel.swift
+++ b/Sources/ChatListFeature/ViewModel/ChatListViewModel.swift
@@ -57,12 +57,12 @@ final class ChatListViewModel {
         return database.fetchContactsPublisher(query)
             .assertNoFailure()
             .map {
-            let section = SectionId()
-            var snapshot = RecentsSnapshot()
-            snapshot.appendSections([section])
-            snapshot.appendItems($0, toSection: section)
-            return snapshot
-        }.eraseToAnyPublisher()
+                let section = SectionId()
+                var snapshot = RecentsSnapshot()
+                snapshot.appendSections([section])
+                snapshot.appendItems($0, toSection: section)
+                return snapshot
+            }.eraseToAnyPublisher()
     }
 
     var searchPublisher: AnyPublisher<SearchSnapshot, Never> {
@@ -71,56 +71,56 @@ final class ChatListViewModel {
             isBanned: reportingStatus.isEnabled() ? false : nil
         )
 
-        Publishers.CombineLatest3(
+        return Publishers.CombineLatest3(
             database.fetchContactsPublisher(contactsQuery)
                 .assertNoFailure()
-                .map { $0.filter { $0.id != self.session.myId }},
+                .map { $0.filter { $0.id != self.myId }},
             chatsPublisher,
             searchSubject
                 .removeDuplicates()
                 .debounce(for: .milliseconds(100), scheduler: DispatchQueue.main)
                 .eraseToAnyPublisher()
         )
-            .map { (contacts, chats, query) in
-                let connectionItems = contacts.filter {
-                    let username = $0.username?.lowercased().contains(query.lowercased()) ?? false
-                    let nickname = $0.nickname?.lowercased().contains(query.lowercased()) ?? false
-                    return username || nickname
-                }.map(SearchItem.connection)
-
-                let chatItems = chats.filter {
-                    switch $0 {
-                    case .group(let group):
-                        return group.name.lowercased().contains(query.lowercased())
-
-                    case .groupChat(let info):
-                        let name = info.group.name.lowercased().contains(query.lowercased())
-                        let last = info.lastMessage.text.lowercased().contains(query.lowercased())
-                        return name || last
-
-                    case .contactChat(let info):
-                        let username = info.contact.username?.lowercased().contains(query.lowercased()) ?? false
-                        let nickname = info.contact.nickname?.lowercased().contains(query.lowercased()) ?? false
-                        let lastMessage = info.lastMessage.text.lowercased().contains(query.lowercased())
-                        return username || nickname || lastMessage
-
-                    }
-                }.map(SearchItem.chat)
-
-                var snapshot = SearchSnapshot()
-
-                if connectionItems.count > 0 {
-                    snapshot.appendSections([.connections])
-                    snapshot.appendItems(connectionItems, toSection: .connections)
-                }
+        .map { (contacts, chats, query) in
+            let connectionItems = contacts.filter {
+                let username = $0.username?.lowercased().contains(query.lowercased()) ?? false
+                let nickname = $0.nickname?.lowercased().contains(query.lowercased()) ?? false
+                return username || nickname
+            }.map(SearchItem.connection)
+
+            let chatItems = chats.filter {
+                switch $0 {
+                case .group(let group):
+                    return group.name.lowercased().contains(query.lowercased())
+
+                case .groupChat(let info):
+                    let name = info.group.name.lowercased().contains(query.lowercased())
+                    let last = info.lastMessage.text.lowercased().contains(query.lowercased())
+                    return name || last
+
+                case .contactChat(let info):
+                    let username = info.contact.username?.lowercased().contains(query.lowercased()) ?? false
+                    let nickname = info.contact.nickname?.lowercased().contains(query.lowercased()) ?? false
+                    let lastMessage = info.lastMessage.text.lowercased().contains(query.lowercased())
+                    return username || nickname || lastMessage
 
-                if chatItems.count > 0 {
-                    snapshot.appendSections([.chats])
-                    snapshot.appendItems(chatItems, toSection: .chats)
                 }
+            }.map(SearchItem.chat)
 
-                return snapshot
-            }.eraseToAnyPublisher()
+            var snapshot = SearchSnapshot()
+
+            if connectionItems.count > 0 {
+                snapshot.appendSections([.connections])
+                snapshot.appendItems(connectionItems, toSection: .connections)
+            }
+
+            if chatItems.count > 0 {
+                snapshot.appendSections([.chats])
+                snapshot.appendItems(chatItems, toSection: .chats)
+            }
+
+            return snapshot
+        }.eraseToAnyPublisher()
     }
 
     var badgeCountPublisher: AnyPublisher<Int, Never> {
@@ -168,9 +168,9 @@ final class ChatListViewModel {
                     authStatus: [.participating]
                 )
             ))
-            .assertNoFailure()
-            .sink { [unowned self] in chatsSubject.send($0) }
-            .store(in: &cancellables)
+        .assertNoFailure()
+        .sink { [unowned self] in chatsSubject.send($0) }
+        .store(in: &cancellables)
     }
 
     func updateSearch(query: String) {
diff --git a/Sources/LaunchFeature/LaunchCoordinator.swift b/Sources/LaunchFeature/LaunchCoordinator.swift
index acdc52aa74bd3a428abe438d539888f82bbbe957..b07a99c759cf5a4748a66c5d0a51db08c6117848 100644
--- a/Sources/LaunchFeature/LaunchCoordinator.swift
+++ b/Sources/LaunchFeature/LaunchCoordinator.swift
@@ -16,7 +16,7 @@ public protocol LaunchCoordinating {
 public struct LaunchCoordinator: LaunchCoordinating {
     var replacePresenter: Presenting = ReplacePresenter()
 
-    var termsFactory: (String?) -> UIViewController
+    var termsFactory: () -> UIViewController
     var searchFactory: (String) -> UIViewController
     var requestsFactory: () -> UIViewController
     var chatListFactory: () -> UIViewController
@@ -25,7 +25,7 @@ public struct LaunchCoordinator: LaunchCoordinating {
     var groupChatFactory: (GroupInfo) -> UIViewController
 
     public init(
-        termsFactory: @escaping (String?) -> UIViewController,
+        termsFactory: @escaping () -> UIViewController,
         searchFactory: @escaping (String) -> UIViewController,
         requestsFactory: @escaping () -> UIViewController,
         chatListFactory: @escaping () -> UIViewController,
@@ -51,7 +51,7 @@ public extension LaunchCoordinator {
     }
 
     func toTerms(from parent: UIViewController) {
-        let screen = termsFactory(nil)
+        let screen = termsFactory()
         replacePresenter.present(screen, from: parent)
     }
 
diff --git a/Sources/LaunchFeature/LaunchViewModel.swift b/Sources/LaunchFeature/LaunchViewModel.swift
index ecfcbfb557d0c2b5a111229a88c5135e9d76849a..a520214e7128adab618c57517450122f925804ee 100644
--- a/Sources/LaunchFeature/LaunchViewModel.swift
+++ b/Sources/LaunchFeature/LaunchViewModel.swift
@@ -93,50 +93,49 @@ final class LaunchViewModel {
     }
 
     func versionApproved() {
-        //self.updateBannedList {
+        updateBannedList { [weak self] in
+            guard let self = self else { return }
 
-        _ = try? SetLogLevel.live(.trace)
+            _ = try? SetLogLevel.live(.trace)
 
-        try! setupDatabase()
+            try! self.setupDatabase()
 
-        if cMixManager.hasStorage(), username != nil {
-            checkBiometrics { [weak self] in
-                guard let self = self else { return }
+            if self.cMixManager.hasStorage(), self.username != nil {
+                self.checkBiometrics { [weak self] in
+                    guard let self = self else { return }
 
-                switch $0 {
-                case .success(false):
-                    break
-                case .success(true):
-                    do {
-                        //UpdateCommonErrors.live(jsonFile: ) DOWNLOAD THE JSON FROM THE REPO
-
-                        let cMix = try self.initCMix()
-                        try cMix.startNetworkFollower(timeoutMS: 10_000)
-                        guard cMix.waitForNetwork(timeoutMS: 10_000) else {
-                            fatalError("^^^ cMix.waitForNetwork returned FALSE")
+                    switch $0 {
+                    case .success(false):
+                        break
+                    case .success(true):
+                        do {
+                            //UpdateCommonErrors.live(jsonFile: ) DOWNLOAD THE JSON FROM THE REPO
+
+                            let cMix = try self.initCMix()
+                            try cMix.startNetworkFollower(timeoutMS: 10_000)
+                            guard cMix.waitForNetwork(timeoutMS: 30_000) else {
+                                fatalError("^^^ cMix.waitForNetwork returned FALSE")
+                            }
+
+                            let e2e = try self.initE2E(cMix)
+                            _ = try self.initUD(alternative: true, e2e: e2e, cMix: cMix)
+                            _ = try self.initGroupManager(e2e)
+                            _ = try self.initTransferManager(e2e)
+                            _ = try self.initDummyTrafficManager(e2e)
+
+                            self.hudSubject.send(.none)
+                            self.routeSubject.send(.chats)
+                        } catch {
+                            self.hudSubject.send(.error(.init(with: error)))
                         }
-
-                        let e2e = try self.initE2E(cMix)
-                        _ = try self.initUD(alternative: true, e2e: e2e, cMix: cMix)
-                        _ = try self.initGroupManager(e2e)
-                        _ = try self.initTransferManager(e2e)
-                        _ = try self.initDummyTrafficManager(e2e)
-
-
-                        self.hudSubject.send(.none)
-                        self.routeSubject.send(.chats)
-                    } catch {
+                    case .failure(let error):
                         self.hudSubject.send(.error(.init(with: error)))
                     }
-                case .failure(let error):
-                    self.hudSubject.send(.error(.init(with: error)))
                 }
-            case .failure(let error):
-                self.hudSubject.send(.error(HUDError(with: error)))
+            } else {
+                self.cleanUp()
+                self.presentOnboardingFlow()
             }
-        } else {
-            cleanUp()
-            presentOnboardingFlow()
         }
     }
 
@@ -326,15 +325,17 @@ final class LaunchViewModel {
         let cert = alternative ? try Data(contentsOf: URL(fileURLWithPath: certPath)) : e2e.getUdCertFromNdf()
         let contactFile = alternative ? try Data(contentsOf: URL(fileURLWithPath: contactFilePath)) : try e2e.getUdContactFromNdf()
 
-        let userDiscovery = try NewOrLoadUd.live(.init(
-            e2eId: e2e.getId(),
-            follower: .init(handle: { cMix.networkFollowerStatus().rawValue }),
-            username: username!,
-            registrationValidationSignature: cMix.getReceptionRegistrationValidationSignature(),
-            cert: cert,
-            contactFile: contactFile,
-            address: address
-        ))
+        let userDiscovery = try NewOrLoadUd.live(
+            params: .init(
+                e2eId: e2e.getId(),
+                username: username!,
+                registrationValidationSignature: cMix.getReceptionRegistrationValidationSignature(),
+                cert: cert,
+                contactFile: contactFile,
+                address: address
+            ),
+            follower: .init(handle: { cMix.networkFollowerStatus() })
+        )
 
         DependencyInjection.Container.shared.register(userDiscovery)
         return userDiscovery
@@ -519,14 +520,14 @@ final class LaunchViewModel {
                 switch result {
                 case .success(let userId):
                     let query = Contact.Query(id: [userId])
-                    if var contact = try! self.session.dbManager.fetchContacts(query).first {
+                    if var contact = try! database.fetchContacts(query).first {
                         if contact.isBanned == false {
                             contact.isBanned = true
-                            try! self.session.dbManager.saveContact(contact)
+                            try! database.saveContact(contact)
                             self.enqueueBanWarning(contact: contact)
                         }
                     } else {
-                        try! self.session.dbManager.saveContact(.init(id: userId, isBanned: true))
+                        try! database.saveContact(.init(id: userId, isBanned: true))
                     }
 
                 case .failure(_):
diff --git a/Sources/LaunchFeature/Resources/udContact.bin b/Sources/LaunchFeature/Resources/udContact.bin
index b2611d4124e7d083ad99cf37eba3810cc6d8926c..eddc5d47220ef6ad9010c5bb0f9d53213bd87736 100644
--- a/Sources/LaunchFeature/Resources/udContact.bin
+++ b/Sources/LaunchFeature/Resources/udContact.bin
@@ -1 +1 @@
-<xxc(2)7mbKFLE201WzH4SGxAOpHjjehwztIV+KGifi5L/PYPcDkAZiB9kZo+Dl3Vc7dD2SdZCFMOJVgwqGzfYRDkjc8RGEllBqNxq2sRRX09iQVef0kJQUgJCHNCOcvm6Ki0JJwvjLceyFh36iwK8oLbhLgqEZY86UScdACTyBCzBIab3ob5mBthYc3mheV88yq5PGF2DQ+dEvueUm+QhOSfwzppAJA/rpW9Wq9xzYcQzaqc3ztAGYfm2BBAHS7HVmkCbvZ/K07Xrl4EBPGHJYq12tWAN/C3mcbbBYUOQXyEzbSl/mO7sL3ORr0B4FMuqCi8EdlD6RO52pVhY+Cg6roRH1t5Ng1JxPt8Mv1yyjbifPhZ5fLKwxBz8UiFORfk0/jnhwgm25LRHqtNRRUlYXLvhv0HhqyYTUt17WNtCLATSVbqLrFGdy2EGadn8mP+kQNHp93f27d/uHgBNNe7LpuYCJMdWpoG6bOqmHEftxt0/MIQA8fTtTm3jJzv+7/QjZJDvQIv0SNdp8HFogpuwde+GuS4BcY7v5xz+ArGWcRR63ct2z83MqQEn9ODr1/gAAAgA7szRpDDQIdFUQo9mkWg8xBA==xxc>
\ No newline at end of file
+<xxc(2)TMJw0XHBSzVPUAo/ZsAuD5DiOF1RH8uxZxUHW2KG9PYDkAZiB9kZo+Dl3a+leHJP1aP7KQtifEOGqQAxsBnOtd2nIe3/jw//LDqs8mZcL8wsMydDoFwycEZQIHg85L17q6u3pRMXcSfvFLBuL6H2HxP+U3Sox9YTgaPNK191opr14t03jfM7gaBcdbk9PE/hwUeotu3eTavqy4lFNIa917wZCDf+n9aGz9jB2q/axf0x+h0h1uVQD6xaAJD5gqyvCmECU/iCaYCbPUh+zFfSEymujIFWscZAJL6ocPn9DCYw80mbKpm0BDQRBm+EVqo4KVMsLqbx0hJJ8Vh5a8c9f+aiBXjlwnZJ2Z8DzxbsVg7VzJc5sn5Dl0ajrkzBdZBWbgOJEgN7nIdmb3gW7poVUR1JtRIctW3wS+7/qHmLZC1SQ+x3O+eEFmb5HrulsvsUkIkFKRPQguwql9HLDA00zqg5tuDzy5yqyP//xZY4SelSTMDO/pkOMP921LaXsRzBWMGCRWa/uzaDhIgnXVs2cyxM1K5jLwQml44QWAxxTGBX/EhYpMbHLAn4+QAAAgA7Nv4tnMt8oC0Ffog/appCEA==xxc>
diff --git a/Sources/OnboardingFeature/ViewModels/OnboardingUsernameViewModel.swift b/Sources/OnboardingFeature/ViewModels/OnboardingUsernameViewModel.swift
index 8204662cd4be86e178846626993e95e120cbe2c0..ff42649863f0a7768af70d30a5482be0b3e13591 100644
--- a/Sources/OnboardingFeature/ViewModels/OnboardingUsernameViewModel.swift
+++ b/Sources/OnboardingFeature/ViewModels/OnboardingUsernameViewModel.swift
@@ -132,15 +132,17 @@ final class OnboardingUsernameViewModel {
         let cert = alternative ? try Data(contentsOf: URL(fileURLWithPath: certPath)) : e2e.getUdCertFromNdf()
         let contactFile = alternative ? try Data(contentsOf: URL(fileURLWithPath: contactFilePath)) : try e2e.getUdContactFromNdf()
 
-        let userDiscovery = try NewOrLoadUd.live(.init(
-            e2eId: e2e.getId(),
-            follower: .init(handle: { cMix.networkFollowerStatus().rawValue }),
-            username: self.stateRelay.value.input,
-            registrationValidationSignature: cMix.getReceptionRegistrationValidationSignature(),
-            cert: cert,
-            contactFile: contactFile,
-            address: address
-        ))
+        let userDiscovery = try NewOrLoadUd.live(
+            params: .init(
+                e2eId: e2e.getId(),
+                username: self.stateRelay.value.input,
+                registrationValidationSignature: cMix.getReceptionRegistrationValidationSignature(),
+                cert: cert,
+                contactFile: contactFile,
+                address: address
+            ),
+            follower: .init(handle: { cMix.networkFollowerStatus() })
+        )
 
         username = self.stateRelay.value.input
         DependencyInjection.Container.shared.register(userDiscovery)
diff --git a/Sources/RestoreFeature/ViewModels/RestoreViewModel.swift b/Sources/RestoreFeature/ViewModels/RestoreViewModel.swift
index 4207eb1b82eacd2f726bb8e0f8d07d7ce8a6e5c8..4560f3cdf81f655560aebfb18446ab889546aa23 100644
--- a/Sources/RestoreFeature/ViewModels/RestoreViewModel.swift
+++ b/Sources/RestoreFeature/ViewModels/RestoreViewModel.swift
@@ -179,11 +179,19 @@ final class RestoreViewModel {
                     from: paramsData
                 )
 
-                var phoneFact: Fact?
-
                 self.phone = facts.phone
                 self.email = facts.email
 
+                var emailFact: Fact? = {
+                    if let email = facts.email { return Fact(fact: email, type: FactType.email.rawValue) }
+                    return nil
+                }()
+
+                var phoneFact: Fact? = {
+                    if let phone = facts.phone { return Fact(fact: phone, type: FactType.phone.rawValue) }
+                    return nil
+                }()
+
                 let cMix = try self.cMixManager.load()
 
                 DependencyInjection.Container.shared.register(cMix)
@@ -225,15 +233,18 @@ final class RestoreViewModel {
                     fatalError("Couldn't retrieve alternative UD credentials")
                 }
 
-                let userDiscovery = try NewUdManagerFromBackup.live(.init(
-                    e2eId: e2e.getId(),
-                    follower: .init(handle: { cMix.networkFollowerStatus().rawValue }),
-                    email: nil,
-                    phone: nil,
-                    cert: Data(contentsOf: URL(fileURLWithPath: certPath)),
-                    contactFile: Data(contentsOf: URL(fileURLWithPath: contactFilePath)),
-                    address: "46.101.98.49:18001"
-                ))
+                let userDiscovery = try NewUdManagerFromBackup.live(
+                    params: .init(
+                        e2eId: e2e.getId(),
+                        username: Fact(fact: facts.username, type: 0),
+                        email: emailFact,
+                        phone: phoneFact,
+                        cert: Data(contentsOf: URL(fileURLWithPath: certPath)),
+                        contactFile: Data(contentsOf: URL(fileURLWithPath: contactFilePath)),
+                        address: "46.101.98.49:18001"
+                    ),
+                    follower: .init(handle: { cMix.networkFollowerStatus() })
+                )
 
                 DependencyInjection.Container.shared.register(userDiscovery)
 
diff --git a/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift b/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift
index d608dc01c95d17aad9ba18d08b6f0161d502840a..f24715e997e11ee3bacba17f199684dc609a22b7 100644
--- a/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift
+++ b/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift
@@ -25,6 +25,7 @@ struct SearchLeftViewState {
 
 final class SearchLeftViewModel {
     @Dependency var e2e: E2E
+    @Dependency var cMix: CMix
     @Dependency var database: Database
     @Dependency var userDiscovery: UserDiscovery
     @Dependency var reportingStatus: ReportingStatus
@@ -107,41 +108,43 @@ final class SearchLeftViewModel {
         hudSubject.send(.onAction(Localized.Ud.Search.cancel))
 
         var content = stateSubject.value.input
-        let prefix = stateSubject.value.item.written.first!.uppercased()
 
         if stateSubject.value.item == .phone {
             content += stateSubject.value.country.code
         }
 
-//        backgroundScheduler.schedule { [weak self] in
-//            guard let self = self else { return }
+        let nrr = try! cMix.getNodeRegistrationStatus()
+        print("^^^ NRR: \(nrr.ratio)")
+
+        backgroundScheduler.schedule { [weak self] in
+            guard let self = self else { return }
 
             do {
                 let report = try SearchUD.live(
                     e2eId: self.e2e.getId(),
                     udContact: self.userDiscovery.getContact(),
-                    facts: [Fact(fact: "teste", type: 0)],
+                    facts: [Fact(fact: content, type: self.stateSubject.value.item.rawValue)],
                     callback: .init(handle: {
                         switch $0 {
                         case .success(let dataArray):
-                            print("^^^ \(#file):\(#line) \(dataArray.map { $0.base64EncodedString() })")
+                            print("^^^ searchUD success: \(dataArray.map { $0.base64EncodedString() })")
 
-                            // self.hudSubject.send(.none)
-                            // self.appendToLocalSearch(contact)
+                             self.hudSubject.send(.none)
+//                             self.appendToLocalSearch(contact)
 
                         case .failure(let error):
-                            print("^^^ \(#file):\(#line) error: \(error.localizedDescription)")
+                            print("^^^ searchUD error: \(error.localizedDescription)")
                             self.appendToLocalSearch(nil)
                             self.hudSubject.send(.error(.init(with: error)))
                         }
                     })
                 )
 
-                print(report)
+                print("^^^ report: \(report))")
             } catch {
-                print("^^^ \(#file):\(#line) error: \(error.localizedDescription)")
+                print("^^^ exception: \(error.localizedDescription)")
             }
-//        }
+        }
     }
 
     func didTapResend(contact: Contact) {
diff --git a/Sources/TermsFeature/TermsConditionsController.swift b/Sources/TermsFeature/TermsConditionsController.swift
index b11ef15215945e388c8043ed98e3bc6b5001e142..d458ffe114d7bf80c9d2ba4b3ffe347c2e8ada48 100644
--- a/Sources/TermsFeature/TermsConditionsController.swift
+++ b/Sources/TermsFeature/TermsConditionsController.swift
@@ -10,20 +10,13 @@ public final class TermsConditionsController: UIViewController {
     @Dependency var coordinator: TermsCoordinator
     @Dependency var statusBarController: StatusBarStyleControlling
 
+    @KeyObject(.username, defaultValue: nil) var username: String?
     @KeyObject(.acceptedTerms, defaultValue: false) var didAcceptTerms: Bool
 
     lazy private var screenView = TermsConditionsView()
 
-    private let ndf: String?
     private var cancellables = Set<AnyCancellable>()
 
-    public init(_ ndf: String?) {
-        self.ndf = ndf
-        super.init(nibName: nil, bundle: nil)
-    }
-
-    required init?(coder: NSCoder) { nil }
-
     public override func loadView() {
         view = screenView
     }
@@ -72,10 +65,10 @@ public final class TermsConditionsController: UIViewController {
             .sink { [unowned self] in
                 didAcceptTerms = true
 
-                if let ndf = ndf {
-                    coordinator.presentUsername(ndf, self)
-                } else {
+                if let _ = username {
                     coordinator.presentChatList(self)
+                } else {
+                    coordinator.presentUsername(self)
                 }
             }.store(in: &cancellables)
 
diff --git a/Sources/TermsFeature/TermsCoordinator.swift b/Sources/TermsFeature/TermsCoordinator.swift
index daff90e4b1b81b18e75e3a6e34557a3478e26f57..05e4fc6243da998037f92e9d3cad65845deb08e4 100644
--- a/Sources/TermsFeature/TermsCoordinator.swift
+++ b/Sources/TermsFeature/TermsCoordinator.swift
@@ -3,12 +3,12 @@ import Presentation
 
 public struct TermsCoordinator {
     var presentChatList: (UIViewController) -> Void
-    var presentUsername: (String, UIViewController) -> Void
+    var presentUsername: (UIViewController) -> Void
 }
 
 public extension TermsCoordinator {
     static func live(
-        usernameFactory: @escaping (String) -> UIViewController,
+        usernameFactory: @escaping () -> UIViewController,
         chatListFactory: @escaping () -> UIViewController
     ) -> Self {
         .init(
@@ -16,9 +16,9 @@ public extension TermsCoordinator {
                 let presenter = ReplacePresenter()
                 presenter.present(chatListFactory(), from: parent)
             },
-            presentUsername: { ndf, parent in
+            presentUsername: { parent in
                 let presenter = PushPresenter()
-                presenter.present(usernameFactory(ndf), from: parent)
+                presenter.present(usernameFactory(), from: parent)
             }
         )
     }