   /// A map from viewController's view hash to it's level
   private var viewHashToLevelMap: [Hash: SystemViewControllerLevel] = [:]
   private var onEmptyViewControllers: (() -> ())!
+  private var statusBarState: StatusBarState? {
+    didSet {
+      setNeedsStatusBarAppearanceUpdate()
+    }
+  }
   
   /// Present `viewController` taking into account it's level
-  func showSystemViewController(viewController: UIViewController, atLevel level: SystemViewControllerLevel) {
+  func showSystemViewController(viewController: UIViewController,
+                                atLevel level: SystemViewControllerLevel,
+                                        statusBarState: StatusBarState) {
+    self.statusBarState = statusBarState
+    
     if viewController.modalPresentationStyle == .FullScreen {
       addChildViewController(viewController)
       insertView(viewController.view, atLevel: level)

  public func showSystemViewController(viewController: UIViewController, atLevel level: SystemViewControllerLevel) {
    if !window.keyWindow { showSystemWindow() }
    
    self.viewController.showSystemViewController(viewController, atLevel: level)
  }
  
  /**

    super.viewDidLoad()
    view.backgroundColor = UIColor.clearColor()
  }
  
  private override func prefersStatusBarHidden() -> Bool {
    return statusBarState?.hidden ?? false
  }
}

private extension SequenceType {
