public async void Save()
        {
            try
            {
                string name = Name.Trim();
                if (string.IsNullOrWhiteSpace(name))
                {
                    await new PortableMessageDialog(PowerPlannerResources.GetString("String_NoClassNameMessageBody"), PowerPlannerResources.GetString("String_NoNameMessageHeader")).ShowAsync();
                    return;
                }

                if (IsPartialSemesterClass && EndDate != null && StartDate != null && EndDate.Value.Date < StartDate.Value.Date)
                {
                    await new PortableMessageDialog(PowerPlannerResources.GetString("EditSemesterPage_String_StartDateGreaterThanEndExplanation"), PowerPlannerResources.GetString("EditSemesterPage_String_InvalidStartDate")).ShowAsync();
                    return;
                }

                await TryHandleUserInteractionAsync("SaveClass", async (cancellationToken) =>
                {
                    Action recordTelemetryAction = delegate
                    {
                        TelemetryExtension.Current?.TrackEvent("SavedClass", new Dictionary <string, string>
                        {
                            { "State", State.ToString() },
                            { "UsingCustomColor", (!ColorItem.DefaultColors.Any(i => i.Equals(Color))).ToString() }
                        });
                    };

                    if (ClassToEdit != null)
                    {
                        DataItemClass c = new DataItemClass()
                        {
                            Identifier = ClassToEdit.Identifier,
                            Name       = name,
                            RawColor   = Color
                        };

                        PopulateClassInfo(c);

                        DataChanges editChanges = new DataChanges();
                        editChanges.Add(c);
                        await PowerPlannerApp.Current.SaveChanges(editChanges);
                        recordTelemetryAction();
                        cancellationToken.ThrowIfCancellationRequested();
                    }

                    else
                    {
                        // Get current semester
                        Guid semesterId = AddParams.SemesterIdentifier;

                        if (semesterId == Guid.Empty)
                        {
                            throw new ArgumentException("CurrentSemesterId was empty");
                        }

                        var newItems = AccountDataStore.GenerateNewDefaultClass(semesterId, name, Color);

                        PopulateClassInfo(newItems.OfType <DataItemClass>().First());

                        DataChanges changes = new DataChanges();

                        foreach (var i in newItems)
                        {
                            changes.Add(i);
                        }

                        await PowerPlannerApp.Current.SaveChanges(changes);
                        recordTelemetryAction();
                        cancellationToken.ThrowIfCancellationRequested();

                        AddParams.OnClassAddedAction?.Invoke((DataItemClass)newItems.First());

                        if (AddParams.NavigateToClassAfterAdd)
                        {
                            DataItemClass c = (DataItemClass)newItems.First();

                            var dontWait = MainScreenViewModel.SelectClass(c.Identifier);
                        }
                    }

                    this.RemoveViewModel();
                }, "Failed to save your class. Your error has been reported.");
            }

            catch (Exception ex)
            {
                TelemetryExtension.Current?.TrackException(ex);
            }
        }