         })
         
         self._observers.append(currentDevice.observe(\.videoZoomFactor, options: [.new]) { (object, change) in
-            self.videoZoomFactorChanged()
+            DispatchQueue.main.async {
+                self.videoDelegate?.nextLevel(self, didUpdateVideoZoomFactor: self.videoZoomFactor)
+            }
         })
     }
     

        }
    }
    
    internal func flashActiveChanged() {
        // adjust white balance mode depending on the flash
        if let device = self._currentDevice {
            let exposureMode = device.exposureMode
            let whiteBalanceMode = self.whiteBalanceModeBestForExposureMode(exposureMode: exposureMode)
            let currentWhiteBalanceMode = device.whiteBalanceMode
            
            if whiteBalanceMode != currentWhiteBalanceMode {
                do {
                    try device.lockForConfiguration()
                    
                    self.adjustWhiteBalanceForExposureMode(exposureMode: exposureMode)
                    
                    device.unlockForConfiguration()
                }
                catch {
                    print("NextLevel, failed to lock device for white balance configuration")
                }
            }
        }
        
        DispatchQueue.main.async {
            self.flashDelegate?.nextLevelFlashActiveChanged(self)
        }
    }
    
    internal func torchActiveChanged() {
        DispatchQueue.main.async {
            self.flashDelegate?.nextLevelTorchActiveChanged(self)
        }
    }
    
    internal func flashAndTorchAvailabilityChanged() {
        DispatchQueue.main.async {
            self.flashDelegate?.nextLevelFlashAndTorchAvailabilityChanged(self)
        }
    }
    
    // mirroring
    
    /// Changes the current capture device's mirroring mode.

        }
    }
    
    /// Triggers a photo capture from the last video frame.
    public func capturePhotoFromVideo() {
        
