     }
 }
 
-public enum TaskEvent: String, StateEventType, Printable
+internal enum _TaskEvent: String, StateEventType, Printable
 {
     case Pause = "Pause"
     case Resume = "Resume"
     case Progress = "Progress"
     case Fulfill = "Fulfill"
     case Reject = "Reject"      // also used in cancellation for simplicity
+    
+    //
+    // Private events to temporarily switch states (no event handlers)
+    // without invoking `configure.resume()`,
+    // i.e.
+    //
+    // `.Paused` (paused-init)
+    // => `.Running` (only while invoking `_performInitClosure()`)
+    // => `.Paused` (switch back)
+    //
+    // and finally by sending regular `.Resume` event:
+    //
+    // => `.Running` (again, but this time `configure.resume()` will be invoked)
+    //
+    case _InitResume = "_InitResume"
+    case _InitPause = "_InitPause"
+    
     case Any = "Any"
     
-    public init(nilLiteral: Void)
+    internal init(nilLiteral: Void)
     {
         self = Any
     }
     
-    public var description: String
+    internal var description: String
     {
         return self.rawValue
     }

        
        // setup state machine
        self.machine = Machine(state: initialState) {
            
            $0.addRouteEvent(.Pause, transitions: [.Running => .Paused])
            $0.addRouteEvent(.Resume, transitions: [.Paused => .Running])

    
    public func resume() -> Bool
    {
        //
        // Always try `_performInitClosure` only once on `resume()`
        // even when `.Pause => .Resume` transition fails, e.g. already been fulfilled/rejected.
        //
        // NOTE:
        // **`downstream._performInitClosure` should be invoked first before `downstream.machine <-! .Resume`**
        // to add upstream's progress/fulfill/reject handlers inside `downstream.initClosure()` 
        // before their actual calls, which often happens 
        // when downstream's `resume()` is configured to call upstream's `resume()`
        // which eventually calls `upstream._performInitClosure` and thus actual event handlers.
        //
        if (self._performInitClosure != nil) {
            
            let isPaused = self.machine.state == .Paused
            
            //
            // Temporarily switch to `.Running` without invoking `configure.resume()`.
            // This allows paused-inited-task to safely call progress/fulfill/reject handlers
            // inside its `initClosure` *immediately*.
            //
            if isPaused {
                self.machine <-! ._InitResume
            }
            
            self._performInitClosure?()
            self._performInitClosure = nil
            
            if isPaused {
                self.machine <-! ._InitPause    // switch back
            }
        }
        
        return self.machine <-! .Resume
    }
