diff --git a/Sources/XXClient/Helpers/MakeContact.swift b/Sources/XXClient/Helpers/MakeContact.swift
new file mode 100644
index 0000000000000000000000000000000000000000..2e0027bd26f5e6b6c533d9bf3a3c1bf29df0fa81
--- /dev/null
+++ b/Sources/XXClient/Helpers/MakeContact.swift
@@ -0,0 +1,26 @@
+import Foundation
+
+public struct MakeContact {
+  public var run: (Data) -> Contact
+
+  public func callAsFunction(_ data: Data) -> Contact {
+    run(data)
+  }
+}
+
+extension MakeContact {
+  public static func live(
+    getIdFromContact: GetIdFromContact = .live,
+    getPublicKeyFromContact: GetPublicKeyFromContact = .live,
+    getFactsFromContact: GetFactsFromContact = .live
+  ) -> MakeContact {
+    MakeContact { data in
+      Contact(
+        data: data,
+        getId: { try getIdFromContact(data) },
+        getPublicKey: { try getPublicKeyFromContact(data) },
+        getFacts: { try getFactsFromContact(data) }
+      )
+    }
+  }
+}