diff --git a/Examples/xx-messenger/Package.swift b/Examples/xx-messenger/Package.swift
index c2da9978d6ac07644d78a4161d741f5e22e85929..9c44e4411327a01b3bd6b336b5a2216acedaf825 100644
--- a/Examples/xx-messenger/Package.swift
+++ b/Examples/xx-messenger/Package.swift
@@ -102,6 +102,7 @@ let package = Package(
     .target(
       name: "CheckContactAuthFeature",
       dependencies: [
+        .target(name: "AppCore"),
         .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
         .product(name: "XXClient", package: "elixxir-dapps-sdk-swift"),
         .product(name: "XXMessengerClient", package: "elixxir-dapps-sdk-swift"),
diff --git a/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift b/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
index ae1da8b967a2db31994c641acea8b310dba25d6a..fa3774e877a4e353dd66e13102da636af4bebd25 100644
--- a/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
+++ b/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
@@ -54,6 +54,7 @@ extension AppEnvironment {
       checkAuth: {
         CheckContactAuthEnvironment(
           messenger: messenger,
+          db: dbManager.getDB,
           mainQueue: mainQueue,
           bgQueue: bgQueue
         )
diff --git a/Examples/xx-messenger/Sources/CheckContactAuthFeature/CheckContactAuthFeature.swift b/Examples/xx-messenger/Sources/CheckContactAuthFeature/CheckContactAuthFeature.swift
index 119ff27a2f2a73a772c0e9cf1c97cf7d983e285a..1f768be8d1cba4f20c1f2db65253788358a66023 100644
--- a/Examples/xx-messenger/Sources/CheckContactAuthFeature/CheckContactAuthFeature.swift
+++ b/Examples/xx-messenger/Sources/CheckContactAuthFeature/CheckContactAuthFeature.swift
@@ -1,8 +1,10 @@
+import AppCore
 import ComposableArchitecture
 import Foundation
 import XCTestDynamicOverlay
 import XXClient
 import XXMessengerClient
+import XXModels
 
 public struct CheckContactAuthState: Equatable {
   public enum Result: Equatable {
@@ -11,7 +13,7 @@ public struct CheckContactAuthState: Equatable {
   }
 
   public init(
-    contact: Contact,
+    contact: XXClient.Contact,
     isChecking: Bool = false,
     result: Result? = nil
   ) {
@@ -20,7 +22,7 @@ public struct CheckContactAuthState: Equatable {
     self.result = result
   }
 
-  public var contact: Contact
+  public var contact: XXClient.Contact
   public var isChecking: Bool
   public var result: Result?
 }
@@ -33,15 +35,18 @@ public enum CheckContactAuthAction: Equatable {
 public struct CheckContactAuthEnvironment {
   public init(
     messenger: Messenger,
+    db: DBManagerGetDB,
     mainQueue: AnySchedulerOf<DispatchQueue>,
     bgQueue: AnySchedulerOf<DispatchQueue>
   ) {
     self.messenger = messenger
+    self.db = db
     self.mainQueue = mainQueue
     self.bgQueue = bgQueue
   }
 
   public var messenger: Messenger
+  public var db: DBManagerGetDB
   public var mainQueue: AnySchedulerOf<DispatchQueue>
   public var bgQueue: AnySchedulerOf<DispatchQueue>
 }
@@ -50,6 +55,7 @@ public struct CheckContactAuthEnvironment {
 extension CheckContactAuthEnvironment {
   public static let unimplemented = CheckContactAuthEnvironment(
     messenger: .unimplemented,
+    db: .unimplemented,
     mainQueue: .unimplemented,
     bgQueue: .unimplemented
   )
@@ -67,6 +73,10 @@ public let checkContactAuthReducer = Reducer<CheckContactAuthState, CheckContact
         let e2e = try env.messenger.e2e.tryGet()
         let contactId = try state.contact.getId()
         let result = try e2e.hasAuthenticatedChannel(partnerId: contactId)
+        try env.db().bulkUpdateContacts.callAsFunction(
+          .init(id: [contactId]),
+          .init(authStatus: result ? .friend : .stranger)
+        )
         return .success(.didCheck(.success(result)))
       } catch {
         return .success(.didCheck(.failure(error.localizedDescription)))
diff --git a/Examples/xx-messenger/Tests/CheckContactAuthFeatureTests/CheckContactAuthFeatureTests.swift b/Examples/xx-messenger/Tests/CheckContactAuthFeatureTests/CheckContactAuthFeatureTests.swift
index 1c36e33e9d43509b986c0bce4d9bd4304ef9cd6e..95f5a80773838e9b72d4f8c6e380e0f7ce8799fd 100644
--- a/Examples/xx-messenger/Tests/CheckContactAuthFeatureTests/CheckContactAuthFeatureTests.swift
+++ b/Examples/xx-messenger/Tests/CheckContactAuthFeatureTests/CheckContactAuthFeatureTests.swift
@@ -1,11 +1,13 @@
 import ComposableArchitecture
+import CustomDump
 import XCTest
 import XXClient
+import XXModels
 @testable import CheckContactAuthFeature
 
 final class CheckContactAuthFeatureTests: XCTestCase {
   func testCheck() {
-    var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
+    var contact = XXClient.Contact.unimplemented("contact-data".data(using: .utf8)!)
     let contactId = "contact-id".data(using: .utf8)!
     contact.getIdFromContact.run = { _ in contactId }
 
@@ -18,6 +20,8 @@ final class CheckContactAuthFeatureTests: XCTestCase {
     )
 
     var didCheckPartnerId: [Data] = []
+    var didBulkUpdateContactsWithQuery: [XXModels.Contact.Query] = []
+    var didBulkUpdateContactsWithAssignments: [XXModels.Contact.Assignments] = []
 
     store.environment.mainQueue = .immediate
     store.environment.bgQueue = .immediate
@@ -29,12 +33,25 @@ final class CheckContactAuthFeatureTests: XCTestCase {
       }
       return e2e
     }
+    store.environment.db.run = {
+      var db: Database = .failing
+      db.bulkUpdateContacts.run = { query, assignments in
+        didBulkUpdateContactsWithQuery.append(query)
+        didBulkUpdateContactsWithAssignments.append(assignments)
+        return 0
+      }
+      return db
+    }
 
     store.send(.checkTapped) {
       $0.isChecking = true
       $0.result = nil
     }
 
+    XCTAssertNoDifference(didCheckPartnerId, [contactId])
+    XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [.init(id: [contactId])])
+    XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [.init(authStatus: .friend)])
+
     store.receive(.didCheck(.success(true))) {
       $0.isChecking = false
       $0.result = .success(true)
@@ -42,7 +59,7 @@ final class CheckContactAuthFeatureTests: XCTestCase {
   }
 
   func testCheckNoConnection() {
-    var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
+    var contact = XXClient.Contact.unimplemented("contact-data".data(using: .utf8)!)
     let contactId = "contact-id".data(using: .utf8)!
     contact.getIdFromContact.run = { _ in contactId }
 
@@ -54,19 +71,39 @@ final class CheckContactAuthFeatureTests: XCTestCase {
       environment: .unimplemented
     )
 
+    var didCheckPartnerId: [Data] = []
+    var didBulkUpdateContactsWithQuery: [XXModels.Contact.Query] = []
+    var didBulkUpdateContactsWithAssignments: [XXModels.Contact.Assignments] = []
+
     store.environment.mainQueue = .immediate
     store.environment.bgQueue = .immediate
     store.environment.messenger.e2e.get = {
       var e2e: E2E = .unimplemented
-      e2e.hasAuthenticatedChannel.run = { _ in false }
+      e2e.hasAuthenticatedChannel.run = { partnerId in
+        didCheckPartnerId.append(partnerId)
+        return false
+      }
       return e2e
     }
+    store.environment.db.run = {
+      var db: Database = .failing
+      db.bulkUpdateContacts.run = { query, assignments in
+        didBulkUpdateContactsWithQuery.append(query)
+        didBulkUpdateContactsWithAssignments.append(assignments)
+        return 0
+      }
+      return db
+    }
 
     store.send(.checkTapped) {
       $0.isChecking = true
       $0.result = nil
     }
 
+    XCTAssertNoDifference(didCheckPartnerId, [contactId])
+    XCTAssertNoDifference(didBulkUpdateContactsWithQuery, [.init(id: [contactId])])
+    XCTAssertNoDifference(didBulkUpdateContactsWithAssignments, [.init(authStatus: .stranger)])
+
     store.receive(.didCheck(.success(false))) {
       $0.isChecking = false
       $0.result = .success(false)
@@ -74,7 +111,7 @@ final class CheckContactAuthFeatureTests: XCTestCase {
   }
 
   func testCheckFailure() {
-    var contact = Contact.unimplemented("contact-data".data(using: .utf8)!)
+    var contact = XXClient.Contact.unimplemented("contact-data".data(using: .utf8)!)
     let contactId = "contact-id".data(using: .utf8)!
     contact.getIdFromContact.run = { _ in contactId }