async protected override Task SavingCompleted()
        {
            var entry = Entry;

            if (entry == null || viewModel.Points == null || viewModel.Points.Count == 0)
            {//todo:maybe we should delete coordinates from db?
                return;
            }
            //here GPSEntry should be saved so instead InstanceId we can use GlobalId
            ApplicationState.Current.TrainingDay.CleanUpGpsCoordinates();
            ApplicationState.Current.CurrentBrowsingTrainingDays.TrainingDays[entry.TrainingDay.TrainingDate].CleanUpGpsCoordinates();

            try
            {
                var result = await BAService.GPSCoordinatesOperationAsync(entry.GlobalId, GPSCoordinatesOperationType.UpdateCoordinatesWithCorrection, viewModel.Points);

                result.GPSTrackerEntry.InstanceId = entry.InstanceId;
                var tdi    = ApplicationState.Current.CurrentBrowsingTrainingDays.TrainingDays[entry.TrainingDay.TrainingDate];
                var gpsBag = tdi.GetGpsCoordinates(result.GPSTrackerEntry);
                gpsBag.IsSaved = true;
                tdi.Update(result.GPSTrackerEntry);
                ApplicationState.Current.TrainingDay    = tdi.Copy();
                ApplicationState.Current.CurrentEntryId = new LocalObjectKey(result.GPSTrackerEntry);
            }
            catch (NetworkException)
            {
                progressBar.ShowProgress(false);
                if (ApplicationState.Current.IsOffline)
                {
                    BAMessageBox.ShowError(ApplicationStrings.ErrOfflineMode);
                }
                else
                {
                    BAMessageBox.ShowError(ApplicationStrings.ErrNoNetwork);
                }
            }
            catch (Exception)
            {
                //mark this entry as still modified
                var tdi = ApplicationState.Current.CurrentBrowsingTrainingDays.TrainingDays[entry.TrainingDay.TrainingDate];
                tdi.IsModified = true;
                tdi.GetGpsCoordinates(entry).IsSaved = false;
                progressBar.ShowProgress(false);
                ApplicationBar.EnableApplicationBar(true);
                BAMessageBox.ShowError(ApplicationStrings.GPSTrackerPage_ErrUploadGpsCoordinates);
            }
        }
        async protected virtual Task uploadGPSCoordinates(SynchronizationItemViewModel day, bool firstTime)
        {
            var result = await BAService.GPSCoordinatesOperationAsync(day.GPSEntry.GlobalId, GPSCoordinatesOperationType.UpdateCoordinates, day.GPSBag.Points);

            if (result.GPSTrackerEntry != null)
            {
                result.GPSTrackerEntry.InstanceId = day.GPSEntry.InstanceId;
                day.GPSEntry.GlobalId             = result.GPSTrackerEntry.GlobalId;
            }
            uploadGPSResult(result, day, firstTime);


            //var m = new ServiceManager<AsyncCompletedEventArgs>(delegate(BodyArchitectAccessServiceClient client1, EventHandler<AsyncCompletedEventArgs> operationCompleted)
            //{
            //    using (OperationContextScope ocs = new OperationContextScope(client1.InnerChannel))
            //    {
            //        var ggg = (IBodyArchitectAccessService)client1;
            //        GPSOperationParam dto = new GPSOperationParam();
            //        var json = JsonConvert.SerializeObject(day.GPSBag.Points);
            //        var bytes = UTF8Encoding.UTF8.GetBytes(json);
            //        dto.CoordinatesStream = bytes.ToZip();

            //        GPSOperationData param = new GPSOperationData();
            //        param.GPSTrackerEntryId = day.GPSEntry.GlobalId;
            //        param.Operation = GPSCoordinatesOperationType.UpdateCoordinates;

            //        OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("SessionId", "http://MYBASERVICE.TK/", ApplicationState.Current.SessionData.Token.SessionId));
            //        OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("Params", "http://MYBASERVICE.TK/", param));
            //        ApplicationState.AddCustomHeaders();

            //        ggg.BeginGPSCoordinatesOperation(dto, delegate(IAsyncResult aRes)
            //        {
            //            var proxy = (IBodyArchitectAccessService)aRes.AsyncState;
            //            //using (OperationContextScope o = new OperationContextScope(((BodyArchitectAccessServiceClient)proxy).InnerChannel))
            //            {

            //                try
            //                {
            //                    GPSCoordinatesOperationResult result = proxy.EndGPSCoordinatesOperation(aRes);
            //                    uploadGPSResult(result, day, firstTime);
            //                }
            //                catch (FaultException<BAServiceException> ex)
            //                {
            //                    if (ex.Detail.ErrorCode == ErrorCode.ObjectNotFound)
            //                    {
            //                        uploadGPSResult(new GPSCoordinatesOperationResult(null), day, firstTime);
            //                        return;
            //                    }
            //                    uploadGPSResult(null, day, firstTime);
            //                    day.State = MergeState.Error;
            //                }
            //                catch (Exception ex)
            //                {
            //                    uploadGPSResult(null, day, firstTime);
            //                    day.State = MergeState.Error;
            //                }
            //                finally
            //                {
            //                    IsBusy = false;
            //                }
            //            }
            //        }, client1);

            //    }


            //});
            //if (!m.Run())
            //{

            //}
        }