                 try device.lockForConfiguration();
 
                 if(flashState == 0){
-                    if(backCameraDevice!.isFlashModeSupported(AVCaptureFlashMode.off)){
-                        device.flashMode = AVCaptureFlashMode.off;
+                    if(backCameraDevice!.isFlashModeSupported(AVCaptureDevice.FlashMode.off)){
+                        device.flashMode = AVCaptureDevice.FlashMode.off;
                         let image = UIImage(named: "camera_flash_off.png") as UIImage!
                         flashUIButton.setImage(image, for: UIControlState())
                     }
-                    if(backCameraDevice!.isTorchModeSupported(AVCaptureTorchMode.off)){
-                        device.torchMode = AVCaptureTorchMode.off;
+                    if(backCameraDevice!.isTorchModeSupported(AVCaptureDevice.TorchMode.off)){
+                        device.torchMode = AVCaptureDevice.TorchMode.off;
                     }
                     flashState = 1;
                 }
 
                 else if(flashState == 1){
-                    if(backCameraDevice!.isFlashModeSupported(AVCaptureFlashMode.auto)){
-                        device.flashMode = AVCaptureFlashMode.auto;
+                    if(backCameraDevice!.isFlashModeSupported(AVCaptureDevice.FlashMode.auto)){
+                        device.flashMode = AVCaptureDevice.FlashMode.auto;
                         let image = UIImage(named: "camera_flash_auto.png") as UIImage!
                         flashUIButton.setImage(image, for: UIControlState())
                     }
-                    if(backCameraDevice!.isTorchModeSupported(AVCaptureTorchMode.off)){
-                        device.torchMode = AVCaptureTorchMode.off;
+                    if(backCameraDevice!.isTorchModeSupported(AVCaptureDevice.TorchMode.off)){
+                        device.torchMode = AVCaptureDevice.TorchMode.off;
                     }
                     flashState = 2
                 }
                 else if(flashState == 2){
-                    if(backCameraDevice!.isFlashModeSupported(AVCaptureFlashMode.off)){
-                        device.flashMode = AVCaptureFlashMode.off;
+                    if(backCameraDevice!.isFlashModeSupported(AVCaptureDevice.FlashMode.off)){
+                        device.flashMode = AVCaptureDevice.FlashMode.off;
                         let image = UIImage(named: "camera_flash_on.png") as UIImage!
                         flashUIButton.setImage(image, for: UIControlState())
                     }
-                    if(backCameraDevice!.isTorchModeSupported(AVCaptureTorchMode.on)){
-                        device.torchMode = AVCaptureTorchMode.on;
+                    if(backCameraDevice!.isTorchModeSupported(AVCaptureDevice.TorchMode.on)){
+                        device.torchMode = AVCaptureDevice.TorchMode.on;
                     }
 
                     flashState = 0;


        let possibleCameraInput: AnyObject?
        do {
            possibleCameraInput = try AVCaptureDeviceInput(device: backCameraDevice)
        } catch let error1 as NSError {
            error = error1
            possibleCameraInput = nil
        }
        let backCameraInput = possibleCameraInput as? AVCaptureDeviceInput
        if captureSession.canAddInput(backCameraInput) {
            captureSession.addInput(backCameraInput)
        }

        stillImageOutput = AVCaptureStillImageOutput()
        if captureSession.canAddOutput(stillImageOutput) {
            stillImageOutput?.isHighResolutionStillImageOutputEnabled = true;
            stillImageOutput?.outputSettings = [AVVideoCodecKey : AVVideoCodecJPEG];
            captureSession.addOutput(stillImageOutput)
        }
        captureSession.sessionPreset = AVCaptureSessionPresetPhoto
        setFlashModeToAuto(backCameraDevice!)
        beginSession()
    }


        HappieCameraJSON.initializeProcessingCount();

        _ = AVCaptureDevice.devices(for: AVMediaType.video)

        let devices = AVCaptureDevice.devices()

        // Loop through all the capture devices on this phone
        for device in devices {
            // Make sure this particular device supports video
            if ((device as AnyObject).hasMediaType(AVMediaType.video)) {
                // Finally check the position and confirm we've got the back camera
                if((device as AnyObject).position == AVCaptureDevice.Position.back) {
                    backCameraDevice = device as? AVCaptureDevice
                }
            }
