private void btnClone_Click(object sender, EventArgs e)
        {
            var plan = TrainingPlan;

            if (plan == null)
            {
                return;
            }
            ParentWindow.RunAsynchronousOperation(delegate
            {
                var workoutPlan       = plan.ToTrainingPlan();
                workoutPlan.BasedOnId = plan.GlobalId;
                var copyPlan          = workoutPlan.Clone();
                copyPlan.BasedOnId    = plan.GlobalId;
                copyPlan.GlobalId     = Guid.NewGuid();
                copyPlan.Name         = StrengthTrainingEntryStrings.TrainingPlanNewName;
                WorkoutPlanDTO dto    = new WorkoutPlanDTO();
                copyPlan.Tag          = dto;
                dto.SetTrainingPlan(copyPlan);


                ParentWindow.SynchronizationContext.Send(delegate
                {
                    editTrainingPlan(copyPlan);
                }, null);
            }, asyncOperationStateChange);
        }
        void editTrainingPlan(BodyArchitect.Service.Model.TrainingPlans.TrainingPlan plan)
        {
            ControlHelper.RunWithExceptionHandling(delegate
            {
                WorkoutPlanDTO planDto       = (WorkoutPlanDTO)plan.Tag;
                TrainingPlanEditorWindow wnd = new TrainingPlanEditorWindow();
                wnd.Fill(plan);
                if (wnd.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
                {
                    ParentWindow.RunAsynchronousOperation(delegate
                    {
                        TrainingPlanChecker checker = new TrainingPlanChecker();
                        checker.Process(wnd.TrainingPlan);
                        planDto.SetTrainingPlan(wnd.TrainingPlan);

                        XmlSerializationTrainingPlanFormatter formatter = new XmlSerializationTrainingPlanFormatter();
                        planDto.PlanContent = formatter.ToXml(wnd.TrainingPlan).ToString();

                        planDto.Profile = UserContext.CurrentProfile;
                        ServiceManager.SaveTrainingPlan(planDto);
                        ObjectsReposidory.ClearWorkoutPlansCache();
                        ParentWindow.SynchronizationContext.Send(delegate
                        {
                            Fill();
                        }, null);
                    });
                }
            });
        }