diff --git a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Bindings b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Bindings
index 131f1d78c3fcf2a02582bd922f5392f81d5691eb..9613b0e5c18dd2250df2dd0367f10764cec12927 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 fd68e56619ed543b72bbf05da1ba2474e119ef12..c5600d7bc966b7b9759d72cc659ae937c5482dc5 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
@@ -67,7 +67,7 @@ Accepts a marshalled Message object
 - (nonnull instancetype)init;
 // skipped field AuthenticatedConnection.Connection with unsupported type: gitlab.com/elixxir/client/bindings.Connection
 
-- (void)close;
+- (BOOL)close:(NSError* _Nullable* _Nullable)error;
 - (long)getId;
 - (NSData* _Nullable)getPartner;
 - (BOOL)isAuthenticated;
@@ -209,7 +209,7 @@ passed timeout. It will return true if the network is healthy
 /**
  * Close deletes this Connection's partner.Manager and releases resources
  */
-- (void)close;
+- (BOOL)close:(NSError* _Nullable* _Nullable)error;
 /**
  * GetId returns the Connection.id
  */
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 131f1d78c3fcf2a02582bd922f5392f81d5691eb..9613b0e5c18dd2250df2dd0367f10764cec12927 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 fd68e56619ed543b72bbf05da1ba2474e119ef12..c5600d7bc966b7b9759d72cc659ae937c5482dc5 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
@@ -67,7 +67,7 @@ Accepts a marshalled Message object
 - (nonnull instancetype)init;
 // skipped field AuthenticatedConnection.Connection with unsupported type: gitlab.com/elixxir/client/bindings.Connection
 
-- (void)close;
+- (BOOL)close:(NSError* _Nullable* _Nullable)error;
 - (long)getId;
 - (NSData* _Nullable)getPartner;
 - (BOOL)isAuthenticated;
@@ -209,7 +209,7 @@ passed timeout. It will return true if the network is healthy
 /**
  * Close deletes this Connection's partner.Manager and releases resources
  */
-- (void)close;
+- (BOOL)close:(NSError* _Nullable* _Nullable)error;
 /**
  * GetId returns the Connection.id
  */
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 131f1d78c3fcf2a02582bd922f5392f81d5691eb..9613b0e5c18dd2250df2dd0367f10764cec12927 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 fd68e56619ed543b72bbf05da1ba2474e119ef12..c5600d7bc966b7b9759d72cc659ae937c5482dc5 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
@@ -67,7 +67,7 @@ Accepts a marshalled Message object
 - (nonnull instancetype)init;
 // skipped field AuthenticatedConnection.Connection with unsupported type: gitlab.com/elixxir/client/bindings.Connection
 
-- (void)close;
+- (BOOL)close:(NSError* _Nullable* _Nullable)error;
 - (long)getId;
 - (NSData* _Nullable)getPartner;
 - (BOOL)isAuthenticated;
@@ -209,7 +209,7 @@ passed timeout. It will return true if the network is healthy
 /**
  * Close deletes this Connection's partner.Manager and releases resources
  */
-- (void)close;
+- (BOOL)close:(NSError* _Nullable* _Nullable)error;
 /**
  * GetId returns the Connection.id
  */
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 f02c6797986c50582c50cb819be74ee33621d8ae..e10e9ee786df8cefcea1b2ea1007c9fdb864f674 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 fd68e56619ed543b72bbf05da1ba2474e119ef12..c5600d7bc966b7b9759d72cc659ae937c5482dc5 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
@@ -67,7 +67,7 @@ Accepts a marshalled Message object
 - (nonnull instancetype)init;
 // skipped field AuthenticatedConnection.Connection with unsupported type: gitlab.com/elixxir/client/bindings.Connection
 
-- (void)close;
+- (BOOL)close:(NSError* _Nullable* _Nullable)error;
 - (long)getId;
 - (NSData* _Nullable)getPartner;
 - (BOOL)isAuthenticated;
@@ -209,7 +209,7 @@ passed timeout. It will return true if the network is healthy
 /**
  * Close deletes this Connection's partner.Manager and releases resources
  */
-- (void)close;
+- (BOOL)close:(NSError* _Nullable* _Nullable)error;
 /**
  * GetId returns the Connection.id
  */
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 f02c6797986c50582c50cb819be74ee33621d8ae..e10e9ee786df8cefcea1b2ea1007c9fdb864f674 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 fd68e56619ed543b72bbf05da1ba2474e119ef12..c5600d7bc966b7b9759d72cc659ae937c5482dc5 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
@@ -67,7 +67,7 @@ Accepts a marshalled Message object
 - (nonnull instancetype)init;
 // skipped field AuthenticatedConnection.Connection with unsupported type: gitlab.com/elixxir/client/bindings.Connection
 
-- (void)close;
+- (BOOL)close:(NSError* _Nullable* _Nullable)error;
 - (long)getId;
 - (NSData* _Nullable)getPartner;
 - (BOOL)isAuthenticated;
@@ -209,7 +209,7 @@ passed timeout. It will return true if the network is healthy
 /**
  * Close deletes this Connection's partner.Manager and releases resources
  */
-- (void)close;
+- (BOOL)close:(NSError* _Nullable* _Nullable)error;
 /**
  * GetId returns the Connection.id
  */
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 f02c6797986c50582c50cb819be74ee33621d8ae..e10e9ee786df8cefcea1b2ea1007c9fdb864f674 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 fd68e56619ed543b72bbf05da1ba2474e119ef12..c5600d7bc966b7b9759d72cc659ae937c5482dc5 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
@@ -67,7 +67,7 @@ Accepts a marshalled Message object
 - (nonnull instancetype)init;
 // skipped field AuthenticatedConnection.Connection with unsupported type: gitlab.com/elixxir/client/bindings.Connection
 
-- (void)close;
+- (BOOL)close:(NSError* _Nullable* _Nullable)error;
 - (long)getId;
 - (NSData* _Nullable)getPartner;
 - (BOOL)isAuthenticated;
@@ -209,7 +209,7 @@ passed timeout. It will return true if the network is healthy
 /**
  * Close deletes this Connection's partner.Manager and releases resources
  */
-- (void)close;
+- (BOOL)close:(NSError* _Nullable* _Nullable)error;
 /**
  * GetId returns the Connection.id
  */
diff --git a/README.md b/README.md
index abead2fbb13f2e011ce6876c3446066f2016a055..c2bfcb0b57a11bc9d2731e1392bdc21263a7d61f 100644
--- a/README.md
+++ b/README.md
@@ -172,7 +172,7 @@ ElixxirDAppsSDK [Xcode Workspace]
 
 ### Build schemes
 
-- Use `exlixxir-dapps-sdk-swift` scheme to build the package with `ElixxirDAppsSDK` library.
+- Use `exlixxir-dapps-sdk-swift` scheme to build and test the package with `ElixxirDAppsSDK` library.
 - Use `ExampleApp (iOS)` to build and run the example app.
 - Use `example-app` scheme to build and test the example app package with all contained libraries.
 - Use `ExampleAppIcon` scheme with macOS target to build and preview the example app icon.
diff --git a/Sources/ElixxirDAppsSDK/Cancellable.swift b/Sources/ElixxirDAppsSDK/Cancellable.swift
index 1984e3f10916319e9e88959aa7f21f554d0d0e27..f6897f8d9bdb584053947ab08878643d9eab7028 100644
--- a/Sources/ElixxirDAppsSDK/Cancellable.swift
+++ b/Sources/ElixxirDAppsSDK/Cancellable.swift
@@ -1,11 +1,18 @@
 public final class Cancellable {
   public init(cancel: @escaping () -> Void) {
-    self.cancel = cancel
+    self.onCancel = cancel
   }
 
   deinit {
     cancel()
   }
 
-  public let cancel: () -> Void
+  public func cancel() {
+    guard isCancelled == false else { return }
+    isCancelled = true
+    onCancel()
+  }
+
+  private var isCancelled = false
+  private let onCancel: () -> Void
 }
diff --git a/Sources/ElixxirDAppsSDK/ConnectionCloser.swift b/Sources/ElixxirDAppsSDK/ConnectionCloser.swift
index c74c62facc24cdbd70df2c1480dbd4424cf3925c..eb31677de4e3c630a944229503e7f3a70289718d 100644
--- a/Sources/ElixxirDAppsSDK/ConnectionCloser.swift
+++ b/Sources/ElixxirDAppsSDK/ConnectionCloser.swift
@@ -1,10 +1,10 @@
 import Bindings
 
 public struct ConnectionCloser {
-  public var close: () -> Void
+  public var close: () throws -> Void
 
-  public func callAsFunction() {
-    close()
+  public func callAsFunction() throws {
+    try close()
   }
 }