     /// Defaults to enabled, set to false when you don't want to use CallKit.
     @objc public static var enabled: Bool = true {
         didSet {
-            provider.invalidate()
+            if callKitProvider == nil {
+                provider.invalidate()
+            }
+            
             if enabled {
-                guard isProviderConfigured() else  { return; }
-                provider = CXProvider(configuration: providerConfiguration!)
+                guard isProviderConfigured() else  { return }
+                if callKitProvider == nil {
+                    defaultProvider = CXProvider(configuration: providerConfiguration!)
+                }
+                
                 provider.setDelegate(emitter, queue: nil)
             } else {
                 provider.setDelegate(nil, queue: nil)

            provider.setDelegate(emitter, queue: nil)
        }
    }

    private static let callController: CXCallController = {
        return CXCallController()
    }()

    private static let emitter: JMCallKitEmitter = {

    private override init() {}

    // MARK: - CallKit proxy
    
    public static var callKitProvider: CXProviderProtocol?
    public static var callKitCallController: CXCallControllerProtocol?

    private static var provider: CXProviderProtocol {
        callKitProvider ?? defaultProvider
    }
    
    private static var callController: CXCallControllerProtocol {
        callKitCallController ?? defaultCallController
    }

    private static var providerConfiguration: CXProviderConfiguration? {
        didSet {
