diff --git a/Frameworks/Bindings.xcframework/Info.plist b/Frameworks/Bindings.xcframework/Info.plist
index 5da456bbdabbf3d610daca4ce17734b523413a53..3c96df61083ca794226526858401b4539235d6ba 100644
--- a/Frameworks/Bindings.xcframework/Info.plist
+++ b/Frameworks/Bindings.xcframework/Info.plist
@@ -6,30 +6,30 @@
 	<array>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64</string>
+			<string>ios-arm64_x86_64-simulator</string>
 			<key>LibraryPath</key>
 			<string>Bindings.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
 				<string>arm64</string>
+				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
+			<key>SupportedPlatformVariant</key>
+			<string>simulator</string>
 		</dict>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64_x86_64-simulator</string>
+			<string>ios-arm64</string>
 			<key>LibraryPath</key>
 			<string>Bindings.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
 				<string>arm64</string>
-				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
-			<key>SupportedPlatformVariant</key>
-			<string>simulator</string>
 		</dict>
 	</array>
 	<key>CFBundlePackageType</key>
diff --git a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Bindings b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Bindings
index 51b076d518a2d9380441865ef6671bebc605c4cc..d2f4a603eebcd5f482944db9c2c23ecde808a4d7 100644
Binary files a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Bindings and b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Bindings differ
diff --git a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Headers/Bindings.objc.h b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Headers/Bindings.objc.h
index 89b4d43e2523f200f46035cc871270df2f4d4f75..98c9d6a96c0175b93250e1da29de3be2b2cc8fec 100644
--- a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Headers/Bindings.objc.h
+++ b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Headers/Bindings.objc.h
@@ -2159,7 +2159,7 @@ Parameters:
 Returns:
  - []byte - the JSON marshalled bytes of the SingleUseSendReport object,
    which can be passed into Cmix.WaitForRoundResult to see if the send
-   succeeded.
+   operation succeeded.
  */
 FOUNDATION_EXPORT NSData* _Nullable BindingsSearchUD(long e2eID, NSData* _Nullable udContact, id<BindingsUdSearchCallback> _Nullable cb, NSData* _Nullable factListJSON, NSData* _Nullable singleRequestParamsJSON, NSError* _Nullable* _Nullable error);
 
@@ -2504,7 +2504,7 @@ received.
 Parameters:
  - callbackReport - the JSON marshalled bytes of the SingleUseCallbackReport
    object, which can be passed into Cmix.WaitForRoundResult to see if the
-   send succeeded.
+   send operation succeeded.
  */
 @interface BindingsSingleUseCallback : NSObject <goSeqRefInterface, BindingsSingleUseCallback> {
 }
@@ -2521,7 +2521,7 @@ clients into TransmitSingleUse.
 Parameters:
  - callbackReport - the JSON marshalled bytes of the SingleUseResponseReport
    object, which can be passed into Cmix.WaitForRoundResult to see if the
-   send succeeded.
+   send operation succeeded.
  */
 @interface BindingsSingleUseResponse : NSObject <goSeqRefInterface, BindingsSingleUseResponse> {
 }
@@ -2583,8 +2583,15 @@ SearchUD.
 
 Parameters:
  - contactListJSON - the JSON marshalled bytes of []contact.Contact, or nil
-   if an error occurs
- - err - any errors that occurred in the search
+   if an error occurs.
+
+  JSON Example:
+  {
+ 	"<xxc(2)F8dL9EC6gy+RMJuk3R+Au6eGExo02Wfio5cacjBcJRwDEgB7Ugdw/BAr6RkCABkWAFV1c2VybmFtZTA7c4LzV05sG+DMt+rFB0NIJg==xxc>",
+ 	"<xxc(2)eMhAi/pYkW5jCmvKE5ZaTglQb+fTo1D8NxVitr5CCFADEgB7Ugdw/BAr6RoCABkWAFV1c2VybmFtZTE7fElAa7z3IcrYrrkwNjMS2w==xxc>",
+ 	"<xxc(2)d7RJTu61Vy1lDThDMn8rYIiKSe1uXA/RCvvcIhq5Yg4DEgB7Ugdw/BAr6RsCABkWAFV1c2VybmFtZTI7N3XWrxIUpR29atpFMkcR6A==xxc>"
+	}
+ - err - any errors that occurred in the search.
  */
 @interface BindingsUdSearchCallback : NSObject <goSeqRefInterface, BindingsUdSearchCallback> {
 }
diff --git a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Bindings b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Bindings
index 51b076d518a2d9380441865ef6671bebc605c4cc..d2f4a603eebcd5f482944db9c2c23ecde808a4d7 100644
Binary files a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Bindings and b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Bindings differ
diff --git a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Headers/Bindings.objc.h b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Headers/Bindings.objc.h
index 89b4d43e2523f200f46035cc871270df2f4d4f75..98c9d6a96c0175b93250e1da29de3be2b2cc8fec 100644
--- a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Headers/Bindings.objc.h
+++ b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Headers/Bindings.objc.h
@@ -2159,7 +2159,7 @@ Parameters:
 Returns:
  - []byte - the JSON marshalled bytes of the SingleUseSendReport object,
    which can be passed into Cmix.WaitForRoundResult to see if the send
-   succeeded.
+   operation succeeded.
  */
 FOUNDATION_EXPORT NSData* _Nullable BindingsSearchUD(long e2eID, NSData* _Nullable udContact, id<BindingsUdSearchCallback> _Nullable cb, NSData* _Nullable factListJSON, NSData* _Nullable singleRequestParamsJSON, NSError* _Nullable* _Nullable error);
 
@@ -2504,7 +2504,7 @@ received.
 Parameters:
  - callbackReport - the JSON marshalled bytes of the SingleUseCallbackReport
    object, which can be passed into Cmix.WaitForRoundResult to see if the
-   send succeeded.
+   send operation succeeded.
  */
 @interface BindingsSingleUseCallback : NSObject <goSeqRefInterface, BindingsSingleUseCallback> {
 }
@@ -2521,7 +2521,7 @@ clients into TransmitSingleUse.
 Parameters:
  - callbackReport - the JSON marshalled bytes of the SingleUseResponseReport
    object, which can be passed into Cmix.WaitForRoundResult to see if the
-   send succeeded.
+   send operation succeeded.
  */
 @interface BindingsSingleUseResponse : NSObject <goSeqRefInterface, BindingsSingleUseResponse> {
 }
@@ -2583,8 +2583,15 @@ SearchUD.
 
 Parameters:
  - contactListJSON - the JSON marshalled bytes of []contact.Contact, or nil
-   if an error occurs
- - err - any errors that occurred in the search
+   if an error occurs.
+
+  JSON Example:
+  {
+ 	"<xxc(2)F8dL9EC6gy+RMJuk3R+Au6eGExo02Wfio5cacjBcJRwDEgB7Ugdw/BAr6RkCABkWAFV1c2VybmFtZTA7c4LzV05sG+DMt+rFB0NIJg==xxc>",
+ 	"<xxc(2)eMhAi/pYkW5jCmvKE5ZaTglQb+fTo1D8NxVitr5CCFADEgB7Ugdw/BAr6RoCABkWAFV1c2VybmFtZTE7fElAa7z3IcrYrrkwNjMS2w==xxc>",
+ 	"<xxc(2)d7RJTu61Vy1lDThDMn8rYIiKSe1uXA/RCvvcIhq5Yg4DEgB7Ugdw/BAr6RsCABkWAFV1c2VybmFtZTI7N3XWrxIUpR29atpFMkcR6A==xxc>"
+	}
+ - err - any errors that occurred in the search.
  */
 @interface BindingsUdSearchCallback : NSObject <goSeqRefInterface, BindingsUdSearchCallback> {
 }
diff --git a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/Current/Bindings b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/Current/Bindings
index 51b076d518a2d9380441865ef6671bebc605c4cc..d2f4a603eebcd5f482944db9c2c23ecde808a4d7 100644
Binary files a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/Current/Bindings and b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/Current/Bindings differ
diff --git a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/Current/Headers/Bindings.objc.h b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/Current/Headers/Bindings.objc.h
index 89b4d43e2523f200f46035cc871270df2f4d4f75..98c9d6a96c0175b93250e1da29de3be2b2cc8fec 100644
--- a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/Current/Headers/Bindings.objc.h
+++ b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/Current/Headers/Bindings.objc.h
@@ -2159,7 +2159,7 @@ Parameters:
 Returns:
  - []byte - the JSON marshalled bytes of the SingleUseSendReport object,
    which can be passed into Cmix.WaitForRoundResult to see if the send
-   succeeded.
+   operation succeeded.
  */
 FOUNDATION_EXPORT NSData* _Nullable BindingsSearchUD(long e2eID, NSData* _Nullable udContact, id<BindingsUdSearchCallback> _Nullable cb, NSData* _Nullable factListJSON, NSData* _Nullable singleRequestParamsJSON, NSError* _Nullable* _Nullable error);
 
@@ -2504,7 +2504,7 @@ received.
 Parameters:
  - callbackReport - the JSON marshalled bytes of the SingleUseCallbackReport
    object, which can be passed into Cmix.WaitForRoundResult to see if the
-   send succeeded.
+   send operation succeeded.
  */
 @interface BindingsSingleUseCallback : NSObject <goSeqRefInterface, BindingsSingleUseCallback> {
 }
@@ -2521,7 +2521,7 @@ clients into TransmitSingleUse.
 Parameters:
  - callbackReport - the JSON marshalled bytes of the SingleUseResponseReport
    object, which can be passed into Cmix.WaitForRoundResult to see if the
-   send succeeded.
+   send operation succeeded.
  */
 @interface BindingsSingleUseResponse : NSObject <goSeqRefInterface, BindingsSingleUseResponse> {
 }
@@ -2583,8 +2583,15 @@ SearchUD.
 
 Parameters:
  - contactListJSON - the JSON marshalled bytes of []contact.Contact, or nil
-   if an error occurs
- - err - any errors that occurred in the search
+   if an error occurs.
+
+  JSON Example:
+  {
+ 	"<xxc(2)F8dL9EC6gy+RMJuk3R+Au6eGExo02Wfio5cacjBcJRwDEgB7Ugdw/BAr6RkCABkWAFV1c2VybmFtZTA7c4LzV05sG+DMt+rFB0NIJg==xxc>",
+ 	"<xxc(2)eMhAi/pYkW5jCmvKE5ZaTglQb+fTo1D8NxVitr5CCFADEgB7Ugdw/BAr6RoCABkWAFV1c2VybmFtZTE7fElAa7z3IcrYrrkwNjMS2w==xxc>",
+ 	"<xxc(2)d7RJTu61Vy1lDThDMn8rYIiKSe1uXA/RCvvcIhq5Yg4DEgB7Ugdw/BAr6RsCABkWAFV1c2VybmFtZTI7N3XWrxIUpR29atpFMkcR6A==xxc>"
+	}
+ - err - any errors that occurred in the search.
  */
 @interface BindingsUdSearchCallback : NSObject <goSeqRefInterface, BindingsUdSearchCallback> {
 }
diff --git a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Bindings b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Bindings
index 924929aac55329d241921064cbd2ed2e0e64b2ea..0e5459baeeb3f4b1d32ffc1de36c07de871878d0 100644
Binary files a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Bindings and b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Bindings differ
diff --git a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Headers/Bindings.objc.h b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Headers/Bindings.objc.h
index 89b4d43e2523f200f46035cc871270df2f4d4f75..98c9d6a96c0175b93250e1da29de3be2b2cc8fec 100644
--- a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Headers/Bindings.objc.h
+++ b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Headers/Bindings.objc.h
@@ -2159,7 +2159,7 @@ Parameters:
 Returns:
  - []byte - the JSON marshalled bytes of the SingleUseSendReport object,
    which can be passed into Cmix.WaitForRoundResult to see if the send
-   succeeded.
+   operation succeeded.
  */
 FOUNDATION_EXPORT NSData* _Nullable BindingsSearchUD(long e2eID, NSData* _Nullable udContact, id<BindingsUdSearchCallback> _Nullable cb, NSData* _Nullable factListJSON, NSData* _Nullable singleRequestParamsJSON, NSError* _Nullable* _Nullable error);
 
@@ -2504,7 +2504,7 @@ received.
 Parameters:
  - callbackReport - the JSON marshalled bytes of the SingleUseCallbackReport
    object, which can be passed into Cmix.WaitForRoundResult to see if the
-   send succeeded.
+   send operation succeeded.
  */
 @interface BindingsSingleUseCallback : NSObject <goSeqRefInterface, BindingsSingleUseCallback> {
 }
@@ -2521,7 +2521,7 @@ clients into TransmitSingleUse.
 Parameters:
  - callbackReport - the JSON marshalled bytes of the SingleUseResponseReport
    object, which can be passed into Cmix.WaitForRoundResult to see if the
-   send succeeded.
+   send operation succeeded.
  */
 @interface BindingsSingleUseResponse : NSObject <goSeqRefInterface, BindingsSingleUseResponse> {
 }
@@ -2583,8 +2583,15 @@ SearchUD.
 
 Parameters:
  - contactListJSON - the JSON marshalled bytes of []contact.Contact, or nil
-   if an error occurs
- - err - any errors that occurred in the search
+   if an error occurs.
+
+  JSON Example:
+  {
+ 	"<xxc(2)F8dL9EC6gy+RMJuk3R+Au6eGExo02Wfio5cacjBcJRwDEgB7Ugdw/BAr6RkCABkWAFV1c2VybmFtZTA7c4LzV05sG+DMt+rFB0NIJg==xxc>",
+ 	"<xxc(2)eMhAi/pYkW5jCmvKE5ZaTglQb+fTo1D8NxVitr5CCFADEgB7Ugdw/BAr6RoCABkWAFV1c2VybmFtZTE7fElAa7z3IcrYrrkwNjMS2w==xxc>",
+ 	"<xxc(2)d7RJTu61Vy1lDThDMn8rYIiKSe1uXA/RCvvcIhq5Yg4DEgB7Ugdw/BAr6RsCABkWAFV1c2VybmFtZTI7N3XWrxIUpR29atpFMkcR6A==xxc>"
+	}
+ - err - any errors that occurred in the search.
  */
 @interface BindingsUdSearchCallback : NSObject <goSeqRefInterface, BindingsUdSearchCallback> {
 }
diff --git a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Bindings b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Bindings
index 924929aac55329d241921064cbd2ed2e0e64b2ea..0e5459baeeb3f4b1d32ffc1de36c07de871878d0 100644
Binary files a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Bindings and b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Bindings differ
diff --git a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Headers/Bindings.objc.h b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Headers/Bindings.objc.h
index 89b4d43e2523f200f46035cc871270df2f4d4f75..98c9d6a96c0175b93250e1da29de3be2b2cc8fec 100644
--- a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Headers/Bindings.objc.h
+++ b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Headers/Bindings.objc.h
@@ -2159,7 +2159,7 @@ Parameters:
 Returns:
  - []byte - the JSON marshalled bytes of the SingleUseSendReport object,
    which can be passed into Cmix.WaitForRoundResult to see if the send
-   succeeded.
+   operation succeeded.
  */
 FOUNDATION_EXPORT NSData* _Nullable BindingsSearchUD(long e2eID, NSData* _Nullable udContact, id<BindingsUdSearchCallback> _Nullable cb, NSData* _Nullable factListJSON, NSData* _Nullable singleRequestParamsJSON, NSError* _Nullable* _Nullable error);
 
@@ -2504,7 +2504,7 @@ received.
 Parameters:
  - callbackReport - the JSON marshalled bytes of the SingleUseCallbackReport
    object, which can be passed into Cmix.WaitForRoundResult to see if the
-   send succeeded.
+   send operation succeeded.
  */
 @interface BindingsSingleUseCallback : NSObject <goSeqRefInterface, BindingsSingleUseCallback> {
 }
@@ -2521,7 +2521,7 @@ clients into TransmitSingleUse.
 Parameters:
  - callbackReport - the JSON marshalled bytes of the SingleUseResponseReport
    object, which can be passed into Cmix.WaitForRoundResult to see if the
-   send succeeded.
+   send operation succeeded.
  */
 @interface BindingsSingleUseResponse : NSObject <goSeqRefInterface, BindingsSingleUseResponse> {
 }
@@ -2583,8 +2583,15 @@ SearchUD.
 
 Parameters:
  - contactListJSON - the JSON marshalled bytes of []contact.Contact, or nil
-   if an error occurs
- - err - any errors that occurred in the search
+   if an error occurs.
+
+  JSON Example:
+  {
+ 	"<xxc(2)F8dL9EC6gy+RMJuk3R+Au6eGExo02Wfio5cacjBcJRwDEgB7Ugdw/BAr6RkCABkWAFV1c2VybmFtZTA7c4LzV05sG+DMt+rFB0NIJg==xxc>",
+ 	"<xxc(2)eMhAi/pYkW5jCmvKE5ZaTglQb+fTo1D8NxVitr5CCFADEgB7Ugdw/BAr6RoCABkWAFV1c2VybmFtZTE7fElAa7z3IcrYrrkwNjMS2w==xxc>",
+ 	"<xxc(2)d7RJTu61Vy1lDThDMn8rYIiKSe1uXA/RCvvcIhq5Yg4DEgB7Ugdw/BAr6RsCABkWAFV1c2VybmFtZTI7N3XWrxIUpR29atpFMkcR6A==xxc>"
+	}
+ - err - any errors that occurred in the search.
  */
 @interface BindingsUdSearchCallback : NSObject <goSeqRefInterface, BindingsUdSearchCallback> {
 }
diff --git a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/Current/Bindings b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/Current/Bindings
index 924929aac55329d241921064cbd2ed2e0e64b2ea..0e5459baeeb3f4b1d32ffc1de36c07de871878d0 100644
Binary files a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/Current/Bindings and b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/Current/Bindings differ
diff --git a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/Current/Headers/Bindings.objc.h b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/Current/Headers/Bindings.objc.h
index 89b4d43e2523f200f46035cc871270df2f4d4f75..98c9d6a96c0175b93250e1da29de3be2b2cc8fec 100644
--- a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/Current/Headers/Bindings.objc.h
+++ b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/Current/Headers/Bindings.objc.h
@@ -2159,7 +2159,7 @@ Parameters:
 Returns:
  - []byte - the JSON marshalled bytes of the SingleUseSendReport object,
    which can be passed into Cmix.WaitForRoundResult to see if the send
-   succeeded.
+   operation succeeded.
  */
 FOUNDATION_EXPORT NSData* _Nullable BindingsSearchUD(long e2eID, NSData* _Nullable udContact, id<BindingsUdSearchCallback> _Nullable cb, NSData* _Nullable factListJSON, NSData* _Nullable singleRequestParamsJSON, NSError* _Nullable* _Nullable error);
 
@@ -2504,7 +2504,7 @@ received.
 Parameters:
  - callbackReport - the JSON marshalled bytes of the SingleUseCallbackReport
    object, which can be passed into Cmix.WaitForRoundResult to see if the
-   send succeeded.
+   send operation succeeded.
  */
 @interface BindingsSingleUseCallback : NSObject <goSeqRefInterface, BindingsSingleUseCallback> {
 }
@@ -2521,7 +2521,7 @@ clients into TransmitSingleUse.
 Parameters:
  - callbackReport - the JSON marshalled bytes of the SingleUseResponseReport
    object, which can be passed into Cmix.WaitForRoundResult to see if the
-   send succeeded.
+   send operation succeeded.
  */
 @interface BindingsSingleUseResponse : NSObject <goSeqRefInterface, BindingsSingleUseResponse> {
 }
@@ -2583,8 +2583,15 @@ SearchUD.
 
 Parameters:
  - contactListJSON - the JSON marshalled bytes of []contact.Contact, or nil
-   if an error occurs
- - err - any errors that occurred in the search
+   if an error occurs.
+
+  JSON Example:
+  {
+ 	"<xxc(2)F8dL9EC6gy+RMJuk3R+Au6eGExo02Wfio5cacjBcJRwDEgB7Ugdw/BAr6RkCABkWAFV1c2VybmFtZTA7c4LzV05sG+DMt+rFB0NIJg==xxc>",
+ 	"<xxc(2)eMhAi/pYkW5jCmvKE5ZaTglQb+fTo1D8NxVitr5CCFADEgB7Ugdw/BAr6RoCABkWAFV1c2VybmFtZTE7fElAa7z3IcrYrrkwNjMS2w==xxc>",
+ 	"<xxc(2)d7RJTu61Vy1lDThDMn8rYIiKSe1uXA/RCvvcIhq5Yg4DEgB7Ugdw/BAr6RsCABkWAFV1c2VybmFtZTI7N3XWrxIUpR29atpFMkcR6A==xxc>"
+	}
+ - err - any errors that occurred in the search.
  */
 @interface BindingsUdSearchCallback : NSObject <goSeqRefInterface, BindingsUdSearchCallback> {
 }
diff --git a/Sources/XXClient/CMix/CMix.swift b/Sources/XXClient/CMix/CMix.swift
index fe9e27b70c11aa952d9ca026155d01cc0ac988aa..ef17f9ec296f30fbc9ab8bdf9443ba200dbff4c9 100644
--- a/Sources/XXClient/CMix/CMix.swift
+++ b/Sources/XXClient/CMix/CMix.swift
@@ -4,7 +4,6 @@ public struct CMix {
   public var getId: CMixGetId
   public var getReceptionRegistrationValidationSignature: CMixGetReceptionRegistrationValidationSignature
   public var makeReceptionIdentity: CMixMakeReceptionIdentity
-  public var makeLegacyReceptionIdentity: CMixMakeLegacyReceptionIdentity
   public var isHealthy: CMixIsHealthy
   public var getNodeRegistrationStatus: CMixGetNodeRegistrationStatus
   public var hasRunningProcesses: CMixHasRunningProcesses
@@ -24,7 +23,6 @@ extension CMix {
       getId: .live(bindingsCMix),
       getReceptionRegistrationValidationSignature: .live(bindingsCMix),
       makeReceptionIdentity: .live(bindingsCMix),
-      makeLegacyReceptionIdentity: .live(bindingsCMix),
       isHealthy: .live(bindingsCMix),
       getNodeRegistrationStatus: .live(bindingsCMix),
       hasRunningProcesses: .live(bindingsCMix),
@@ -45,7 +43,6 @@ extension CMix {
     getId: .unimplemented,
     getReceptionRegistrationValidationSignature: .unimplemented,
     makeReceptionIdentity: .unimplemented,
-    makeLegacyReceptionIdentity: .unimplemented,
     isHealthy: .unimplemented,
     getNodeRegistrationStatus: .unimplemented,
     hasRunningProcesses: .unimplemented,
diff --git a/Sources/XXClient/CMix/Functors/CMixConnect.swift b/Sources/XXClient/CMix/Functors/CMixConnect.swift
index b25be6a98afaa7c798d0807710c02a8a05762f49..8217730e863aa1b0ca66069dcc339b4060760bb3 100644
--- a/Sources/XXClient/CMix/Functors/CMixConnect.swift
+++ b/Sources/XXClient/CMix/Functors/CMixConnect.swift
@@ -2,31 +2,31 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct CMixConnect {
-  public var run: (Bool, Int, Data, Data) throws -> Connection
+  public var run: (Bool, Int, Contact, Data) throws -> Connection
 
   public func callAsFunction(
     withAuthentication: Bool,
     e2eId: Int,
-    recipientContact: Data,
+    recipient: Contact,
     e2eParamsJSON: Data = GetE2EParams.liveDefault()
   ) throws -> Connection {
-    try run(withAuthentication, e2eId, recipientContact, e2eParamsJSON)
+    try run(withAuthentication, e2eId, recipient, e2eParamsJSON)
   }
 }
 
 extension CMixConnect {
   public static func live(_ bindingsCMix: BindingsCmix) -> CMixConnect {
-    CMixConnect { withAuthentication, e2eId, recipientContact, e2eParamsJSON in
+    CMixConnect { withAuthentication, e2eId, recipient, e2eParamsJSON in
       if withAuthentication {
         return .live(try bindingsCMix.connect(
           withAuthentication: e2eId,
-          recipientContact: recipientContact,
+          recipientContact: recipient.data,
           e2eParamsJSON: e2eParamsJSON
         ))
       } else {
         return .live(try bindingsCMix.connect(
           e2eId,
-          recipientContact: recipientContact,
+          recipientContact: recipient.data,
           e2eParamsJSON: e2eParamsJSON
         ))
       }
diff --git a/Sources/XXClient/CMix/Functors/CMixMakeLegacyReceptionIdentity.swift b/Sources/XXClient/CMix/Functors/CMixMakeLegacyReceptionIdentity.swift
deleted file mode 100644
index ee0c9ad6ce866e5605b531a6c38d748f4d575d9a..0000000000000000000000000000000000000000
--- a/Sources/XXClient/CMix/Functors/CMixMakeLegacyReceptionIdentity.swift
+++ /dev/null
@@ -1,25 +0,0 @@
-import Bindings
-import XCTestDynamicOverlay
-
-public struct CMixMakeLegacyReceptionIdentity {
-  public var run: () throws -> ReceptionIdentity
-
-  public func callAsFunction() throws -> ReceptionIdentity {
-    try run()
-  }
-}
-
-extension CMixMakeLegacyReceptionIdentity {
-  public static func live(_ bindingsCMix: BindingsCmix) -> CMixMakeLegacyReceptionIdentity {
-    CMixMakeLegacyReceptionIdentity {
-      let data = try bindingsCMix.makeLegacyReceptionIdentity()
-      return try ReceptionIdentity.decode(data)
-    }
-  }
-}
-
-extension CMixMakeLegacyReceptionIdentity {
-  public static let unimplemented = CMixMakeLegacyReceptionIdentity(
-    run: XCTUnimplemented("\(Self.self)")
-  )
-}
diff --git a/Sources/XXClient/CMix/Functors/CMixMakeReceptionIdentity.swift b/Sources/XXClient/CMix/Functors/CMixMakeReceptionIdentity.swift
index 973812cf8cc77ea2ecadfd2cc18ff2c4a19ce6c4..3ce33e4d376d1e0754817006c5503b7b074f5b44 100644
--- a/Sources/XXClient/CMix/Functors/CMixMakeReceptionIdentity.swift
+++ b/Sources/XXClient/CMix/Functors/CMixMakeReceptionIdentity.swift
@@ -2,17 +2,24 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct CMixMakeReceptionIdentity {
-  public var run: () throws -> ReceptionIdentity
+  public var run: (Bool) throws -> ReceptionIdentity
 
-  public func callAsFunction() throws -> ReceptionIdentity {
-    try run()
+  public func callAsFunction(
+    legacy: Bool = false
+  ) throws -> ReceptionIdentity {
+    try run(legacy)
   }
 }
 
 extension CMixMakeReceptionIdentity {
   public static func live(_ bindingsCMix: BindingsCmix) -> CMixMakeReceptionIdentity {
-    CMixMakeReceptionIdentity {
-      let data = try bindingsCMix.makeReceptionIdentity()
+    CMixMakeReceptionIdentity { legacy in
+      let data: Data
+      if legacy {
+        data = try bindingsCMix.makeLegacyReceptionIdentity()
+      } else {
+        data = try bindingsCMix.makeReceptionIdentity()
+      }
       return try ReceptionIdentity.decode(data)
     }
   }
diff --git a/Sources/XXClient/Callbacks/AuthCallbacks.swift b/Sources/XXClient/Callbacks/AuthCallbacks.swift
index c6d2b867fe7964e44f17d16aee4e7ac8a0964467..83e6f9361559fb6d5897f13ad07755de84c74451 100644
--- a/Sources/XXClient/Callbacks/AuthCallbacks.swift
+++ b/Sources/XXClient/Callbacks/AuthCallbacks.swift
@@ -3,9 +3,9 @@ import XCTestDynamicOverlay
 
 public struct AuthCallbacks {
   public enum Callback: Equatable {
-    case confirm(contact: Data, receptionId: Data, ephemeralId: Int64, roundId: Int64)
-    case request(contact: Data, receptionId: Data, ephemeralId: Int64, roundId: Int64)
-    case reset(contact: Data, receptionId: Data, ephemeralId: Int64, roundId: Int64)
+    case confirm(contact: Contact, receptionId: Data, ephemeralId: Int64, roundId: Int64)
+    case request(contact: Contact, receptionId: Data, ephemeralId: Int64, roundId: Int64)
+    case reset(contact: Contact, receptionId: Data, ephemeralId: Int64, roundId: Int64)
   }
 
   public init(handle: @escaping (Callback) -> Void) {
@@ -38,7 +38,7 @@ extension AuthCallbacks {
           fatalError("BindingsAuthCallbacks.confirm received `nil` receptionId")
         }
         callback.handle(.confirm(
-          contact: contact,
+          contact: Contact.live(contact),
           receptionId: receptionId,
           ephemeralId: ephemeralId,
           roundId: roundId
@@ -53,7 +53,7 @@ extension AuthCallbacks {
           fatalError("BindingsAuthCallbacks.request received `nil` receptionId")
         }
         callback.handle(.request(
-          contact: contact,
+          contact: Contact.live(contact),
           receptionId: receptionId,
           ephemeralId: ephemeralId,
           roundId: roundId
@@ -68,7 +68,7 @@ extension AuthCallbacks {
           fatalError("BindingsAuthCallbacks.reset received `nil` receptionId")
         }
         callback.handle(.reset(
-          contact: contact,
+          contact: Contact.live(contact),
           receptionId: receptionId,
           ephemeralId: ephemeralId,
           roundId: roundId
diff --git a/Sources/XXClient/Callbacks/UdLookupCallback.swift b/Sources/XXClient/Callbacks/UdLookupCallback.swift
index 772933fce417dc45e5beec96d514430e152c12b6..94fe0e5ae7c55cafb692246bfb0067fc902d85dd 100644
--- a/Sources/XXClient/Callbacks/UdLookupCallback.swift
+++ b/Sources/XXClient/Callbacks/UdLookupCallback.swift
@@ -2,11 +2,11 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct UdLookupCallback {
-  public init(handle: @escaping (Result<Data, NSError>) -> Void) {
+  public init(handle: @escaping (Result<Contact, NSError>) -> Void) {
     self.handle = handle
   }
 
-  public var handle: (Result<Data, NSError>) -> Void
+  public var handle: (Result<Contact, NSError>) -> Void
 }
 
 extension UdLookupCallback {
@@ -28,7 +28,7 @@ extension UdLookupCallback {
         if let error = err {
           callback.handle(.failure(error as NSError))
         } else if let data = contactBytes {
-          callback.handle(.success(data))
+          callback.handle(.success(Contact.live(data)))
         } else {
           fatalError("BindingsUdLookupCallback received `nil` data and `nil` error")
         }
diff --git a/Sources/XXClient/Callbacks/UdSearchCallback.swift b/Sources/XXClient/Callbacks/UdSearchCallback.swift
index 252c6546db98064a3ee0ca5a15da6319d3d0b6bf..88f17393bf7772659d5beba826cfc7a87e5036f6 100644
--- a/Sources/XXClient/Callbacks/UdSearchCallback.swift
+++ b/Sources/XXClient/Callbacks/UdSearchCallback.swift
@@ -2,11 +2,11 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct UdSearchCallback {
-  public init(handle: @escaping (Result<[UDSearchResult], NSError>) -> Void) {
+  public init(handle: @escaping (Result<[Contact], NSError>) -> Void) {
     self.handle = handle
   }
 
-  public var handle: (Result<[UDSearchResult], NSError>) -> Void
+  public var handle: (Result<[Contact], NSError>) -> Void
 }
 
 extension UdSearchCallback {
@@ -29,7 +29,9 @@ extension UdSearchCallback {
           callback.handle(.failure(error as NSError))
         } else if let data = contactListJSON {
           do {
-            callback.handle(.success(try [UDSearchResult].decode(data)))
+            let contactsData = try JSONDecoder().decode([Data].self, from: data)
+            let contacts: [Contact] = contactsData.map { Contact.live($0) }
+            callback.handle(.success(contacts))
           } catch {
             callback.handle(.failure(error as NSError))
           }
diff --git a/Sources/XXClient/E2E/Functors/E2EConfirmReceivedRequest.swift b/Sources/XXClient/E2E/Functors/E2EConfirmReceivedRequest.swift
index f83cd0772e2aae27aaf8d6edf018c406edbdcc92..4286a70c228e6188cad2e5f8e14f21566455870f 100644
--- a/Sources/XXClient/E2E/Functors/E2EConfirmReceivedRequest.swift
+++ b/Sources/XXClient/E2E/Functors/E2EConfirmReceivedRequest.swift
@@ -2,20 +2,20 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct E2EConfirmReceivedRequest {
-  public var run: (Data) throws -> Int64
+  public var run: (Contact) throws -> Int64
 
   public func callAsFunction(
-    partnerContact: Data
+    partner: Contact
   ) throws -> Int64 {
-    try run(partnerContact)
+    try run(partner)
   }
 }
 
 extension E2EConfirmReceivedRequest {
   public static func live(_ bindingsE2E: BindingsE2e) -> E2EConfirmReceivedRequest {
-    E2EConfirmReceivedRequest { partnerContact in
+    E2EConfirmReceivedRequest { partner in
       var result: Int64 = 0
-      try bindingsE2E.confirm(partnerContact, ret0_: &result)
+      try bindingsE2E.confirm(partner.data, ret0_: &result)
       return result
     }
   }
diff --git a/Sources/XXClient/E2E/Functors/E2EDeleteRequest.swift b/Sources/XXClient/E2E/Functors/E2EDeleteRequest.swift
index c752e4ba273e5d6e7f20d93079ce22541dbf820c..cdb3e033f9b17566c057776bfea11227619a1f71 100644
--- a/Sources/XXClient/E2E/Functors/E2EDeleteRequest.swift
+++ b/Sources/XXClient/E2E/Functors/E2EDeleteRequest.swift
@@ -2,7 +2,7 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct E2EDeleteRequest {
-  public var partner: (Data) throws -> Void
+  public var partnerId: (Data) throws -> Void
   public var received: () throws -> Void
   public var sent: () throws -> Void
   public var all: () throws -> Void
@@ -11,7 +11,7 @@ public struct E2EDeleteRequest {
 extension E2EDeleteRequest {
   public static func live(_ bindingsE2E: BindingsE2e) -> E2EDeleteRequest {
     E2EDeleteRequest(
-      partner: bindingsE2E.deleteRequest(_:),
+      partnerId: bindingsE2E.deleteRequest(_:),
       received: bindingsE2E.deleteReceiveRequests,
       sent: bindingsE2E.deleteSentRequests,
       all: bindingsE2E.deleteAllRequests
@@ -21,7 +21,7 @@ extension E2EDeleteRequest {
 
 extension E2EDeleteRequest {
   public static let unimplemented = E2EDeleteRequest(
-    partner: XCTUnimplemented("\(Self.self).partner"),
+    partnerId: XCTUnimplemented("\(Self.self).partnerId"),
     received: XCTUnimplemented("\(Self.self).received"),
     sent: XCTUnimplemented("\(Self.self).sent"),
     all: XCTUnimplemented("\(Self.self).all")
diff --git a/Sources/XXClient/E2E/Functors/E2EGetContact.swift b/Sources/XXClient/E2E/Functors/E2EGetContact.swift
index ccd3b4176e70872e6e4c32b4054b7e3cc5a93cb3..f7426dc27da0929fc5f4adf4ab2c66aaae4ece03 100644
--- a/Sources/XXClient/E2E/Functors/E2EGetContact.swift
+++ b/Sources/XXClient/E2E/Functors/E2EGetContact.swift
@@ -2,9 +2,9 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct E2EGetContact {
-  public var run: () -> Data
+  public var run: () -> Contact
 
-  public func callAsFunction() -> Data {
+  public func callAsFunction() -> Contact {
     run()
   }
 }
@@ -15,13 +15,16 @@ extension E2EGetContact {
       guard let data = bindingsE2E.getContact() else {
         fatalError("BindingsE2e.getContact returned `nil`")
       }
-      return data
+      return Contact.live(data)
     }
   }
 }
 
 extension E2EGetContact {
   public static let unimplemented = E2EGetContact(
-    run: XCTUnimplemented("\(Self.self)", placeholder: "unimplemented".data(using: .utf8)!)
+    run: XCTUnimplemented(
+      "\(Self.self)",
+      placeholder: .unimplemented("unimplemented".data(using: .utf8)!)
+    )
   )
 }
diff --git a/Sources/XXClient/E2E/Functors/E2ERequestAuthenticatedChannel.swift b/Sources/XXClient/E2E/Functors/E2ERequestAuthenticatedChannel.swift
index f4dccad24a4d9ccbe4d34cfcc3afff3e6935692b..e3f069ab42d60779e83e71334de2ffbf2a672b8f 100644
--- a/Sources/XXClient/E2E/Functors/E2ERequestAuthenticatedChannel.swift
+++ b/Sources/XXClient/E2E/Functors/E2ERequestAuthenticatedChannel.swift
@@ -2,22 +2,22 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct E2ERequestAuthenticatedChannel {
-  public var run: (Data, [Fact]) throws -> Int64
+  public var run: (Contact, [Fact]) throws -> Int64
 
   public func callAsFunction(
-    partnerContact: Data,
+    partner: Contact,
     myFacts: [Fact]
   ) throws -> Int64 {
-    try run(partnerContact, myFacts)
+    try run(partner, myFacts)
   }
 }
 
 extension E2ERequestAuthenticatedChannel {
   public static func live(_ bindingsE2E: BindingsE2e) -> E2ERequestAuthenticatedChannel {
-    E2ERequestAuthenticatedChannel { partnerContact, myFacts in
+    E2ERequestAuthenticatedChannel { partner, myFacts in
       var roundId: Int64 = 0
       try bindingsE2E.request(
-        partnerContact,
+        partner.data,
         factsListJson: try myFacts.encode(),
         ret0_: &roundId
       )
diff --git a/Sources/XXClient/E2E/Functors/E2EResetAuthenticatedChannel.swift b/Sources/XXClient/E2E/Functors/E2EResetAuthenticatedChannel.swift
index 7b987fc900c486341378cea735dbd2f81e6faf2d..de7009b8b52d5b56afc5b8b40dbb1dd82258c648 100644
--- a/Sources/XXClient/E2E/Functors/E2EResetAuthenticatedChannel.swift
+++ b/Sources/XXClient/E2E/Functors/E2EResetAuthenticatedChannel.swift
@@ -2,18 +2,18 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct E2EResetAuthenticatedChannel {
-  public var run: (Data) throws -> Int64
+  public var run: (Contact) throws -> Int64
 
-  public func callAsFunction(partnerContact: Data) throws -> Int64 {
-    try run(partnerContact)
+  public func callAsFunction(partner: Contact) throws -> Int64 {
+    try run(partner)
   }
 }
 
 extension E2EResetAuthenticatedChannel {
   public static func live(_ bindingsE2E: BindingsE2e) -> E2EResetAuthenticatedChannel {
-    E2EResetAuthenticatedChannel { partnerContact in
+    E2EResetAuthenticatedChannel { partner in
       var roundId: Int64 = 0
-      try bindingsE2E.reset(partnerContact, ret0_: &roundId)
+      try bindingsE2E.reset(partner.data, ret0_: &roundId)
       return roundId
     }
   }
diff --git a/Sources/XXClient/E2E/Functors/E2EVerifyOwnership.swift b/Sources/XXClient/E2E/Functors/E2EVerifyOwnership.swift
index e6011bcab9cba7cd0f19b048af4f4f6d0ca7629e..f9c268def63da01abb8e77bb61eef4be5a1f75e0 100644
--- a/Sources/XXClient/E2E/Functors/E2EVerifyOwnership.swift
+++ b/Sources/XXClient/E2E/Functors/E2EVerifyOwnership.swift
@@ -2,24 +2,24 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct E2EVerifyOwnership {
-  public var run: (Data, Data, Int) throws -> Bool
+  public var run: (Contact, Contact, Int) throws -> Bool
 
   public func callAsFunction(
-    receivedContact: Data,
-    verifiedContact: Data,
+    received: Contact,
+    verified: Contact,
     e2eId: Int
   ) throws -> Bool {
-    try run(receivedContact, verifiedContact, e2eId)
+    try run(received, verified, e2eId)
   }
 }
 
 extension E2EVerifyOwnership {
   public static func live(_ bindingsE2E: BindingsE2e) -> E2EVerifyOwnership {
-    E2EVerifyOwnership { receivedContact, verifiedContact, e2eId in
+    E2EVerifyOwnership { received, verified, e2eId in
       var result: ObjCBool = false
       try bindingsE2E.verifyOwnership(
-        receivedContact,
-        verifiedContact: verifiedContact,
+        received.data,
+        verifiedContact: verified.data,
         e2eId: e2eId,
         ret0_: &result
       )
diff --git a/Sources/XXClient/Functors/AsyncRequestRestlike.swift b/Sources/XXClient/Functors/AsyncRequestRestlike.swift
index 597f2b96b97de4d92947250acdc21265220ff47f..c7ed41ffc76c4d0fc3e0b5c490a2c6ab7abbf9ac 100644
--- a/Sources/XXClient/Functors/AsyncRequestRestlike.swift
+++ b/Sources/XXClient/Functors/AsyncRequestRestlike.swift
@@ -2,11 +2,11 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct AsyncRequestRestlike {
-  public var run: (Int, Data, RestlikeMessage, Data, RestlikeCallback) throws -> Void
+  public var run: (Int, Contact, RestlikeMessage, Data, RestlikeCallback) throws -> Void
 
   public func callAsFunction(
     e2eId: Int,
-    recipient: Data,
+    recipient: Contact,
     request: RestlikeMessage,
     paramsJSON: Data,
     callback: RestlikeCallback
@@ -20,7 +20,7 @@ extension AsyncRequestRestlike {
     var error: NSError?
     let result = BindingsAsyncRequestRestLike(
       e2dId,
-      recipient,
+      recipient.data,
       try request.encode(),
       paramsJSON,
       callback.makeBindingsRestlikeCallback(),
diff --git a/Sources/XXClient/Functors/GetFactsFromContact.swift b/Sources/XXClient/Functors/GetFactsFromContact.swift
index 697f799741f21feec1aba79346d6d842b7cc2338..47fddb9be4fb4645a628457b1ae9b2d66bd87274 100644
--- a/Sources/XXClient/Functors/GetFactsFromContact.swift
+++ b/Sources/XXClient/Functors/GetFactsFromContact.swift
@@ -4,15 +4,15 @@ import XCTestDynamicOverlay
 public struct GetFactsFromContact {
   public var run: (Data) throws -> [Fact]
 
-  public func callAsFunction(contact: Data) throws -> [Fact] {
-    try run(contact)
+  public func callAsFunction(_ contactData: Data) throws -> [Fact] {
+    try run(contactData)
   }
 }
 
 extension GetFactsFromContact {
-  public static let live = GetFactsFromContact { contact in
+  public static let live = GetFactsFromContact { contactData in
     var error: NSError?
-    let data = BindingsGetFactsFromContact(contact, &error)
+    let data = BindingsGetFactsFromContact(contactData, &error)
     if let error = error {
       throw error
     }
diff --git a/Sources/XXClient/Functors/GetIdFromContact.swift b/Sources/XXClient/Functors/GetIdFromContact.swift
index 1055a69d907aae31651646c344096c55b129ff78..0c6f74cc1914d18e24c8fe12cadf92f678c538a0 100644
--- a/Sources/XXClient/Functors/GetIdFromContact.swift
+++ b/Sources/XXClient/Functors/GetIdFromContact.swift
@@ -4,15 +4,15 @@ import XCTestDynamicOverlay
 public struct GetIdFromContact {
   public var run: (Data) throws -> Data
 
-  public func callAsFunction(_ contact: Data) throws -> Data {
-    try run(contact)
+  public func callAsFunction(_ contactData: Data) throws -> Data {
+    try run(contactData)
   }
 }
 
 extension GetIdFromContact {
-  public static let live = GetIdFromContact { contact in
+  public static let live = GetIdFromContact { contactData in
     var error: NSError?
-    let id = BindingsGetIDFromContact(contact, &error)
+    let id = BindingsGetIDFromContact(contactData, &error)
     if let error = error {
       throw error
     }
diff --git a/Sources/XXClient/Functors/GetPublicKeyFromContact.swift b/Sources/XXClient/Functors/GetPublicKeyFromContact.swift
index 1ec9acaa82fa6d0f8dc2b6ee484706c99af757c0..50fc9395657c233ae6f268db9a833d8f27f868de 100644
--- a/Sources/XXClient/Functors/GetPublicKeyFromContact.swift
+++ b/Sources/XXClient/Functors/GetPublicKeyFromContact.swift
@@ -4,15 +4,15 @@ import XCTestDynamicOverlay
 public struct GetPublicKeyFromContact {
   public var run: (Data) throws -> Data
 
-  public func callAsFunction(contact: Data) throws -> Data {
-    try run(contact)
+  public func callAsFunction(_ contactData: Data) throws -> Data {
+    try run(contactData)
   }
 }
 
 extension GetPublicKeyFromContact {
-  public static let live = GetPublicKeyFromContact { contact in
+  public static let live = GetPublicKeyFromContact { contactData in
     var error: NSError?
-    let key = BindingsGetPubkeyFromContact(contact, &error)
+    let key = BindingsGetPubkeyFromContact(contactData, &error)
     if let error = error {
       throw error
     }
diff --git a/Sources/XXClient/Functors/Login.swift b/Sources/XXClient/Functors/Login.swift
index 5ce092772b2791072d533bb903f1781ef6ebef2b..3bb2efd44f3e452c56bf5f7b59d51b998261c6a0 100644
--- a/Sources/XXClient/Functors/Login.swift
+++ b/Sources/XXClient/Functors/Login.swift
@@ -7,7 +7,7 @@ public struct Login {
   public func callAsFunction(
     ephemeral: Bool = false,
     cMixId: Int,
-    authCallbacks: AuthCallbacks? = nil,
+    authCallbacks: AuthCallbacks?,
     identity: ReceptionIdentity,
     e2eParamsJSON: Data = GetE2EParams.liveDefault()
   ) throws -> E2E {
diff --git a/Sources/XXClient/Functors/LookupUD.swift b/Sources/XXClient/Functors/LookupUD.swift
index 5bd977c66c5211dc42d1e041aba08ac8f00bdc7f..0626470c4662ce0ebc7111d227d7fa1c4b4ddaad 100644
--- a/Sources/XXClient/Functors/LookupUD.swift
+++ b/Sources/XXClient/Functors/LookupUD.swift
@@ -2,11 +2,11 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct LookupUD {
-  public var run: (Int, Data, Data, Data, UdLookupCallback) throws -> SingleUseSendReport
+  public var run: (Int, Contact, Data, Data, UdLookupCallback) throws -> SingleUseSendReport
 
   public func callAsFunction(
     e2eId: Int,
-    udContact: Data,
+    udContact: Contact,
     lookupId: Data,
     singleRequestParamsJSON: Data = GetSingleUseParams.liveDefault(),
     callback: UdLookupCallback
@@ -22,7 +22,7 @@ extension LookupUD {
     var error: NSError?
     let reportData = BindingsLookupUD(
       e2eId,
-      udContact,
+      udContact.data,
       callback.makeBindingsUdLookupCallback(),
       lookupId,
       singleRequestParamsJSON,
diff --git a/Sources/XXClient/Functors/NewOrLoadUd.swift b/Sources/XXClient/Functors/NewOrLoadUd.swift
index cdb7f011b17e67a90dcb56d1c02f53f46fc5c354..f0a69b0271c1253044db9cddbe8480b35ca6e3dd 100644
--- a/Sources/XXClient/Functors/NewOrLoadUd.swift
+++ b/Sources/XXClient/Functors/NewOrLoadUd.swift
@@ -8,14 +8,14 @@ public struct NewOrLoadUd {
       username: String?,
       registrationValidationSignature: Data?,
       cert: Data,
-      contactFile: Data,
+      contact: Data,
       address: String
     ) {
       self.e2eId = e2eId
       self.username = username
       self.registrationValidationSignature = registrationValidationSignature
       self.cert = cert
-      self.contactFile = contactFile
+      self.contact = contact
       self.address = address
     }
 
@@ -23,7 +23,7 @@ public struct NewOrLoadUd {
     public var username: String?
     public var registrationValidationSignature: Data?
     public var cert: Data
-    public var contactFile: Data
+    public var contact: Data
     public var address: String
   }
 
@@ -46,7 +46,7 @@ extension NewOrLoadUd {
       params.username,
       params.registrationValidationSignature,
       params.cert,
-      params.contactFile,
+      params.contact,
       params.address,
       &error
     )
diff --git a/Sources/XXClient/Functors/NewUdManagerFromBackup.swift b/Sources/XXClient/Functors/NewUdManagerFromBackup.swift
index 454cc6aaa1b732ce170cbe51f85f9211d4726cb3..14f2b0e494c64ee5a7adaeffe9d3fb1c8d7ee699 100644
--- a/Sources/XXClient/Functors/NewUdManagerFromBackup.swift
+++ b/Sources/XXClient/Functors/NewUdManagerFromBackup.swift
@@ -9,7 +9,7 @@ public struct NewUdManagerFromBackup {
       email: Fact?,
       phone: Fact?,
       cert: Data,
-      contactFile: Data,
+      contact: Data,
       address: String
     ) {
       self.e2eId = e2eId
@@ -17,7 +17,7 @@ public struct NewUdManagerFromBackup {
       self.email = email
       self.phone = phone
       self.cert = cert
-      self.contactFile = contactFile
+      self.contact = contact
       self.address = address
     }
 
@@ -26,7 +26,7 @@ public struct NewUdManagerFromBackup {
     public var email: Fact?
     public var phone: Fact?
     public var cert: Data
-    public var contactFile: Data
+    public var contact: Data
     public var address: String
   }
 
@@ -50,7 +50,7 @@ extension NewUdManagerFromBackup {
       try params.email?.encode(),
       try params.phone?.encode(),
       params.cert,
-      params.contactFile,
+      params.contact,
       params.address,
       &error
     )
diff --git a/Sources/XXClient/Functors/RequestRestlike.swift b/Sources/XXClient/Functors/RequestRestlike.swift
index 04d25ecb39daf3df05ebd7942f11f365ee4dfd6e..4321944649770283d61aad19ce47a98be6a40bfd 100644
--- a/Sources/XXClient/Functors/RequestRestlike.swift
+++ b/Sources/XXClient/Functors/RequestRestlike.swift
@@ -2,11 +2,11 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct RequestRestlike {
-  public var run: (Int, Data, RestlikeMessage, Data) throws -> RestlikeMessage
+  public var run: (Int, Contact, RestlikeMessage, Data) throws -> RestlikeMessage
 
   public func callAsFunction(
     e2eId: Int,
-    recipient: Data,
+    recipient: Contact,
     request: RestlikeMessage,
     paramsJSON: Data
   ) throws -> RestlikeMessage {
@@ -19,7 +19,7 @@ extension RequestRestlike {
     var error: NSError?
     let responseData = BindingsRequestRestLike(
       e2dId,
-      recipient,
+      recipient.data,
       try request.encode(),
       paramsJSON,
       &error
diff --git a/Sources/XXClient/Functors/RestlikeRequest.swift b/Sources/XXClient/Functors/RestlikeRequest.swift
index cf50438cb1d1b0e69f20d80eebef5a3f524bdbe9..84c920343f745ba24d5f1bdd420d0ff4f62f0e40 100644
--- a/Sources/XXClient/Functors/RestlikeRequest.swift
+++ b/Sources/XXClient/Functors/RestlikeRequest.swift
@@ -9,7 +9,7 @@ public struct RestlikeRequest {
     clientId: Int,
     connectionId: Int,
     request: RestlikeMessage,
-    e2eParams: Data
+    e2eParams: Data = GetE2EParams.liveDefault()
   ) throws -> RestlikeMessage {
     try run(authenticated, clientId, connectionId, request, e2eParams)
   }
diff --git a/Sources/XXClient/Functors/SearchUD.swift b/Sources/XXClient/Functors/SearchUD.swift
index f9a294b41a23a365abf581522adc80b7a32dad49..9f82808d322bc5980f1dd8293b175ec04dd0e005 100644
--- a/Sources/XXClient/Functors/SearchUD.swift
+++ b/Sources/XXClient/Functors/SearchUD.swift
@@ -2,11 +2,11 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct SearchUD {
-  public var run: (Int, Data, [Fact], Data, UdSearchCallback) throws -> SingleUseSendReport
+  public var run: (Int, Contact, [Fact], Data, UdSearchCallback) throws -> SingleUseSendReport
 
   public func callAsFunction(
     e2eId: Int,
-    udContact: Data,
+    udContact: Contact,
     facts: [Fact],
     singleRequestParamsJSON: Data = GetSingleUseParams.liveDefault(),
     callback: UdSearchCallback
@@ -22,7 +22,7 @@ extension SearchUD {
     var error: NSError?
     let reportData = BindingsSearchUD(
       e2eId,
-      udContact,
+      udContact.data,
       callback.makeBindingsUdSearchCallback(),
       try facts.encode(),
       singleRequestParamsJSON,
diff --git a/Sources/XXClient/Functors/SetFactsOnContact.swift b/Sources/XXClient/Functors/SetFactsOnContact.swift
index 739a4f17fc9abfa63e6568d627354b29db423d83..8988be9574834bc924af0e109e87be1617e69c64 100644
--- a/Sources/XXClient/Functors/SetFactsOnContact.swift
+++ b/Sources/XXClient/Functors/SetFactsOnContact.swift
@@ -5,25 +5,25 @@ public struct SetFactsOnContact {
   public var run: (Data, [Fact]) throws -> Data
 
   public func callAsFunction(
-    contact: Data,
+    contactData: Data,
     facts: [Fact]
   ) throws -> Data {
-    try run(contact, facts)
+    try run(contactData, facts)
   }
 }
 
 extension SetFactsOnContact {
-  public static let live = SetFactsOnContact { contact, facts in
+  public static let live = SetFactsOnContact { contactData, facts in
     let factsData = try facts.encode()
     var error: NSError?
-    let updatedContact = BindingsSetFactsOnContact(contact, factsData, &error)
+    let updatedContactData = BindingsSetFactsOnContact(contactData, factsData, &error)
     if let error = error {
       throw error
     }
-    guard let updatedContact = updatedContact else {
+    guard let updatedContactData = updatedContactData else {
       fatalError("BindingsSetFactsOnContact returned `nil` without providing error")
     }
-    return updatedContact
+    return updatedContactData
   }
 }
 
diff --git a/Sources/XXClient/Functors/TransmitSingleUse.swift b/Sources/XXClient/Functors/TransmitSingleUse.swift
index 07af4e12ee02963c23c1c3d505b5941222c693a5..748671a9d47dae2195b614ae27642b729b87ecfc 100644
--- a/Sources/XXClient/Functors/TransmitSingleUse.swift
+++ b/Sources/XXClient/Functors/TransmitSingleUse.swift
@@ -5,7 +5,7 @@ public struct TransmitSingleUse {
   public struct Params: Equatable {
     public init(
       e2eId: Int,
-      recipient: Data,
+      recipient: Contact,
       tag: String,
       payload: Data,
       paramsJSON: Data
@@ -18,7 +18,7 @@ public struct TransmitSingleUse {
     }
 
     public var e2eId: Int
-    public var recipient: Data
+    public var recipient: Contact
     public var tag: String
     public var payload: Data
     public var paramsJSON: Data
@@ -39,7 +39,7 @@ extension TransmitSingleUse {
     var error: NSError?
     let reportData = BindingsTransmitSingleUse(
       params.e2eId,
-      params.recipient,
+      params.recipient.data,
       params.tag,
       params.payload,
       params.paramsJSON,
diff --git a/Sources/XXClient/Models/Contact.swift b/Sources/XXClient/Models/Contact.swift
new file mode 100644
index 0000000000000000000000000000000000000000..03e08f2a517d98571ee0ad9efc497c9ce930460d
--- /dev/null
+++ b/Sources/XXClient/Models/Contact.swift
@@ -0,0 +1,75 @@
+import Foundation
+
+public struct Contact {
+  public init(
+    data: Data,
+    getIdFromContact: GetIdFromContact,
+    getPublicKeyFromContact: GetPublicKeyFromContact,
+    getFactsFromContact: GetFactsFromContact,
+    setFactsOnContact: SetFactsOnContact
+  ) {
+    self.data = data
+    self.getIdFromContact = getIdFromContact
+    self.getPublicKeyFromContact = getPublicKeyFromContact
+    self.getFactsFromContact = getFactsFromContact
+    self.setFactsOnContact = setFactsOnContact
+  }
+
+  public var data: Data
+  public var getIdFromContact: GetIdFromContact
+  public var getPublicKeyFromContact: GetPublicKeyFromContact
+  public var getFactsFromContact: GetFactsFromContact
+  public var setFactsOnContact: SetFactsOnContact
+
+  public func getId() throws -> Data {
+    try getIdFromContact(data)
+  }
+
+  public func getPublicKey() throws -> Data {
+    try getPublicKeyFromContact(data)
+  }
+
+  public func getFacts() throws -> [Fact] {
+    try getFactsFromContact(data)
+  }
+
+  public mutating func setFacts(_ facts: [Fact]) throws {
+    data = try setFactsOnContact(contactData: data, facts: facts)
+  }
+}
+
+extension Contact: Equatable {
+  public static func == (lhs: Contact, rhs: Contact) -> Bool {
+    lhs.data == rhs.data
+  }
+}
+
+extension Contact {
+  public static func live(
+    _ data: Data,
+    getIdFromContact: GetIdFromContact = .live,
+    getPublicKeyFromContact: GetPublicKeyFromContact = .live,
+    getFactsFromContact: GetFactsFromContact = .live,
+    setFactsOnContact: SetFactsOnContact = .live
+  ) -> Contact {
+    Contact(
+      data: data,
+      getIdFromContact: getIdFromContact,
+      getPublicKeyFromContact: getPublicKeyFromContact,
+      getFactsFromContact: getFactsFromContact,
+      setFactsOnContact: setFactsOnContact
+    )
+  }
+}
+
+extension Contact {
+  public static func unimplemented(_ data: Data) -> Contact {
+    Contact(
+      data: data,
+      getIdFromContact: .unimplemented,
+      getPublicKeyFromContact: .unimplemented,
+      getFactsFromContact: .unimplemented,
+      setFactsOnContact: .unimplemented
+    )
+  }
+}
diff --git a/Sources/XXClient/Models/UDSearchResult.swift b/Sources/XXClient/Models/UDSearchResult.swift
deleted file mode 100644
index 84bdcccd8fb354cc2a6aa81368d4eae5f5efc961..0000000000000000000000000000000000000000
--- a/Sources/XXClient/Models/UDSearchResult.swift
+++ /dev/null
@@ -1,56 +0,0 @@
-import Foundation
-
-public struct UDSearchResult: Equatable {
-  public init(
-    id: Data,
-    facts: [Fact]
-  ) {
-    self.id = id
-    self.facts = facts
-  }
-
-  public var id: Data
-  public var facts: [Fact]
-}
-
-extension UDSearchResult: Codable {
-  enum CodingKeys: String, CodingKey {
-    case id = "ID"
-    case facts = "Facts"
-  }
-
-  public static func decode(_ data: Data) throws -> Self {
-    let data = convertBigIntsToStrings(jsonData: data)
-    return try JSONDecoder().decode(Self.self, from: data)
-  }
-
-  public func encode() throws -> Data {
-    try JSONEncoder().encode(self)
-  }
-}
-
-extension Array where Element == UDSearchResult {
-  public static func decode(_ data: Data) throws -> Self {
-    let data = convertBigIntsToStrings(jsonData: data)
-    return try JSONDecoder().decode(Self.self, from: data)
-  }
-
-  public func encode() throws -> Data {
-    try JSONEncoder().encode(self)
-  }
-}
-
-private func convertBigIntsToStrings(jsonData input: Data) -> Data {
-  guard var string = String(data: input, encoding: .utf8) else {
-    return input
-  }
-  string = string.replacingOccurrences(
-    of: #":\s*([0-9]{19,})\s*,"#,
-    with: #": "$1","#,
-    options: [.regularExpression]
-  )
-  guard let output = string.data(using: .utf8) else {
-    return input
-  }
-  return output
-}
diff --git a/Sources/XXClient/UserDiscovery/Functors/UserDiscoveryGetContact.swift b/Sources/XXClient/UserDiscovery/Functors/UserDiscoveryGetContact.swift
index 19d7fb76c0a17fdcf6374f00eedad8be2d68ceba..d2c4c706f3c629982b4df848390fc6669e0a2601 100644
--- a/Sources/XXClient/UserDiscovery/Functors/UserDiscoveryGetContact.swift
+++ b/Sources/XXClient/UserDiscovery/Functors/UserDiscoveryGetContact.swift
@@ -2,16 +2,18 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct UserDiscoveryGetContact {
-  public var run: () throws -> Data
+  public var run: () throws -> Contact
 
-  public func callAsFunction() throws -> Data {
+  public func callAsFunction() throws -> Contact {
     try run()
   }
 }
 
 extension UserDiscoveryGetContact {
   public static func live(_ bindingsUD: BindingsUserDiscovery) -> UserDiscoveryGetContact {
-    UserDiscoveryGetContact(run: bindingsUD.getContact)
+    UserDiscoveryGetContact {
+      Contact.live(try bindingsUD.getContact())
+    }
   }
 }
 
diff --git a/Sources/XXClient/UserDiscovery/Functors/UserDiscoveryPermanentDeleteAccount.swift b/Sources/XXClient/UserDiscovery/Functors/UserDiscoveryPermanentDeleteAccount.swift
index 3f570e1e1919c2fe6887b232c65a7eb28c9d77ad..f93906094c59d9aad1d92131f01733dde75e8bf9 100644
--- a/Sources/XXClient/UserDiscovery/Functors/UserDiscoveryPermanentDeleteAccount.swift
+++ b/Sources/XXClient/UserDiscovery/Functors/UserDiscoveryPermanentDeleteAccount.swift
@@ -4,15 +4,15 @@ import XCTestDynamicOverlay
 public struct UserDiscoveryPermanentDeleteAccount {
   public var run: (Fact) throws -> Void
 
-  public func callAsFunction(_ fact: Fact) throws {
-    try run(fact)
+  public func callAsFunction(username: Fact) throws {
+    try run(username)
   }
 }
 
 extension UserDiscoveryPermanentDeleteAccount {
   public static func live(_ bindingsUD: BindingsUserDiscovery) -> UserDiscoveryPermanentDeleteAccount {
-    UserDiscoveryPermanentDeleteAccount { fact in
-      try bindingsUD.permanentDeleteAccount(fact.encode())
+    UserDiscoveryPermanentDeleteAccount { username in
+      try bindingsUD.permanentDeleteAccount(username.encode())
     }
   }
 }
diff --git a/Sources/XXMessengerClient/Messenger/Functors/MessengerConnect.swift b/Sources/XXMessengerClient/Messenger/Functors/MessengerConnect.swift
index d871f5341027e36456e622959b30e36ee26da163..efca553a512e4ab3745eb292fd54e59232fe03f4 100644
--- a/Sources/XXMessengerClient/Messenger/Functors/MessengerConnect.swift
+++ b/Sources/XXMessengerClient/Messenger/Functors/MessengerConnect.swift
@@ -22,7 +22,7 @@ extension MessengerConnect {
       env.e2e.set(try env.login(
         cMixId: cMix.getId(),
         authCallbacks: env.authCallbacks.registered(),
-        identity: try cMix.makeLegacyReceptionIdentity(),
+        identity: try cMix.makeReceptionIdentity(legacy: true),
         e2eParamsJSON: env.getE2EParams()
       ))
     }
diff --git a/Sources/XXMessengerClient/Messenger/Functors/MessengerLogIn.swift b/Sources/XXMessengerClient/Messenger/Functors/MessengerLogIn.swift
index 7e6381c5d3f97121da31031112706626184fbdcb..b82e808a3fc8e9bb3daf97bd07df9fbc5093efe8 100644
--- a/Sources/XXMessengerClient/Messenger/Functors/MessengerLogIn.swift
+++ b/Sources/XXMessengerClient/Messenger/Functors/MessengerLogIn.swift
@@ -29,7 +29,7 @@ extension MessengerLogIn {
           username: nil,
           registrationValidationSignature: nil,
           cert: env.udCert ?? e2e.getUdCertFromNdf(),
-          contactFile: env.udContact ?? (try e2e.getUdContactFromNdf()),
+          contact: env.udContact ?? (try e2e.getUdContactFromNdf()),
           address: env.udAddress ?? e2e.getUdAddressFromNdf()
         ),
         follower: .init {
diff --git a/Sources/XXMessengerClient/Messenger/Functors/MessengerRegister.swift b/Sources/XXMessengerClient/Messenger/Functors/MessengerRegister.swift
index 116b1a1837b2fff29249f8ba51c3e4ef0aaae32a..6baad0eb3875b59035e007d92394c9db9e6e589e 100644
--- a/Sources/XXMessengerClient/Messenger/Functors/MessengerRegister.swift
+++ b/Sources/XXMessengerClient/Messenger/Functors/MessengerRegister.swift
@@ -31,7 +31,7 @@ extension MessengerRegister {
           username: username,
           registrationValidationSignature: cMix.getReceptionRegistrationValidationSignature(),
           cert: env.udCert ?? e2e.getUdCertFromNdf(),
-          contactFile: env.udContact ?? (try e2e.getUdContactFromNdf()),
+          contact: env.udContact ?? (try e2e.getUdContactFromNdf()),
           address: env.udAddress ?? e2e.getUdAddressFromNdf()
         ),
         follower: .init {
diff --git a/Tests/XXClientTests/Models/UDSearchResultTests.swift b/Tests/XXClientTests/Models/UDSearchResultTests.swift
deleted file mode 100644
index 1ac94da20704d7341b862d9155c6af319da244f4..0000000000000000000000000000000000000000
--- a/Tests/XXClientTests/Models/UDSearchResultTests.swift
+++ /dev/null
@@ -1,71 +0,0 @@
-import CustomDump
-import XCTest
-@testable import XXClient
-
-final class UDSearchResultTests: XCTestCase {
-  func testCoding() throws {
-    let idB64 = "pYIpRwPy+FnOkl5tndkG8RC93W/t5b1lszqPpMDynlUD"
-    let facts: [Fact] = [
-      Fact(fact: "carlos_arimateias", type: 0),
-    ]
-    let jsonString = """
-    {
-      "ID": "\(idB64)",
-      "Facts": \(String(data: try! facts.encode(), encoding: .utf8)!)
-    }
-    """
-    let jsonData = jsonString.data(using: .utf8)!
-    let model = try UDSearchResult.decode(jsonData)
-
-    XCTAssertNoDifference(model, UDSearchResult(
-      id: Data(base64Encoded: idB64)!,
-      facts: facts
-    ))
-
-    let encodedModel = try model.encode()
-    let decodedModel = try UDSearchResult.decode(encodedModel)
-
-    XCTAssertNoDifference(decodedModel, model)
-  }
-
-  func testCodingArray() throws {
-    let models: [UDSearchResult] = [
-      UDSearchResult(
-        id: Data(base64Encoded: "pYIpRwPy+FnOkl5tndkG8RC93W/t5b1lszqPpMDynlUD")!,
-        facts: [
-          Fact(fact: "carlos_arimateias", type: 0),
-        ]
-      ),
-    ]
-    let encodedModels = try models.encode()
-    let decodedModels = try [UDSearchResult].decode(encodedModels)
-
-    XCTAssertNoDifference(decodedModels, models)
-  }
-
-  func testEncodeWithBigInt() throws {
-    let idB64 = "pYIpRwPy+FnOkl5tndkG8RC93W/t5b1lszqPpMDynlUD"
-    let facts: [Fact] = [
-      Fact(fact: "carlos_arimateias", type: 0),
-    ]
-    let jsonString = """
-    {
-      "ID": "\(idB64)",
-      "DhPubKey": {
-        "Value": 1759426033802606996617132861414734059978289057332806031357800676138355264622676606691435603603751978195460163638145821347601916259127578968570412642641025630452893097179266022832268525346700655861033031712000288680395716922501450233258587788020541937373196899001184700899008948530359980753630443486308876999029238453979779103124291315202352475056237021681172884599194016245219278368648568458514708567045834427853469072638665888791358582182353417065794210125797368093469194927663862565508608719835557592421245749381164023134450699040591219966988201315627676532245052123725278573237006510683695959381015415110970848376498637637944431576313526294020390694483472829278364602405292767170719547347485307956614210210673321959886410245334772057212077704024337636501108566655549055129066343309591274727538343075929837698653965640646190405582788894021694347212874155979958144038307500444865955516612526623220973497735316081265793063949,
-        "Fingerprint": 15989433043166758754
-      },
-      "OwnershipProof": null,
-      "Facts": \(String(data: try! facts.encode(), encoding: .utf8)!)
-    }
-    """
-    let jsonData = jsonString.data(using: .utf8)!
-
-    let decodedModel = try UDSearchResult.decode(jsonData)
-
-    XCTAssertNoDifference(decodedModel, UDSearchResult(
-      id: Data(base64Encoded: idB64)!,
-      facts: facts
-    ))
-  }
-}
diff --git a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerConnectTests.swift b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerConnectTests.swift
index 7654bc26adca7ccf82be5d8836b954af40e38a73..1f69797f10465a6c4d4ddd027d368cdc7dc69c7a 100644
--- a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerConnectTests.swift
+++ b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerConnectTests.swift
@@ -12,6 +12,7 @@ final class MessengerConnectTests: XCTestCase {
       var e2eParamsJSON: Data
     }
 
+    var didMakeReceptionIdentity: [Bool] = []
     var didLogIn: [DidLogIn] = []
     var didLogInWithAuthCallbacks: [AuthCallbacks?] = []
     var didSetE2E: [E2E?] = []
@@ -25,7 +26,10 @@ final class MessengerConnectTests: XCTestCase {
     env.cMix.get = {
       var cMix: CMix = .unimplemented
       cMix.getId.run = { cMixId }
-      cMix.makeLegacyReceptionIdentity.run = { receptionId }
+      cMix.makeReceptionIdentity.run = { legacy in
+        didMakeReceptionIdentity.append(legacy)
+        return receptionId
+      }
       return cMix
     }
     env.e2e.set = { didSetE2E.append($0) }
@@ -49,11 +53,12 @@ final class MessengerConnectTests: XCTestCase {
 
     try connect()
 
+    XCTAssertNoDifference(didMakeReceptionIdentity, [true])
     XCTAssertNoDifference(didLogIn, [
       DidLogIn(
         ephemeral: false,
         cMixId: 1234,
-        identity: .stub,
+        identity: receptionId,
         e2eParamsJSON: e2eParams
       )
     ])
@@ -89,7 +94,7 @@ final class MessengerConnectTests: XCTestCase {
     env.cMix.get = {
       var cMix: CMix = .unimplemented
       cMix.getId.run = { 1234 }
-      cMix.makeLegacyReceptionIdentity.run = { throw error }
+      cMix.makeReceptionIdentity.run = { _ in throw error }
       return cMix
     }
     env.authCallbacks.registered = { .unimplemented }
@@ -108,7 +113,7 @@ final class MessengerConnectTests: XCTestCase {
     env.cMix.get = {
       var cMix: CMix = .unimplemented
       cMix.getId.run = { 1234 }
-      cMix.makeLegacyReceptionIdentity.run = { .stub }
+      cMix.makeReceptionIdentity.run = { _ in .stub }
       return cMix
     }
     env.authCallbacks.registered = { .unimplemented }
diff --git a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerLogInTests.swift b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerLogInTests.swift
index c0c3aaf3558ed14fa878b12bd80996ca3598a482..db4e9742a0c6d5160c144243443d68c2babce8bc 100644
--- a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerLogInTests.swift
+++ b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerLogInTests.swift
@@ -46,7 +46,7 @@ final class MessengerLogInTests: XCTestCase {
       username: nil,
       registrationValidationSignature: nil,
       cert: udCertFromNDF,
-      contactFile: udContactFromNDF,
+      contact: udContactFromNDF,
       address: udAddressFromNDF
     )])
     XCTAssertEqual(didNewOrLoadUDWithFollower.count, 1)
@@ -93,7 +93,7 @@ final class MessengerLogInTests: XCTestCase {
       username: nil,
       registrationValidationSignature: nil,
       cert: altUdCert,
-      contactFile: altUdContact,
+      contact: altUdContact,
       address: altUdAddress
     )])
     XCTAssertEqual(didSetUD.compactMap { $0 }.count, 1)
diff --git a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerRegisterTests.swift b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerRegisterTests.swift
index ed48dc263326d52b26dd866f134fdbdae7bc2671..35d078c2a38314245dbd1ede4517d82022ef1507 100644
--- a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerRegisterTests.swift
+++ b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerRegisterTests.swift
@@ -51,7 +51,7 @@ final class MessengerRegisterTests: XCTestCase {
       username: username,
       registrationValidationSignature: registrationSignature,
       cert: udCertFromNDF,
-      contactFile: udContactFromNDF,
+      contact: udContactFromNDF,
       address: udAddressFromNDF
     )])
     XCTAssertEqual(didNewOrLoadUDWithFollower.count, 1)
@@ -103,7 +103,7 @@ final class MessengerRegisterTests: XCTestCase {
       username: username,
       registrationValidationSignature: registrationSignature,
       cert: altUdCert,
-      contactFile: altUdContact,
+      contact: altUdContact,
       address: altUdAddress
     )])
     XCTAssertEqual(didSetUD.compactMap { $0 }.count, 1)
diff --git a/Tests/XXMessengerClientTests/TestHelpers/AuthCallback.Callback+stubs.swift b/Tests/XXMessengerClientTests/TestHelpers/AuthCallback.Callback+stubs.swift
index 9617c0b21319cb7d5624e0bcd3a6b22fbff3bc69..0da805adadd17fbc77c098cf94e8183e3069c215 100644
--- a/Tests/XXMessengerClientTests/TestHelpers/AuthCallback.Callback+stubs.swift
+++ b/Tests/XXMessengerClientTests/TestHelpers/AuthCallback.Callback+stubs.swift
@@ -3,19 +3,19 @@ import XXClient
 extension Array where Element == AuthCallbacks.Callback {
   static let stubs: [AuthCallbacks.Callback] = [
     .confirm(
-      contact: "contact-1".data(using: .utf8)!,
+      contact: .unimplemented("contact-1".data(using: .utf8)!),
       receptionId: "reception-id-1".data(using: .utf8)!,
       ephemeralId: 1,
       roundId: 1
     ),
     .request(
-      contact: "contact-2".data(using: .utf8)!,
+      contact: .unimplemented("contact-2".data(using: .utf8)!),
       receptionId: "reception-id-2".data(using: .utf8)!,
       ephemeralId: 2,
       roundId: 2
     ),
     .reset(
-      contact: "contact-3".data(using: .utf8)!,
+      contact: .unimplemented("contact-3".data(using: .utf8)!),
       receptionId: "reception-id-3".data(using: .utf8)!,
       ephemeralId: 3,
       roundId: 3