         resultHandler: T? -> ())
         -> ImageRequestID
     {
+        if let previewImage = previewImage where options.deliveryMode == .Progressive {
+            if NSThread.isMainThread() {    // нужно вернуть результат как можно быстрее
+                resultHandler(T(CGImage: previewImage))
+            } else {
+                dispatch_async(dispatch_get_main_queue()) {
+                    resultHandler(T(CGImage: previewImage))
+                }
+            }
+        }
+        
         switch options.size {
         case .FullResolution:
             return requestFullResolutionImage(deliveryMode: options.deliveryMode, resultHandler: resultHandler)

        resultHandler: T? -> ())
        -> ImageRequestID
    {
        if let previewImageWrapper = previewImage?.value where deliveryMode == .Progressive {
            dispatch_async(dispatch_get_main_queue()) {
                resultHandler(T(CGImage: previewImageWrapper.image))
            }
        }
        
        dispatch_async(UrlImageSource.processingQueue) { [url] in
            
            let source = CGImageSourceCreateWithURL(url, nil)
            

        resultHandler: T? -> ())
        -> ImageRequestID
    {
        UrlImageSource.processingQueue.addOperationWithBlock { [url] in
            
            let source = CGImageSourceCreateWithURL(url, nil)
            
