diff --git a/Sources/ElixxirDAppsSDK/Functors/LoadOrNewUserDiscovery.swift b/Sources/ElixxirDAppsSDK/Functors/LoadOrNewUserDiscovery.swift
deleted file mode 100644
index 95a7371a0321974e1282fb99acb3137bc3fa4139..0000000000000000000000000000000000000000
--- a/Sources/ElixxirDAppsSDK/Functors/LoadOrNewUserDiscovery.swift
+++ /dev/null
@@ -1,43 +0,0 @@
-import Bindings
-import XCTestDynamicOverlay
-
-public struct LoadOrNewUserDiscovery {
-  public var run: (Int, UdNetworkStatus, String?, Data?) throws -> UserDiscovery
-
-  public func callAsFunction(
-    e2eId: Int,
-    follower: UdNetworkStatus,
-    username: String?,
-    registrationValidationSignature: Data?
-  ) throws -> UserDiscovery {
-    try run(e2eId, follower, username, registrationValidationSignature)
-  }
-}
-
-extension LoadOrNewUserDiscovery {
-  public static let live = LoadOrNewUserDiscovery {
-    e2eId, follower, username, registrationValidationSignature in
-
-    var error: NSError?
-    let bindingsUD = BindingsLoadOrNewUserDiscovery(
-      e2eId,
-      follower.makeBindingsUdNetworkStatus(),
-      username,
-      registrationValidationSignature,
-      &error
-    )
-    if let error = error {
-      throw error
-    }
-    guard let bindingsUD = bindingsUD else {
-      fatalError("BindingsLoadOrNewUserDiscovery returned `nil` without providing error")
-    }
-    return .live(bindingsUD)
-  }
-}
-
-extension LoadOrNewUserDiscovery {
-  public static let unimplemented = LoadOrNewUserDiscovery(
-    run: XCTUnimplemented("\(Self.self)")
-  )
-}
diff --git a/Sources/ElixxirDAppsSDK/Functors/NewOrLoadUd.swift b/Sources/ElixxirDAppsSDK/Functors/NewOrLoadUd.swift
new file mode 100644
index 0000000000000000000000000000000000000000..3b1599751d57555cbf2b419e37e1d368834c1884
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/Functors/NewOrLoadUd.swift
@@ -0,0 +1,67 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct NewOrLoadUd {
+  public struct Params {
+    public init(
+      e2eId: Int,
+      follower: UdNetworkStatus,
+      username: String?,
+      registrationValidationSignature: Data?,
+      cert: Data,
+      contactFile: Data,
+      address: String
+    ) {
+      self.e2eId = e2eId
+      self.follower = follower
+      self.username = username
+      self.registrationValidationSignature = registrationValidationSignature
+      self.cert = cert
+      self.contactFile = contactFile
+      self.address = address
+    }
+
+    public var e2eId: Int
+    public var follower: UdNetworkStatus
+    public var username: String?
+    public var registrationValidationSignature: Data?
+    public var cert: Data
+    public var contactFile: Data
+    public var address: String
+  }
+
+  public var run: (Params) throws -> UserDiscovery
+
+  public func callAsFunction(_ params: Params) throws -> UserDiscovery {
+    try run(params)
+  }
+}
+
+extension NewOrLoadUd {
+  public static let live = NewOrLoadUd { params in
+    var error: NSError?
+    let bindingsUD = BindingsNewOrLoadUd(
+      params.e2eId,
+      params.follower.makeBindingsUdNetworkStatus(),
+      params.username,
+      params.registrationValidationSignature,
+      params.cert,
+      params.contactFile,
+      params.address,
+      &error
+    )
+    if let error = error {
+      throw error
+    }
+    guard let bindingsUD = bindingsUD else {
+      fatalError("BindingsNewOrLoadUd returned `nil` without providing error")
+    }
+    return .live(bindingsUD)
+  }
+}
+
+extension NewOrLoadUd {
+  public static let unimplemented = NewOrLoadUd(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}