private void DetachEvents()
        {
            TimerRegistry.Close();

            Sandbox.Game.MyVisualScriptLogicProvider.PlayerConnected    = null;
            Sandbox.Game.MyVisualScriptLogicProvider.PlayerDropped      = null;
            Sandbox.Game.MyVisualScriptLogicProvider.PlayerDisconnected = null;

            // servers: listen and dedicated, MP
            if (ServerCfg != null)
            {
                MyAPIGateway.Multiplayer.UnregisterMessageHandler(ConnectionHelper.ConnectionId, MessageHandler);
                ProtectionHandler.Close();
                Logger.Debug("Unregistered MessageHandler");
            }

            if (MyAPIGateway.Utilities != null && MyAPIGateway.Multiplayer != null && MyAPIGateway.Multiplayer.IsServer && MyAPIGateway.Utilities.IsDedicated)
            {
                return;
            }

            if (MyAPIGateway.Multiplayer != null && MyAPIGateway.Multiplayer.MultiplayerActive || (ServerCfg != null && ServerConfig.ServerIsClient))
            {
                // all clients, including hosts, MP
                if (PermissionRequestTimer != null)
                {
                    PermissionRequestTimer.Stop();
                    PermissionRequestTimer.Close();
                }
                MyAPIGateway.Session.OnSessionReady -= Session_OnSessionReady;
                Logger.Debug("Detached Session_OnSessionReady");

                // only clients, not the host
                if (ServerCfg == null)
                {
                    MyAPIGateway.Multiplayer.UnregisterMessageHandler(ConnectionHelper.ConnectionId, MessageHandler);
                    Logger.Debug("Unregistered MessageHandler");
                }
            }

            if (MyAPIGateway.Utilities != null)
            {
                MyAPIGateway.Utilities.MessageEntered -= Utilities_MessageEntered;
                Logger.Debug("Detached MessageEntered");
            }
        }