private void Save()
        {
            string backupFileName;

            // Create backup files
            for (int i = 1; ; i++)
            {
                backupFileName = user.UserFilePath + ".bak." + i;
                if (File.Exists(backupFileName))
                {
                    continue;
                }
                break;
            }
            try
            {
                File.Copy(user.UserFilePath, backupFileName);
            }
            catch (Exception e)
            {
                MessageBox.Show(this, "Unable to create backup \"" + backupFileName + "\" of user file: " + e.Message + " Save aborted.", "Can't create backup", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            // General tab
            user.NumTimesAdventureModeCompleted = (int)numericUpDownNumTimesCompletedAdventureMode.Value;
            user.Level.Index = comboBoxAdventureModeLevel.SelectedIndex;
            user.Money       = (int)numericUpDownMoney.Value;
            for (int i = 0; i < miniGameTrophyCheckbox.Length; i++)
            {
                user.HasMinigameTrophy[i].Value = miniGameTrophyCheckbox[i].Checked;
            }
            for (int i = 0; i < vaseBreakerTrophyCheckbox.Length; i++)
            {
                user.HasVaseBreakerTrophy[i].Value = vaseBreakerTrophyCheckbox[i].Checked;
            }
            user.StreakLengthVaseBreakerEndless = (int)numericUpDownVaseBreakerEndless.Value;
            for (int i = 0; i < iZombieTrophyCheckbox.Length; i++)
            {
                user.HasIZombieTrophy[i].Value = iZombieTrophyCheckbox[i].Checked;
            }
            user.StreakLengthIZombieEndless = (int)numericUpDownIZombieEndless.Value;
            for (int i = 0; i < survivalNumericUpDown.Length; i++)
            {
                user.SurvivalModeFlags[i] = (int)survivalNumericUpDown[i].Value;
            }
            user.StreakLengthEndlessSurvival = (int)numericUpDownSurvivalEndless.Value;

            user.NumberSlots           = (int)numericUpDownNumSlots.Value;
            user.HasPoolCleaners.Value = checkBoxPoolCleaners.Checked;
            user.RakeUses = (uint)numericUpDownRake.Value;
            user.HasRoofCleaners.Value = checkBoxRoofCleaners.Checked;
            for (int i = 0; i < shopPlantCheckBox.Length; i++)
            {
                user.HasShopPlant[i].Value = shopPlantCheckBox[i].Checked;
            }
            user.HasWallNutFirstAid.Value = checkBoxWallNutFirstAid.Checked;

            user.MiniGamesUnlocked.Value  = checkBoxMiniGamesUnlocked.Checked;
            user.PuzzleModeUnlocked.Value = checkBoxPuzzleModeUnlocked.Checked;
            user.HasTaco.Value            = checkBoxHasTaco.Checked;

            // Achievements tab
            for (int i = 0; i < achievementCheckBox.Length; i++)
            {
                user.HasAchievement[i].Value = achievementCheckBox[i].Checked;
            }

            // Zen Garden tab
            user.TreeOfWisdomAvailable.Value = checkBoxTreeOfWisdomAvailable.Checked;
            user.TreeOfWisdomHeight          = (int)numericUpDownTreeOfWisdomHeight.Value;
            if (checkBoxPurchasedFood.Checked)
            {
                user.TreeFoodAmount = (int)numericUpDownTreeFood.Value;
            }
            else
            {
                user.TreeFoodAmount = null;
            }

            for (int i = 0; i < marigoldDateTimePicker.Length; i++)
            {
                if (marigoldNeverPurchasedCheckBox[i].Checked)
                {
                    user.MarigoldLastPurchased[i] = DateTime.MinValue;
                }
                else
                {
                    user.MarigoldLastPurchased[i] = marigoldDateTimePicker[i].Value;
                }
            }

            user.HasGoldenWateringCan.Value = checkBoxGoldenWateringCan.Checked;
            user.HasPhonograph.Value        = checkBoxPhonograph.Checked;
            user.HasGardeningGlove.Value    = checkBoxGardeningGlove.Checked;
            user.HasMushroomGarden.Value    = checkBoxMushroomGarden.Checked;
            user.HasAquariumGarden.Value    = checkBoxAquariumGarden.Checked;
            user.HasWheelbarrow.Value       = checkBoxWheelbarrow.Checked;

            if (checkBoxFertilizerNeverPurchased.Checked)
            {
                user.FertilizerAmount = null;
            }
            else
            {
                user.FertilizerAmount = (int)numericUpDownFertilizer.Value;
            }
            if (checkBoxBugSprayNeverPurchased.Checked)
            {
                user.BugSprayAmount = null;
            }
            else
            {
                user.BugSprayAmount = (int)numericUpDownBugSpray.Value;
            }

            if (!checkBoxStinkyPurchased.Checked)
            {
                user.StinkyLastAwokenTime = DateTime.MinValue;
            }
            else
            {
                user.StinkyLastAwokenTime = DateTime.Now.Subtract(TimeSpan.FromMinutes((double)numericUpDownLastAwoken.Value));
            }

            if (checkBoxNeverChocolate.Checked)
            {
                user.StinkyLastChocolateTime = DateTime.MinValue;
            }
            else
            {
                user.StinkyLastChocolateTime = DateTime.Now.Subtract(TimeSpan.FromMinutes((double)numericUpDownLastChocolate.Value));
            }

            user.StinkyXPosition = (int)numericUpDownStinkyX.Value;
            user.StinkyYPosition = (int)numericUpDownStinkyY.Value;

            try
            {
                user.Save();
            }
            catch (Exception e)
            {
                MessageBox.Show(this, "Unable to save to user file: " + e.Message, "Unable to save", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }