                     chunks.append(chunk)
                     let url=URL(fileURLWithPath: destination)
                     let _ = try data.write(to:url )
+                    Async.main{
+                        counter += 1
+                        progressionState.message=chunkRelativePath
+                        progressionState.currentTaskIndex=counter
+                        progressionState.currentPercentProgress=Double(counter)*Double(100)/Double(progressionState.totalTaskCount)
+                        // Relay the progression
+                        progression(progressionState)
+                    }
                 }
 
                 do {

                                data = try data.decompress(algorithm: .lz4)
                            }
                            writeFileHande.write(data)
                        })
                    }
                    Async.main{

    /// Joins the chunks to form a file
    /// - The hard stuff is done Asynchronously on a the Utility queue
    /// - we use an Autorelease pool to lower the memory foot print
    /// - closures are called on the Main thread
    ///
    /// - Parameters:
    ///   - paths: the chunks absolute paths
    ///   - destinationFilePath: the joined file destination
    ///   - decompress: should we decompress using LZ4
    ///   - decrypt: should we decrypt usign AES256
    ///   - externalId: this identifier allow to map the progression
    ///   - progression: progress closure called on each discreet progression.
    ///   - success: the success closure
    ///   - failure: the failure closure
    public func joinChunks (   from paths:[String],
                               to destinationFilePath:String,
                               decompress:Bool,
                               decrypt:Bool,
                               externalId:String=Default.NO_UID,
                               progression:@escaping((Progression)->()),
                               success:@escaping ()->(),
                               failure:@escaping (String)->()){

        // Don't block the main thread with those intensive IO  processing
        Async.utility {
            do{

                let folderPath=(destinationFilePath as NSString).deletingLastPathComponent
