 public typealias SystemViewControllerLevel = Int
 public let SystemViewControllerLevelTop = Int.max
 
-/// Each System view controller should conform to this protocolc
-public protocol SystemViewController {
-  /// Level at which view controller should appear
-  var viewControllerLevel: SystemViewControllerLevel { get }
-}
-
 /// Use to place a System view controller above everthing else in app, even status bar and notifications.
 ///
 /// An example of such System view controller is `Update Required` screen.
-public final class SystemWindowController {
+@objc
+public final class SystemWindowController: NSObject {
   /// Private init so that we can only have one `SystemWindowController`. Use SystemWindowController constant
   private let windowLevel: UIWindowLevel
   public init(windowLevel: UIWindowLevel) {

  }
  
  /// Dismiss `viewController`
  func dismissSystemViewController<T: UIViewController where T: SystemViewController>(viewController: T) {
    if viewController.modalPresentationStyle == .FullScreen {
      viewController.willMoveToParentViewController(nil)
      removeView(viewController.view)

   
   - parameter viewController: a view controller to present
   */
  public func showSystemViewController(viewController: UIViewController, atLevel level: SystemViewControllerLevel) {
    if !window.keyWindow { showSystemWindow() }
    
    self.viewController.showSystemViewController(viewController, atLevel: level)
  }
  
  /**
