     public var dataLoader: ImageDataLoading
     public var decoder: ImageDecoding
     public var maxConcurrentTaskCount = 8
+    public var decodingQueue = NSOperationQueue(maxConcurrentOperationCount: 1)
+    public var processingQueue = NSOperationQueue(maxConcurrentOperationCount: 2)
+    
     public init(dataLoader: ImageDataLoading, decoder: ImageDecoding = ImageDecoder()) {
         self.dataLoader = dataLoader
         self.decoder = decoder

    
    private func sessionTask(sessionTask: ImageSessionTask, didCompleteWithData data: NSData?, error: ErrorType?) {
        if let data = data {
            self.decodingQueue.addOperationWithBlock { [weak self] in
                let image = self?.configuration.decoder.imageWithData(data)
                self?.sessionTask(sessionTask, didCompleteWithImage: image, error: error)
            }

                let processedImage = processor.processImage(image)
                self?.imageTask(imageTask, didCompleteWithImage: processedImage, error: error)
            }
            self.configuration.processingQueue.addOperation(operation)
            self.executingTasks[imageTask] = ImageLoadState.Processing(operation)
        } else {
            self.imageTask(imageTask, didCompleteWithImage: image, error: error)
