diff --git a/Sources/XXMessengerClient/Messenger/Functors/MessengerCMix.swift b/Sources/XXMessengerClient/Messenger/Functors/MessengerCMix.swift
new file mode 100644
index 0000000000000000000000000000000000000000..5543c048fde2b7a12ce261f7cf796adb2ddbc31f
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functors/MessengerCMix.swift
@@ -0,0 +1,22 @@
+import XXClient
+import XCTestDynamicOverlay
+
+public struct MessengerCMix {
+  public var run: () -> CMix?
+
+  public func callAsFunction() -> CMix? {
+    run()
+  }
+}
+
+extension MessengerCMix {
+  public static func live(_ env: MessengerEnvironment) -> MessengerCMix {
+    MessengerCMix(run: env.ctx.getCMix)
+  }
+}
+
+extension MessengerCMix {
+  public static let unimplemented = MessengerCMix(
+    run: XCTUnimplemented("\(Self.self)", placeholder: nil)
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Functors/MessengerE2E.swift b/Sources/XXMessengerClient/Messenger/Functors/MessengerE2E.swift
new file mode 100644
index 0000000000000000000000000000000000000000..cc1f8def702e95afdd0a26bc6259c15e934b3799
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functors/MessengerE2E.swift
@@ -0,0 +1,22 @@
+import XXClient
+import XCTestDynamicOverlay
+
+public struct MessengerE2E {
+  public var run: () -> E2E?
+
+  public func callAsFunction() -> E2E? {
+    run()
+  }
+}
+
+extension MessengerE2E {
+  public static func live(_ env: MessengerEnvironment) -> MessengerE2E {
+    MessengerE2E(run: env.ctx.getE2E)
+  }
+}
+
+extension MessengerE2E {
+  public static let unimplemented = MessengerE2E(
+    run: XCTUnimplemented("\(Self.self)", placeholder: nil)
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Functors/MessengerUD.swift b/Sources/XXMessengerClient/Messenger/Functors/MessengerUD.swift
new file mode 100644
index 0000000000000000000000000000000000000000..c64ee6cf55db2ebcdc10959b00096e45953b48a6
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functors/MessengerUD.swift
@@ -0,0 +1,22 @@
+import XXClient
+import XCTestDynamicOverlay
+
+public struct MessengerUD {
+  public var run: () -> UserDiscovery?
+
+  public func callAsFunction() -> UserDiscovery? {
+    run()
+  }
+}
+
+extension MessengerUD {
+  public static func live(_ env: MessengerEnvironment) -> MessengerUD {
+    MessengerUD(run: env.ctx.getUD)
+  }
+}
+
+extension MessengerUD {
+  public static let unimplemented = MessengerUD(
+    run: XCTUnimplemented("\(Self.self)", placeholder: nil)
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift
index a477f7cc90ec06841b3d8820c28f8ed6eeaea9f8..12610bd6feae71b482627b9f617c4b51aa97e6e5 100644
--- a/Sources/XXMessengerClient/Messenger/Messenger.swift
+++ b/Sources/XXMessengerClient/Messenger/Messenger.swift
@@ -1,6 +1,9 @@
 import XXClient
 
 public struct Messenger {
+  public var cMix: MessengerCMix
+  public var e2e: MessengerE2E
+  public var ud: MessengerUD
   public var isCreated: MessengerIsCreated
   public var create: MessengerCreate
   public var isLoaded: MessengerIsLoaded
@@ -16,6 +19,9 @@ public struct Messenger {
 extension Messenger {
   public static func live(_ env: MessengerEnvironment) -> Messenger {
     Messenger(
+      cMix: .live(env),
+      e2e: .live(env),
+      ud: .live(env),
       isCreated: .live(env),
       create: .live(env),
       isLoaded: .live(env),
@@ -32,6 +38,9 @@ extension Messenger {
 
 extension Messenger {
   public static let unimplemented = Messenger(
+    cMix: .unimplemented,
+    e2e: .unimplemented,
+    ud: .unimplemented,
     isCreated: .unimplemented,
     create: .unimplemented,
     isLoaded: .unimplemented,
diff --git a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerCMixTests.swift b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerCMixTests.swift
new file mode 100644
index 0000000000000000000000000000000000000000..f4327a08177ab4ec3c2b6eca9341859813fa83ae
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerCMixTests.swift
@@ -0,0 +1,21 @@
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class MessengerCMixTests: XCTestCase {
+  func testCMix() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getCMix = { .unimplemented }
+    let cMix: MessengerCMix = .live(env)
+
+    XCTAssertNotNil(cMix())
+  }
+
+  func testCMixWhenNotSet() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getCMix = { nil }
+    let cMix: MessengerCMix = .live(env)
+
+    XCTAssertNil(cMix())
+  }
+}
diff --git a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerE2ETests.swift b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerE2ETests.swift
new file mode 100644
index 0000000000000000000000000000000000000000..bb54fb78ded08e309cd53f4278fe6e0e0ec6378d
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerE2ETests.swift
@@ -0,0 +1,21 @@
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class MessengerE2ETests: XCTestCase {
+  func testE2E() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getE2E = { .unimplemented }
+    let e2e: MessengerE2E = .live(env)
+
+    XCTAssertNotNil(e2e())
+  }
+
+  func testE2EWhenNotSet() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getE2E = { nil }
+    let e2e: MessengerE2E = .live(env)
+
+    XCTAssertNil(e2e())
+  }
+}
diff --git a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerUDTests.swift b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerUDTests.swift
new file mode 100644
index 0000000000000000000000000000000000000000..0166a8bb2f5b01fccef13fe9b68a1e2f78376cef
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerUDTests.swift
@@ -0,0 +1,21 @@
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class MessengerUDTests: XCTestCase {
+  func testUD() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getE2E = { .unimplemented }
+    let e2e: MessengerE2E = .live(env)
+
+    XCTAssertNotNil(e2e())
+  }
+
+  func testE2EWhenNotSet() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getE2E = { nil }
+    let e2e: MessengerE2E = .live(env)
+
+    XCTAssertNil(e2e())
+  }
+}