                 }
         }
     }
+
     func handleWalletFeeEstimateSuccess (_ cookie: UnsafeMutableRawPointer, estimate: TransferFeeBasis) {
         if let handler = remWalletFeeEstimateHandler(cookie) {
-            handler (Result.success (estimate))
+            queue.async {
+                handler (Result.success (estimate))
+            }
         }
     }
 
     func handleWalletFeeEstimateFailure (_ cookie: UnsafeMutableRawPointer, error: Wallet.FeeEstimationError) {
         if let handler = remWalletFeeEstimateHandler(cookie) {
-            handler (Result.failure(error))
-        }
+            queue.async {
+                handler (Result.failure(error))
+            }
+        }
+    }
+
+    init (queue: DispatchQueue) {
+        self.queue = queue
     }
 }
 


    var index: Int32 = 0;
    var handlers: [Int32: Handler] = [:]

    var cookie: UnsafeMutableRawPointer {
        let index = Int(self.index)
        return UnsafeMutableRawPointer (bitPattern: index)!
    }

    func cookieToIndex (_ cookie: UnsafeMutableRawPointer) -> Int32 {
        return 1 + Int32(UnsafeMutableRawPointer(bitPattern: 1)!.distance(to: cookie))
    }

    public func addWalletFeeEstimateHandler(_ handler: @escaping Wallet.EstimateFeeHandler) -> UnsafeMutableRawPointer {
        index = OSAtomicIncrement32 (&index)
        handlers[index] = Handler.walletFeeEstimate(handler)
        return cookie

        self.onMainnet = onMainnet
        self.path  = path
        self.query = query
        self.listenerQueue = listenerQueue ?? DispatchQueue (label: "Crypto System Listener")
        self.callbackCoordinator = SystemCallbackCoordinator (queue: self.listenerQueue)

        let _ = System.systemExtend(with: self)
        announceEvent(SystemEvent.created)
