                 var captureDevice: AVCaptureDevice? = nil
                 
                 if let requestedDevice = self.requestedDevice {
-                    if requestedDevice != self.currentDevice {
-                        captureDevice = requestedDevice
+                    captureDevice = requestedDevice
+                } else if let videoDevice = AVCaptureDevice.primaryVideoDevice(forPosition: self.devicePosition.avfoundationType) {
+                    captureDevice = videoDevice
+                }
+                
+                if let device = captureDevice {
+                    if device != self.currentDevice {
+                        self.configureDevice(captureDevice: device, mediaType: AVMediaTypeVideo)
+                        
+                        let changingPosition = device.position != self.currentDevice?.position
+                        if changingPosition == true {
+                            self.executeClosureAsyncOnMainQueueIfNecessary {
+                                self.delegate?.nextLevelDevicePositionWillChange(self)
+                            }
+                        }
+                        
+                        self.willChangeValue(forKey: "currentDevice")
+                        self.currentDevice = device
+                        self.didChangeValue(forKey: "currentDevice")
+                        self.requestedDevice = nil
+                        
+                        if changingPosition == true {
+                            self.executeClosureAsyncOnMainQueueIfNecessary {
+                                self.delegate?.nextLevelDevicePositionDidChange(self)
+                            }
+                        }
                     }
-                } else if let videoDevice = AVCaptureDevice.primaryVideoDevice(forPosition: self.devicePosition.avfoundationType) {
-                    if videoDevice != self.currentDevice {
-                        captureDevice = videoDevice
-                    }
-                }
-                
-                if let device = captureDevice {
-                    self.configureDevice(captureDevice: device, mediaType: AVMediaTypeVideo)
-                    
-                    self.willChangeValue(forKey: "currentDevice")
-                    self.currentDevice = device
-                    self.didChangeValue(forKey: "currentDevice")
-                    self.requestedDevice = nil
                 }
             }
 

                }
            }

            self.executeClosureAsyncOnMainQueueIfNecessary(withClosure: {
                self.delegate?.nextLevelDidChangeExposure(self)
            })
        }
    }
    
    internal func whiteBalanceStarted() {
        self.executeClosureAsyncOnMainQueueIfNecessary(withClosure: {
            self.delegate?.nextLevelWillChangeWhiteBalance(self)
        })
    }
    
    internal func whiteBalanceEnded() {
        self.executeClosureAsyncOnMainQueueIfNecessary(withClosure: {
            self.delegate?.nextLevelDidChangeWhiteBalance(self)
        })
    }
    
    internal func flashActiveChanged() {

    
    internal func configureDevices() {
        if self.captureSession != nil {
        
            self.beginConfiguration()
            
            var shouldConfigureVideo = false
