     private func addWalletObservers() {
         NotificationCenter.default.addObserver(forName: .WalletBalanceChangedNotification, object: nil, queue: nil, using: { note in
             self.updateBalance()
-            self.updateTransactions()
+            self.requestTxUpdate()
         })
 
         NotificationCenter.default.addObserver(forName: .WalletTxStatusUpdateNotification, object: nil, queue: nil, using: {note in
-            self.updateTransactions()
+            self.requestTxUpdate()
         })
 
         NotificationCenter.default.addObserver(forName: .WalletTxRejectedNotification, object: nil, queue: nil, using: {note in
             guard let recommendRescan = note.userInfo?["recommendRescan"] as? Bool else { return }
-            self.updateTransactions()
+            self.requestTxUpdate()
             if recommendRescan {
                 self.store.perform(action: RecommendRescan.set(recommendRescan))
             }

        endActivity()
    }

    private func updateTransactions() {
        DispatchQueue.walletQueue.async {
            guard let txRefs = self.walletManager.wallet?.transactions else { return }
            let transactions = self.makeTransactionViewModels(transactions: txRefs, walletManager: self.walletManager, kvStore: self.kvStore, rate: self.store.state.currentRate)


private let lastBlockHeightKey = "LastBlockHeightKey"
private let progressUpdateInterval: TimeInterval = 0.5
private let updateDebounceInterval: TimeInterval = 0.4

class WalletCoordinator : Subscriber {

    var kvStore: BRReplicatedKVStore? {
        didSet {
            requestTxUpdate()
        }
    }

    private let walletManager: WalletManager
    private let store: Store
    private var progressTimer: Timer?
    private var updateTimer: Timer?
    private let defaults = UserDefaults.standard

    init(walletManager: WalletManager, store: Store) {
