                     nb += 1
                 }
 
+                let progressionState=Progression()
+                progressionState.totalTaskCount=Int(nb)
+                progressionState.currentTaskIndex=0
+                progressionState.externalIdentifier=externalId
+                progressionState.message=""
+
+
                 let _ = try? FileManager.default.removeItem(atPath: folderPath)
                 let _ = try? FileManager.default.createDirectory(atPath: folderPath, withIntermediateDirectories: true, attributes: nil)
 

                if let writeFileHande = FileHandle(forWritingAtPath:destinationFilePath ){
                    writeFileHande.seek(toFileOffset: 0)

                    for source in paths{
                        try autoreleasepool(invoking: { () -> Void in
                            let url=URL(fileURLWithPath: source)

    ///   - chunkMaxSize: the max size for a chunk / future block
    ///   - compress: should we compress (using LZ4)
    ///   - encrypt: should we encrypt (using AES256)
    ///   - externalId: this identifier allow to map the progression
    ///   - progression: progress closure called on each discreet progression.
    ///   - success: the success closure returns a Chunk Struct to be used to create/update Block instances
    ///   - failure: the failure closure
    public func breakIntoChunk(  fileAt path:String,
                                 destination folderPath:String,
                                 chunkMaxSize:Int=10*MB,
                                 compress:Bool,
                                 encrypt:Bool,
                                 externalId:String=Default.NO_UID,
                                 progression:@escaping((Progression)->()),
                                 success:@escaping ([Chunk])->(),
                                 failure:@escaping (String)->()){


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