 
     struct ProgressReporter {
 
-        let downloadTask: NSURLSessionDownloadTask
+        let downloadTasks: [NSURLSessionDownloadTask]
 
         typealias ReportAction = Double -> Void
-
         let reportProgressAction: ReportAction?
 
-        let finishedAction: NSData -> Void
-    }
+        typealias FinishedAction = NSData -> Void
+        let finishedActions: [FinishedAction]
+
+        //let progress: NSProgress = NSProgress(totalUnitCount: -1)
+        var progress: [NSProgress]
+    }
+
 
     var progressReporters = [ProgressReporter]()
 

                    if let message = messageWithMessageID(messageID, inRealm: realm) {

                        if message.downloadState != MessageDownloadState.Downloaded.rawValue {

                            switch mediaType {



extension YepDownloader: NSURLSessionDownloadDelegate {

//    private func reportProgress(progress: Double, ofDownloadTask downloadTask: NSURLSessionDownloadTask) {
//        //progressReporters.filter({ $0.downloadTask == downloadTask }).map({ $0.reportProgressAction?(progress) })
//    }

    private func handleData(data: NSData, ofDownloadTask downloadTask: NSURLSessionDownloadTask) {
        //progressReporters.filter({ $0.downloadTask == downloadTask }).map({ $0.finishedAction(data) })

        for progressReporter in progressReporters {

            for i in 0..<progressReporter.downloadTasks.count {
                if downloadTask == progressReporter.downloadTasks[i] {
                    let finishedAction = progressReporter.finishedActions[i]
                    finishedAction(data)

                    println("finish data of \(downloadTask)")

                    break
                }
            }
        }
    }

    func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
