public SettingsViewController() : base(UITableViewStyle.Grouped, null)
        {
            var testButton = new SimpleButton {
                Title      = "Test Connection",
                TitleColor = UIColor.Black,
                Tapped     = async(t) => {
                    View.DismissKeyboard();
                    var f = t.Frame;
                    t.Title = "Testing...";
                    t.Title = string.Format("Test Connection: {0}", await WebService.Main.Test());
                    t.Frame = f;
                }
            };

            this.NavigationItem.LeftBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Done, (s, e) => save());
            Root = new RootElement("Settings")
            {
                new Section("Server Settings")
                {
                    new EntryElement("Server", "http://10.0.1.2/api/", Settings.Shared.ServerUrl)
                    {
                        ShouldAutoCorrect = false,
                        ValueUpdated      = (v) => {
                            Settings.Shared.ServerUrl = v;
                        },
                    },
                    new EntryElement("Test Server", "http://10.0.1.2/api/", Settings.Shared.TestServerUrl)
                    {
                        ShouldAutoCorrect = false,
                        ValueUpdated      = (v) => {
                            Settings.Shared.TestServerUrl = v;
                        },
                    },
                    new UIViewElement("", testButton, false),
                },
                new Section("iPad Settings")
                {
                    new BooleanElement("Test Mode", Settings.Shared.TestMode)
                    {
                        ValueUpdated = (v) => {
                            Settings.Shared.TestMode = v;
                        }
                    },
                    new EntryElement("Register Id", "1", Settings.Shared.RegisterId.ToString())
                    {
                        ShouldAutoCorrect = false,
                        ValueUpdated      = (v) => {
                            try {
                                Settings.Shared.RegisterId = int.Parse(v);
                            } catch (Exception ex) {
                                Console.WriteLine(ex);
                                new SimpleAlertView("Invalid Register ID", "The Register ID must be a number").Show();
                            }
                        },
                    },
                },
                new Section("Payment Settings")
                {
                    (processorType = new StringElement("Credit Card Processor", Settings.Shared.CreditCardProcessor.ToString(), () => {
                        //
                        var sheet = new SimpleActionSheet();
                        Enum.GetValues(typeof(CreditCardProcessorType)).Cast <CreditCardProcessorType>().ToList().ForEach(x => sheet.Add(x.ToString(), Color.LightBlue, () => {
                            if (x == CreditCardProcessorType.Paypal)
                            {
                                //check if paypal is installed
                            }
                            processorType.Value = x.ToString();
                            Settings.Shared.CreditCardProcessor = x;
                            processorType.Reload();
                            UpdatePaymentDetails();
                        }));
                        sheet.ShowFrom(processorType.GetActiveCell().Bounds, processorType.GetActiveCell(), true);
                    })),
                },
                new Section()
                {
                    new StringElement("Version", NSBundle.MainBundle.InfoDictionary["CFBundleVersion"].ToString()),
                    new StringElement("Check for updates", () => Updater.Shared.Update()),
                }
            };
            UpdatePaymentDetails();
        }