diff --git a/Examples/xx-messenger/Sources/MyContactFeature/MyContactFeature.swift b/Examples/xx-messenger/Sources/MyContactFeature/MyContactFeature.swift
index 9669cac5f4c7fd1ec18924cf22a20ea04046b2ad..818807c8229fed9d17ccd90c94711046dc651d37 100644
--- a/Examples/xx-messenger/Sources/MyContactFeature/MyContactFeature.swift
+++ b/Examples/xx-messenger/Sources/MyContactFeature/MyContactFeature.swift
@@ -1,4 +1,5 @@
 import AppCore
+import Combine
 import ComposableArchitecture
 import Foundation
 import XCTestDynamicOverlay
@@ -111,7 +112,24 @@ public let myContactReducer = Reducer<MyContactState, MyContactAction, MyContact
     return .none
 
   case .loadFactsTapped:
-    return .none
+    return Effect.run { subscriber in
+      do {
+        let contactId = try env.messenger.e2e.tryGet().getContact().getId()
+        if var dbContact = try env.db().fetchContacts(.init(id: [contactId])).first {
+          let facts = try env.messenger.ud.tryGet().getFacts()
+          dbContact.email = facts.get(.email)?.value
+          dbContact.phone = facts.get(.phone)?.value
+          try env.db().saveContact(dbContact)
+        }
+      } catch {
+        subscriber.send(.didFail(error.localizedDescription))
+      }
+      subscriber.send(completion: .finished)
+      return AnyCancellable {}
+    }
+    .subscribe(on: env.bgQueue)
+    .receive(on: env.mainQueue)
+    .eraseToEffect()
 
   case .didFail(let failure):
     state.alert = .error(failure)
diff --git a/Examples/xx-messenger/Tests/MyContactFeatureTests/MyContactFeatureTests.swift b/Examples/xx-messenger/Tests/MyContactFeatureTests/MyContactFeatureTests.swift
index 169450c8f0ecb7a6e57d17f1bae82ee856ee1f54..62e7fcd9959e5583e55bce9c5a2a6cb413999c32 100644
--- a/Examples/xx-messenger/Tests/MyContactFeatureTests/MyContactFeatureTests.swift
+++ b/Examples/xx-messenger/Tests/MyContactFeatureTests/MyContactFeatureTests.swift
@@ -111,13 +111,61 @@ final class MyContactFeatureTests: XCTestCase {
   }
 
   func testLoadFactsFromClient() {
+    let contactId = "contact-id".data(using: .utf8)!
+    let dbContact = XXModels.Contact(id: contactId)
+    let email = "test@email.com"
+    let phone = "123456789"
+
+    var didFetchContacts: [XXModels.Contact.Query] = []
+    var didSaveContact: [XXModels.Contact] = []
+
     let store = TestStore(
       initialState: MyContactState(),
       reducer: myContactReducer,
       environment: .unimplemented
     )
 
+    store.environment.mainQueue = .immediate
+    store.environment.bgQueue = .immediate
+    store.environment.messenger.e2e.get = {
+      var e2e: E2E = .unimplemented
+      e2e.getContact.run = {
+        var contact: XXClient.Contact = .unimplemented(Data())
+        contact.getIdFromContact.run = { _ in contactId }
+        return contact
+      }
+      return e2e
+    }
+    store.environment.messenger.ud.get = {
+      var ud: UserDiscovery = .unimplemented
+      ud.getFacts.run = {
+        [
+          Fact(type: .email, value: email),
+          Fact(type: .phone, value: phone),
+        ]
+      }
+      return ud
+    }
+    store.environment.db.run = {
+      var db: Database = .failing
+      db.fetchContacts.run = { query in
+        didFetchContacts.append(query)
+        return [dbContact]
+      }
+      db.saveContact.run = { contact in
+        didSaveContact.append(contact)
+        return contact
+      }
+      return db
+    }
+
     store.send(.loadFactsTapped)
+
+    XCTAssertNoDifference(didFetchContacts, [.init(id: [contactId])])
+    var expectedSavedContact = dbContact
+    expectedSavedContact.email = email
+    expectedSavedContact.phone = phone
+    XCTAssertNoDifference(didSaveContact, [expectedSavedContact])
   }
 
   func testErrorAlert() {