     
     typealias onCompleteHandler = (resp : Response, error: NSError?) -> Void
     typealias onBeginHandler = () -> Void
-    typealias onProcessHandler = (progress: Progress, error: NSError?) -> Void
+    typealias onProcessHandler = (progress: Progress) -> Void
+    typealias onDownloadCompleteHandler = (url: NSURL) -> Void
     
     private var completeHandler: onCompleteHandler? = nil
     private var beginHandler: onBeginHandler? = nil
     private var processHandler: onProcessHandler? = nil
+    private var downloadHandler: onDownloadCompleteHandler? = nil
     private let session: Session
     
     private var resumeData: NSData? = nil

        return handler
    }
    
    private func waitForComplete() {
        if OSAtomicCompareAndSwap32(1, 1, &self.completed) {
            return

        }
    }
    
    public func onDownloadComplete(downloadHandler: ((url: NSURL) -> Void)) {
        if !self.ticked {
            self.downloadHandler = downloadHandler
        } else {
            self.condition.lock()
            self.downloadHandler = downloadHandler
            self.condition.unlock()
        }
    }
    
    /// Tick to get response
    public func tick(completeHandler: ((resp : Response, error: NSError?) -> Void)? = nil) -> Response {
        if let completeHandler = completeHandler {
