         }
     }
     
+    public func enable(extensionType: DKImageExtensionType) {
+        self.blacklist.remove(extensionType)
+    }
+    
+    public func disable(extensionType: DKImageExtensionType) {
+        self.blacklist.insert(extensionType)
+    }
+
     public func isExtensionTypeAvailable(_ extensionType: DKImageExtensionType) -> Bool {
-        return self.fetchExtensionClass(extensionType) != nil
+        return !self.blacklist.contains(extensionType) && self.fetchExtensionClass(extensionType) != nil
     }
     
     /// Registers an extension for the specified type.
-    @objc public class func registerExtension(extensionClass: DKImageBaseExtension.Type, for type: DKImageExtensionType) {
+    public class func registerExtension(extensionClass: DKImageBaseExtension.Type, for type: DKImageExtensionType) {
         DKImageExtensionController.extensions[type] = extensionClass
     }
     
-    @objc public class func unregisterExtension(for type: DKImageExtensionType) {
+    public class func unregisterExtension(for type: DKImageExtensionType) {
         DKImageExtensionController.extensions[type] = nil
     }
     

open class DKImageExtensionNone: DKImageBaseExtension {}

/// The class handles the loading of extensions.
@objc
public class DKImageExtensionController: NSObject {
    
    fileprivate static var defaultExtensions = [DKImageExtensionType : DKImageBaseExtension.Type]()
    fileprivate static var extensions = [DKImageExtensionType : DKImageBaseExtension.Type]()
    
    private var cache = [DKImageExtensionType : DKImageBaseExtension]()
    
    private static let checkDefaultExtensions: Void = {


@objc
public enum DKImageExtensionType: Int {
    case gallery, camera, inlineCamera, photoEditor
}

public protocol DKImageExtensionProtocol {
