     }
 }
 
-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])

    internal typealias _RejectHandler = (ErrorInfo) -> Void
    internal typealias _InitClosure = (machine: Machine, progress: ProgressHandler, fulfill: FulFillHandler, _reject: _RejectHandler, configure: TaskConfiguration) -> Void
    
    internal typealias Machine = StateMachine<TaskState, _TaskEvent>
    
    private var machine: Machine!
    
