 
 extension Session {
   struct Model {
-    enum FetchInterval {
-        case minimum
-        case some(TimeInterval)
-        case never
-    }
-    struct BackgroundTask {
-        let name: String
-        let expiration: ((Void) -> Void)?
-    }
-    struct ActionInternal {
-      let action: Selector
-      let target: Any?
-      let sender: Any?
-      let event: UIEvent?
-    }
     var isIgnoringUserEvents: Bool
     var isIdleTimerDisabled: Bool
     var openingURL: URL?
     var sendingEvent: UIEvent?
-    var sendingAction: ActionInternal?
+    var sendingAction: TargetAction?
     var isNetworkActivityIndicatorVisible: Bool
     var iconBadgeNumber: Int
     var supportsShakeToEdit: Bool

    var isReceivingRemoteControlEvents: Bool
    var newsStandIconImage: UIImage?
    var shortcutItems: [UIApplicationShortcutItem]
    
    var shouldSaveApplicationState: Bool
    var shouldRestoreApplicationState: Bool
    var shouldNotifyUserActivitiesWithTypes: [String]

    var supportedInterfaceOrientations: [UIWindow: UIInterfaceOrientationMask]
    var restorationViewControllers: [String: UIViewController]
    
    enum FetchInterval {
      case minimum
      case some(TimeInterval)
      case never
    }
    struct BackgroundTask {
      let name: String
      let expiration: ((Void) -> Void)?
    }
    struct TargetAction {
      let action: Selector
      let target: Any?
      let sender: Any?
      let event: UIEvent?
    }
    enum State {
      enum External {
        enum Query {
