                                                            amount: amount,
                                                            gasLimit: self.gasLimit)
 
-        pinVerifier { [unowned self] pin in
+        // this block requires a strong reference to self to ensure the Sender is not deallocated before completion
+        pinVerifier { pin in
             guard self.authenticator.sign(transaction: tx, wallet: wallet, withPin: pin) else {
                 DispatchQueue.main.async {
                     completion(.creationError("authentication error"))

            let amount = amount else {
                return completion(.creationError("not ready"))
        }
        
        pinVerifier { [unowned self] pin in
            let (tx, wallet) = self.walletManager.createTransaction(currency: self.currency,
                                                                    toAddress: address,
                                                                    amount: amount,

    private func sendWithPinVerification(tx: BRTxRef,
                                         pinVerifier: PinVerifier,
                                         completion: @escaping SendCompletion) {
        // this block requires a strong reference to self to ensure the Sender is not deallocated before completion
        pinVerifier { pin in
            DispatchQueue.walletQueue.async {
                guard let wallet = self.walletManager.wallet else { return assertionFailure() }
                if self.authenticator.sign(transaction: tx, wallet: wallet, withPin: pin) {
