public static SyncModSettings Load()
        {
            var             world    = false;
            SyncModSettings settings = null;

            try
            {
                if (MyAPIGateway.Utilities.FileExistsInWorldStorage("ModSettings.xml", typeof(SyncModSettings)))
                {
                    world = true;
                    using (var reader = MyAPIGateway.Utilities.ReadFileInWorldStorage("ModSettings.xml", typeof(SyncModSettings)))
                    {
                        settings = MyAPIGateway.Utilities.SerializeFromXML <SyncModSettings>(reader.ReadToEnd());
                        Mod.Log.Write(Logging.Level.Info, "NanobotBuildAndRepairSystemSettings: Loaded from world file.");
                    }
                }
                else if (MyAPIGateway.Utilities.FileExistsInLocalStorage("ModSettings.xml", typeof(SyncModSettings)))
                {
                    using (var reader = MyAPIGateway.Utilities.ReadFileInLocalStorage("ModSettings.xml", typeof(SyncModSettings)))
                    {
                        settings = MyAPIGateway.Utilities.SerializeFromXML <SyncModSettings>(reader.ReadToEnd());
                        Mod.Log.Write(Logging.Level.Info, "NanobotBuildAndRepairSystemSettings: Loaded from local storage.");

                        Save(settings, true);
                    }
                }

                if (settings != null)
                {
                    var adjusted = false;
                    if (settings.Version < CurrentSettingsVersion)
                    {
                        Mod.Log.Write(Logging.Level.Info, "NanobotBuildAndRepairSystemSettings: Settings have old version: {0} update to {1}", settings.Version, CurrentSettingsVersion);
                        switch (settings.Version)
                        {
                        case 0:
                            settings.LogLevel = Logging.Level.Error;
                            break;
                        }

                        if (settings.Welder.AllowedSearchModes == 0)
                        {
                            settings.Welder.AllowedSearchModes = SearchModes.Grids | SearchModes.BoundingBox;
                        }
                        if (settings.Welder.AllowedWorkModes == 0)
                        {
                            settings.Welder.AllowedWorkModes = WorkModes.WeldBeforeGrind | WorkModes.GrindBeforeWeld | WorkModes.GrindIfWeldGetStuck;
                        }
                        if (settings.Welder.WeldingMultiplier == 0)
                        {
                            settings.Welder.WeldingMultiplier = 1;
                        }
                        if (settings.Welder.GrindingMultiplier == 0)
                        {
                            settings.Welder.GrindingMultiplier = 1;
                        }

                        adjusted         = true;
                        settings.Version = CurrentSettingsVersion;
                    }
                    if (settings.Range > NanobotBuildAndRepairSystemBlock.WELDER_RANGE_MAX_IN_M)
                    {
                        settings.Range = NanobotBuildAndRepairSystemBlock.WELDER_RANGE_MAX_IN_M;
                        adjusted       = true;
                    }
                    else if (settings.Range < NanobotBuildAndRepairSystemBlock.WELDER_RANGE_MIN_IN_M)
                    {
                        settings.Range = NanobotBuildAndRepairSystemBlock.WELDER_RANGE_MIN_IN_M;
                        adjusted       = true;
                    }

                    if (settings.Welder.WeldingMultiplier < NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MIN)
                    {
                        settings.Welder.WeldingMultiplier = NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MIN;
                        adjusted = true;
                    }
                    else if (settings.Welder.WeldingMultiplier >= NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MAX)
                    {
                        settings.Welder.WeldingMultiplier = NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MAX;
                        adjusted = true;
                    }

                    if (settings.Welder.GrindingMultiplier < NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MIN)
                    {
                        settings.Welder.GrindingMultiplier = NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MIN;
                        adjusted = true;
                    }
                    else if (settings.Welder.GrindingMultiplier >= NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MAX)
                    {
                        settings.Welder.GrindingMultiplier = NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MAX;
                        adjusted = true;
                    }

                    Mod.Log.Write(Logging.Level.Info, "NanobotBuildAndRepairSystemSettings: Settings {0} {1} ", settings.Welder.GrindingMultiplier, settings);
                    if (adjusted)
                    {
                        Save(settings, world);
                    }
                }
                else
                {
                    settings = new SyncModSettings()
                    {
                        Version = CurrentSettingsVersion
                    };
                    Save(settings, world);
                }
            }
            catch (Exception ex)
            {
                Mod.Log.Write(Logging.Level.Error, "NanobotBuildAndRepairSystemSettings: Exception while loading: {0}", ex);
            }

            return(settings);
        }