protected virtual void Load(OldSaveableData o)
            {
                Penalties        = o.Penalties ?? true;
                JumpStartPenalty = o.JumpStartPenalty ?? Game.JumpStartPenaltyType.None;
                LapsNumber       = o.LapsNumber ?? 2;

                try {
                    RaceGridViewModel.LoadingFromOutside = true;
                    switch (o.GridTypeId)
                    {
                    case "same_car":
                        RaceGridViewModel.Mode        = BuiltInGridMode.SameCar;
                        RaceGridViewModel.FilterValue = null;
                        break;

                    case "same_group":
                        RaceGridViewModel.Mode        = BuiltInGridMode.CandidatesSameGroup;
                        RaceGridViewModel.FilterValue = null;
                        break;

                    case "manual":
                        RaceGridViewModel.Mode        = BuiltInGridMode.CandidatesManual;
                        RaceGridViewModel.FilterValue = null;
                        RaceGridViewModel.NonfilteredList.ReplaceEverythingBy(
                            o.ManualList?.Select(x => CarsManager.Instance.GetById(x)).NonNull().Select(x => new RaceGridEntry(x)) ??
                            new RaceGridEntry[0]);
                        break;

                    case "filtered_by_":
                        RaceGridViewModel.Mode        = BuiltInGridMode.CandidatesFiltered;
                        RaceGridViewModel.FilterValue = o.OpponentsCarsFilter;
                        break;

                    default:
                        RaceGridViewModel.Mode = RaceGridViewModel.Modes.GetByIdOrDefault <IRaceGridMode>(o.GridTypeId) ??
                                                 BuiltInGridMode.SameCar;
                        RaceGridViewModel.FilterValue = o.OpponentsCarsFilter;
                        break;
                    }

                    RaceGridViewModel.ShuffleCandidates     = true;
                    RaceGridViewModel.AiLevelFixed          = o.AiLevelFixed ?? true;
                    RaceGridViewModel.AiLevelArrangeRandom  = o.AiLevelArrangeRandomly.HasValue ? (o.AiLevelArrangeRandomly.Value ? 1d : 0d) : 0.2;
                    RaceGridViewModel.AiLevelArrangeReverse = o.AiLevelArrangeReverse ?? true;
                    RaceGridViewModel.AiLevel          = o.AiLevel ?? 92;
                    RaceGridViewModel.AiLevelMin       = o.AiLevelMin ?? 92;
                    RaceGridViewModel.OpponentsNumber  = o.OpponentsNumber ?? 3;
                    RaceGridViewModel.StartingPosition = o.StartingPosition ?? 4;
                    RaceGridViewModel.FinishLoading();
                } finally {
                    RaceGridViewModel.LoadingFromOutside = false;
                }
            }
            protected virtual void Load(OldSaveableData o) {
                Penalties = o.Penalties ?? true;
                JumpStartPenalty = o.JumpStartPenalty ?? Game.JumpStartPenaltyType.None;
                LapsNumber = o.LapsNumber ?? 2;

                try {
                    RaceGridViewModel.ExternalIsLoading = true;
                    switch (o.GridTypeId) {
                        case "same_car":
                            RaceGridViewModel.Mode = BuiltInGridMode.SameCar;
                            RaceGridViewModel.FilterValue = null;
                            break;

                        case "same_group":
                            RaceGridViewModel.Mode = BuiltInGridMode.CandidatesSameGroup;
                            RaceGridViewModel.FilterValue = null;
                            break;

                        case "manual":
                            RaceGridViewModel.Mode = BuiltInGridMode.CandidatesManual;
                            RaceGridViewModel.FilterValue = null;
                            RaceGridViewModel.NonfilteredList.ReplaceEverythingBy(
                                    o.ManualList?.Select(x => CarsManager.Instance.GetById(x)).NonNull().Select(x => new RaceGridEntry(x)) ??
                                            new RaceGridEntry[0]);
                            break;

                        case "filtered_by_":
                            RaceGridViewModel.Mode = BuiltInGridMode.CandidatesFiltered;
                            RaceGridViewModel.FilterValue = o.OpponentsCarsFilter;
                            break;

                        default:
                            RaceGridViewModel.Mode = RaceGridViewModel.Modes.GetByIdOrDefault<IRaceGridMode>(o.GridTypeId) ??
                                    BuiltInGridMode.SameCar;
                            RaceGridViewModel.FilterValue = o.OpponentsCarsFilter;
                            break;
                    }

                    RaceGridViewModel.ShuffleCandidates = true;
                    RaceGridViewModel.AiLevelFixed = o.AiLevelFixed ?? true;
                    RaceGridViewModel.AiLevelArrangeRandom = o.AiLevelArrangeRandomly.HasValue ? (o.AiLevelArrangeRandomly.Value ? 1d : 0d) : 0.2;
                    RaceGridViewModel.AiLevelArrangeReverse = o.AiLevelArrangeReverse ?? true;
                    RaceGridViewModel.AiLevel = o.AiLevel ?? 92;
                    RaceGridViewModel.AiLevelMin = o.AiLevelMin ?? 92;
                    RaceGridViewModel.OpponentsNumber = o.OpponentsNumber ?? 3;
                    RaceGridViewModel.StartingPosition = o.StartingPosition ?? 4;
                    RaceGridViewModel.FinishLoading();
                } finally {
                    RaceGridViewModel.ExternalIsLoading = false;
                }
            }