 
     // MARK: - Updating trackers
     func updateTrackers(reset: Bool = false) {
-        DispatchQueue.main.async {
+        lastCardsUpdateRequest = NSDate().timeIntervalSince1970
+        let when = DispatchTime.now() + DispatchTimeInterval.milliseconds(100)
+        DispatchQueue.main.asyncAfter(deadline: when) { [weak self] in
+            guard let strongSelf = self else { return }
+            guard Date().timeIntervalSince1970 - strongSelf.lastCardsUpdateRequest > 0.1 else {
+                return
+            }
+
             SizeHelper.hearthstoneWindow.reload()
-        }
+
+            strongSelf.redrawTrackers(reset: reset)
+        }
+    }
+
+    private func redrawTrackers(reset: Bool = false) {
         let settings = Settings.instance
         let game = Game.instance
 


        if settings.opponentBoardDamage {
            if game.gameStarted {
                DispatchQueue.main.async { [weak self] in
                    self?.opponentBoardDamage.update(attack: board.opponent.damage)
                }
                show(controller: opponentBoardDamage, show: true,
                     frame: SizeHelper.opponentBoardDamageFrame())
            } else {

        // secret helper
        if settings.showSecretHelper {
            if let secrets = game.opponentSecrets, secrets.allSecrets().count > 0 {
                secretTracker.setSecrets(secrets: secrets.allSecrets())
                show(controller: secretTracker, show: true, frame: SizeHelper.secretTrackerFrame())
            } else {
                show(controller: secretTracker, show: false)
