 private var dataTaskResponseBufferKey = 0
 private var dataTaskCompletionHandlerKey = 0
 
-extension NSURLSessionTask {
-    public override class func initialize() {
-        let dataTask = NSURLSession.sharedSession().dataTaskWithRequest(NSURLRequest())
-        let downloadTask = NSURLSession.sharedSession().downloadTaskWithRequest(NSURLRequest())
-        let uploadTask = NSURLSession.sharedSession().uploadTaskWithRequest(NSURLRequest(), fromData: NSData())
-        
-        // On iOS 7 and Mac OS 10.9, `(dataTask as AnyObject) is NSURLSessionTask` returns false
-        if !((dataTask as AnyObject) is NSURLSessionTask) {
-            func bindClass(concreteClass: AnyClass, withClass abstractClass: AnyClass) {
-                let method = class_getInstanceMethod(concreteClass, "isKindOfClass:")
-                let block: @objc_block (AnyObject, AnyClass) -> Bool = { object, targetClass in
-                    return (
-                        object.dynamicType.isSubclassOfClass(targetClass) ||
-                        targetClass === NSURLSessionTask.self ||
-                        targetClass === abstractClass
-                    )
-                }
-                
-                let implementation = imp_implementationWithBlock(unsafeBitCast(block, AnyObject.self))
-                method_setImplementation(method, implementation)
-            }
-            
-            bindClass(dataTask.dynamicType, withClass: NSURLSessionDataTask.self)
-            bindClass(downloadTask.dynamicType, withClass: NSURLSessionDownloadTask.self)
-            bindClass(uploadTask.dynamicType, withClass: NSURLSessionUploadTask.self)
-        }
-    }
-
+private extension NSURLSessionDataTask {
     // `var request: Request?` is not available in both of Swift 1.1 and 1.2
     // ("protocol can only be used as a generic constraint")
     private var request: Any? {

                objc_setAssociatedObject(self, &dataTaskCompletionHandlerKey, Box(value), UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
            } else {
                objc_setAssociatedObject(self, &dataTaskCompletionHandlerKey, nil, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
            }
        }
    }

            }
        }
    }
    
    private var responseBuffer: NSMutableData {
        if let responseBuffer = objc_getAssociatedObject(self, &dataTaskResponseBufferKey) as? NSMutableData {
            return responseBuffer
