public ShellViewModel(
            ISystemService systemService,
            ISettingsViewController settingsViewController,
            GeneralSettingsViewModel generalSettingsVm,
            HotkeySettingsViewModel hotkeySettingsVm,
            CompositionContainer container,
            EventAggregator eventAggregator,
            ProcessMonitor processMonitor)
        {
            this.MainMenu = new ObservableCollection<IMenuItem>();
            this.container = container;

            generalSettingsVm.InitializeHotkeyCommandHandlers();

            this.hotkeySettingsVm = hotkeySettingsVm;
            this.hotkeySettingsVm.InitializeHotkeys();

            this.settingsViewController = settingsViewController;
            this.settingsViewController.Initialize();

            // Initialize the process monitor
            GW2PAO.Views.OverlayWindow.EventAggregator = eventAggregator;

            // Initialize shutdown handling
            Commands.ApplicationShutdownCommand.RegisterCommand(new DelegateCommand(this.Shutdown));

            // Start the game type monitor to monitor for player entering PvE/WvW
            this.processMonitor = processMonitor;
            this.processMonitor.Start();

            Properties.Settings.Default.PropertyChanged += (o, e) => this.OnPropertyChanged(() => this.IsOverlayMenuIconVisible);
            eventAggregator.GetEvent<GW2ProcessStarted>().Subscribe(o => this.OnPropertyChanged(() => this.IsOverlayMenuIconVisible));
            eventAggregator.GetEvent<GW2ProcessClosed>().Subscribe(o => this.OnPropertyChanged(() => this.IsOverlayMenuIconVisible));
            eventAggregator.GetEvent<GW2ProcessFocused>().Subscribe(o => this.OnPropertyChanged(() => this.IsOverlayMenuIconVisible));
            eventAggregator.GetEvent<GW2ProcessLostFocus>().Subscribe(o => this.OnPropertyChanged(() => this.IsOverlayMenuIconVisible));
        }