         
         // MARK: --- life cycle
         
-        init(retry needRetry: Bool, maxRetryCount maxCount: UInt, step s: TimeInterval) {
+        init(retry needRetry: Bool, maxRetryCount maxCount: UInt, step s: TimeInterval, fusingDepth: UInt, fusingDuration: TimeInterval) {
             retry = needRetry
             maxRetryCount = maxCount
             step = s
             retrying = false
-            printNotice("Object.Retry init. retry:\(retry), maxRetryCount:\(maxRetryCount), step:\(step), retrying:\(retrying)")
+            
+            fusing = RetryQueue(depth: fusingDepth, duration: fusingDuration)
+            printNotice("Object.Retry init. retry:\(retry), maxRetryCount:\(maxRetryCount), step:\(step), retrying:\(retrying), fusingDepth: \(fusingDepth), fusingDuration: \(fusingDuration)")
         }
         
         deinit {

            retrying = false
        }
        
        // MARK: --- private
        
        private func doRetry(_ block: @escaping () -> Void) {
            timer?.invalidate()
            timer = nil
            
            if retry && retriedCount < maxRetryCount {
                retrying = true
                
                let delay = calcDelay(retried: retriedCount, step: step)
                timer = Timer.after(delay) { [weak self] in
                    block()
                    self?.retriedCount += 1
                    printNotice("Object.Retry retriedCount:\(String(describing: self?.retriedCount))")
                    self?.doRetry(block)
                }
            } else {
                retrying = false
                printError("Object.Retry interrupt retrying!")
            }
        }
        

        
        // MARK: --- public methods
        
        func start(success: @escaping () -> Void, failure: @escaping (Error) -> Void) {
            guard retrying == false else {
                printWarning("Object.Retry don't retry")
                return
            }
            
            printNotice("Object.Retry start")
            
            doRetry(success: success, failure: failure)
        }
        
        func reset() {
