     @objc private dynamic var message: String = ""
     
     private var finishObserver: NSKeyValueObservation?
-    private lazy var updateTimer: DispatchSourceTimer = DispatchSource.makeTimerSource(queue: .main)
+    private var updateTimer: DispatchSourceTimer?
     
     @IBOutlet private weak var indicator: NSProgressIndicator?
     @IBOutlet private weak var descriptionField: NSTextField?

        
        // trigger a timer updating UI every 0.1 seconds.
        // -> This is much more performance-efficient than KV-Observing `.fractionCompleted` or `.localizedDescription`. (2019-12 macOS 10.14)
        self.updateTimer.cancel()
        self.updateTimer.schedule(deadline: .now(), repeating: .milliseconds(100))
        self.updateTimer.setEventHandler { [weak self] in
            guard let progress = self?.progress else { return }
            
            self?.indicator?.doubleValue = progress.fractionCompleted
            self?.descriptionField?.stringValue = progress.localizedDescription
        }
        self.updateTimer.resume()
    }
    
    
    override func dismiss(_ sender: Any?) {
        
        self.updateTimer.cancel()
        
        // close sheet in an old way
        // -> Otherwise, a meanless empty sheet shows up after another sheet is closed

    /// change button to done
    func done() {
        
        self.updateTimer?.cancel()
        
        self.button?.title = "OK".localized
        self.button?.action = #selector(dismiss(_:) as (Any?) -> Void)
