     }
 }
 
-private let CaptureDeviceAuthorizationErrorDomain = "com.tworingsoft.can-i-haz.authorized-capture-device.error"
+private let CaptureDeviceAuthorizationErrorDomain = "com.tworingsoft.authorized-capture-device.error"
 
 private enum CaptureDeviceAuthorizationErrorCode: Int {
     case denied
 }
 
-typealias CaptureDeviceAuthorizationResult = (captureDevice: AVCaptureDevice?, authorizationError: NSError?)
-typealias CaptureDeviceAuthorizationCompletionBlock = ((CaptureDeviceAuthorizationResult) -> Void)
+public typealias CaptureDeviceAuthorizationResult = (captureDevice: AVCaptureDevice?, authorizationError: NSError?)
+public typealias CaptureDeviceAuthorizationCompletionBlock = ((CaptureDeviceAuthorizationResult) -> Void)
 
-final class AuthorizedAVCaptureDevice: NSObject {
+public final class AuthorizedAVCaptureDevice: NSObject {
 
-    class func authorizedCaptureDevice(_ mediaType: MediaType, completion: CaptureDeviceAuthorizationCompletionBlock?) {
+    public class func authorizedCaptureDevice(_ mediaType: MediaType, completion: CaptureDeviceAuthorizationCompletionBlock?) {
 
         #if (arch(i386) || arch(x86_64)) && os(iOS)
             completion?((nil, NSError(domain: CaptureDeviceAuthorizationErrorDomain, code: CaptureDeviceAuthorizationErrorCode.denied.rawValue, userInfo: [NSLocalizedDescriptionKey: "Capture device not available on iOS Simulator."])))
             return
         #endif
 
+        if currentlyAuthorized(forMediaType: mediaType) {
+            completion?(createCaptureDevice(mediaType))
+            return
+        }
+
+        checkRequiredPlistValues()
+        requestAccess(mediaType: mediaType, completion: completion)
+    }
+
+}
+
+fileprivate extension AuthorizedAVCaptureDevice {
+
+    class func currentlyAuthorized(forMediaType mediaType: MediaType) -> Bool {
         var authorized = false
         switch(AVCaptureDevice.authorizationStatus(for: mediaType.stringConstant())) {
         case .authorized:

        }
    }

    fileprivate class func createCaptureDevice(_ mediaType: MediaType) -> CaptureDeviceAuthorizationResult {
        let captureDevice = AVCaptureDevice.default(for: mediaType.stringConstant())
        return (captureDevice: captureDevice, authorizationError: nil)
    }

        }
    }

    class func checkRequiredPlistValues() {
        let requiredPlistKey = "NSCameraUsageDescription"

        guard let infoDictionary = Bundle.main.infoDictionary else {
