void DataDownloaded(IAsyncResult result)
        {
            isBusy = false;

            UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false;
            end = DateTime.Now;
            var request = result.AsyncState as HttpWebRequest;
            WebServiceResponseDTO dto;
            try {
                HttpWebResponse response = (HttpWebResponse)request.EndGetResponse (result);
                Stream receiveStream = response.GetResponseStream ();
                StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8);
                string resp = readStream.ReadToEnd ();
                Console.WriteLine ("$$ GetTariffCodes Response stream received.\n" + resp);
                response.Close ();
                readStream.Close ();
                //get JSON response deserialized
                dto = (WebServiceResponseDTO)JsonConvert.DeserializeObject (
                    resp,
                    typeof(WebServiceResponseDTO)
                );

                if (dto != null) {
                    Tools.SendElapsedTime (start, end, dto.activityID);
                }

                InvokeOnMainThread (delegate {
                    BuildInterface ();
                    selectedUser = null;
                    if (dto.responseCode == 0) {
                        //insert "none" record on top...
                        MobileUser d = new MobileUser ();
                        d.firstNames = "None";
                        d.lastName = "None";
                        d.userID = 0;
                        list = new List<MobileUser> ();
                        list.Add (d);
                        foreach (var t in dto.mobileUsers) {
                            list.Add (t);
                        }
                        BuildInterface ();

                    } else {
                        new UIAlertView ("Fee Earner List Error", dto.responseMessage, null, "OK").Show ();
                        return;
                    }
                }
                );

            } catch (Exception ex) {
                Console.WriteLine ("### ERROR: " + ex.Message);
                isBusy = false;
                InvokeOnMainThread (delegate {
                    new UIAlertView (
                        "Network Error",
                        "Problem communicating with server.\nPlease try later or call GhostPractice Support",
                        null,
                        "Close"
                    ).Show ();
                }
                );
            }
        }
        private void BuildSections()
        {
            var headerLabel = new UILabel (new RectangleF (10, 10, 400, 40)) {
                Font = UIFont.BoldSystemFontOfSize (20),
                BackgroundColor = ColorHelper.GetGPPurple (),
                TextAlignment = UITextAlignment.Center,
                TextColor = UIColor.White,
                Text = "Post Tasks"
            };

            var view = new UIViewBordered ();
            view.Frame = new RectangleF (10, 10, 400, 40);
            view.Add (headerLabel);
            var topSection = new Section (view);

            Root.Add (topSection);

            string name = "";
            if (matter != null) {
                name = matter.matterName;
            }
            var sec = new Section (name);
            //
            addBusySection ();
            var feeEarnerName = new Section ("Fee Earner Name");
            if (selectedUser != null) {
                feeEarnerName = new Section (selectedUser.firstNames + " " + selectedUser.lastName);
            }
            var tarSec = new Section ();
            if (list != null && list.Count > 0) {
                btnTar = new StyledStringElement ("Select Fee Earner");
                btnTar.TextColor = ColorHelper.GetGPLightPurple ();
                btnTar.Alignment = UITextAlignment.Center;
                btnTar.Accessory = UITableViewCellAccessory.DisclosureIndicator;
                btnTar.Tapped += delegate {
                    if (list == null) {

                    } else {
                        string[] btns = new string[list.Count];
                        for (int i = 0; i < list.Count; i++) {
                            btns [i] = list [i].firstNames + " " + list [i].lastName;
                        }
                        actionSheet = new UIActionSheet ("Fee Earners", null, "Cancel", null, btns) {
                            Style = UIActionSheetStyle.Default
                        };

                        actionSheet.Clicked += delegate (object sender, UIButtonEventArgs args) {
                            if (args.ButtonIndex == list.Count) {
                                //ignored - cancelled
                            } else {

                                selectedUser = list [args.ButtonIndex];
                                BuildInterface ();
                            }

                        };

                        actionSheet.ShowInView (View);
                    }

                };
                tarSec.Add (btnTar);
            }
            //

            narration = new EntryElement ("Description", "Enter description text", null);
            narration.KeyboardType = UIKeyboardType.Default;
            feeEarnerName.Add (narration);
            //
            picker = new UIDatePicker ();
            //picker.Frame = new RectangleF (10f, 10f, 320f, 320f);
            picker.Mode = UIDatePickerMode.Date;
            picker.Date = DateTime.Now;

            var pickerSection = new Section (picker);

            Root.Add (sec);
            Root.Add (tarSec);
            Root.Add (feeEarnerName);
            Root.Add (pickerSection);
            BuildButtons ();
        }