 This class uses multiple dependencies provided in its configuration. Image data is loaded using an object conforming to `ImageDataLoading` protocol. Image data is decoded via `ImageDecoding` protocol. Decoded images are processed by objects conforming to `ImageProcessing` protocols.
 
 - Provides transparent loading, decoding and processing with a single completion signal
-- Reuses data tasks for equivalent image tasks
+- Reuses session tasks for equivalent request
 */
 public class ImageLoader: ImageLoading {
     public weak var manager: ImageLoadingManager?
+
+    /// The configuration that the receiver was initialized with.
     public let configuration: ImageLoaderConfiguration
     
-    /** Delegate that the receiver was initialized with. Image loader holds a strong reference to its delegate!
-     */
+    /// Delegate that the receiver was initialized with. Image loader holds a strong reference to its delegate!
     public let delegate: ImageLoaderDelegate
     
     private var loadStates = [ImageTask : ImageLoadState]()
-    private var dataTasks = [ImageRequestKey : ImageDataTask]()
+    private var dataTasks = [ImageRequestKey : DataTask]()
     private let taskQueue = TaskQueue()
     private let queue = dispatch_queue_create("ImageLoader.Queue", DISPATCH_QUEUE_SERIAL)
     private var reuseTasks: Bool {

                    // Underlying data task is cancelled when there are no outstanding tasks (executing or suspended) registered with it.
                    dataTask.executingTasks.remove(task)
                    dataTask.suspendedTasks.remove(task)
                    if dataTask.tasks.isEmpty {
                        self.taskQueue.cancel(dataTask.URLSessionTask)
                    }
                case .Processing(let operation):

            })
        #if !os(OSX)
            if let priority = request.priority {
                dataTask.URLSessionTask.priority = priority
            }
        #endif
        return dataTask
    }
    
    private func dataTask(dataTask: DataTask, didUpdateProgress progress: ImageTaskProgress) {
        dispatch_async(self.queue) {
            dataTask.progress = progress
            for task in dataTask.allTasks {
                self.manager?.loader(self, task: task, didUpdateProgress: dataTask.progress)
            }
        }
    }
    
    private func dataTask(dataTask: DataTask, didCompleteWithData data: NSData?, response: NSURLResponse?, error: ErrorType?) {
        dispatch_async(self.queue) {
            // Mark task as finished when NSURLSessionTask is actually completed/cancelled by NSURLSession
            self.taskQueue.finish(dataTask.URLSessionTask)
