                 self.image = placeholderImage
             }
             
-            let request = UIImageView.sharedImageDownloader().downloadImage(
+            let request = UIImageView.sharedImageDownloader.downloadImage(
                 URLRequest: URLRequest,
                 success: { [weak self] request, response, image in
                     if let strongSelf = self {

                            }
                        }
                        
                        UIImageView.sharedImageCache().cacheImage(image, forRequest: URLRequest)
                    }
                },
                failure: { [weak self] request, response, error in
                    if let strongSelf = self {
                        failure?(request, response, error)
                        strongSelf.activeTask = nil
                    }
                }
            )
            
            self.activeTask = request.task
        }
    }
    
    public func cancelImageRequest() {
        self.activeTask?.cancel()
    }
}

private var sharedImageDownloaderKey = "UIImageView.SharedImageDownloader"
private var sharedImageCacheKey = "UIImageView.SharedImageCache"
private var activeTaskKey = "UIImageView.ActiveTask"

        }
    }
    
    // MARK: Shared Class Properties
    
    public class var sharedImageCache: ImageCache {
        get {
            if let cache = objc_getAssociatedObject(self, &sharedImageCacheKey) as? ImageCache {
                return cache
            } else {
                struct Static { static let imageCache = ImageViewCache() }
                return Static.imageCache
            }
        }
        set(cache) {
            objc_setAssociatedObject(self, &sharedImageCacheKey, cache, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
        }
    }
    
    public class var sharedImageDownloader: ImageDownloader {
        get {
            if let downloader = objc_getAssociatedObject(self, &sharedImageDownloaderKey) as? ImageDownloader {
                return downloader
            } else {
                return ImageDownloader.defaultInstance
            }
        }
        set(downloader) {
            objc_setAssociatedObject(self, &sharedImageDownloaderKey, downloader, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
        }
    }
    
    // MARK: Private - Properties
    
    private var activeRequest: Request? {
        get {
            return objc_getAssociatedObject(self, &activeRequestKey) as? Request
        }
        set(request) {
            objc_setAssociatedObject(self, &activeRequestKey, request, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
        }
    }
    
    // MARK: Remote Image Methods
