void Add (string url)
		{
			var s = string.Format ("{0}", 1);

			Action<Download> refresh = (download) => { 
				Console.WriteLine ("[AppDelegate] ProgressChanged {0}", download.Id);
			};
			var progress = _downloader.Queue (url, null, refresh);

			Action tapped = () => {

				Download detail;
				bool queued = _downloader.TryDetail(url, out detail);
				if (!queued) {
					return ;
				}

				var nextroot = new RootElement(s) {
					new Section ("Actions"){
						new StringElement("Back", () => {
							Navigation.PopViewController(true);
						}),
					},
					new Section ("Detail"){
						new StringElement("Id", detail.Id.ToString()),
						new StringElement("Url", detail.Url),
						new StringElement("State", detail.State.ToString()),
						new StringElement("LastModified", detail.LastModified.ToString()),
						new StringElement("DownloadState", detail.DownloadState.ToString()),
						new StringElement("Temporary", detail.Temporary),
						new StringElement("Total", detail.Total.ToString()),
						new StringElement("Written", detail.Written.ToString()),
						new StringElement("StatusCode", detail.StatusCode.ToString()),
						new StringElement("Description", detail.ErrorDescription),
						new StringElement("Error", detail.Error.ToString()),
					},
				};
				var dvc = new DialogViewController (nextroot);
				Navigation.PushViewController(dvc, true);
			};


			var element = new ProgressElement(s, tapped, progress);

			Action<Download> progressing = (d) => {
				InvokeOnMainThread (() => {
					Console.WriteLine ("[ProgressElement] Bind {0} OnMainThread", d.Id);
					element.Caption = Caption (d);
					element.GetImmediateRootElement ()
						.Reload (element, UITableViewRowAnimation.Automatic);
				}
				);
			};
			progress.Bind(progressing);

			_downloads.Insert(0, UITableViewRowAnimation.Top, element);

		}
        void Add(string url)
        {
            var s = string.Format("{0}", 1);

            Action <Download> refresh = (download) => {
                Console.WriteLine("[AppDelegate] ProgressChanged {0}", download.Id);
            };
            var progress = _downloader.Queue(url, null, refresh);

            Action tapped = () => {
                Download detail;
                bool     queued = _downloader.TryDetail(url, out detail);
                if (!queued)
                {
                    return;
                }

                var nextroot = new RootElement(s)
                {
                    new Section("Actions")
                    {
                        new StringElement("Back", () => {
                            Navigation.PopViewController(true);
                        }),
                    },
                    new Section("Detail")
                    {
                        new StringElement("Id", detail.Id.ToString()),
                        new StringElement("Url", detail.Url),
                        new StringElement("State", detail.State.ToString()),
                        new StringElement("LastModified", detail.LastModified.ToString()),
                        new StringElement("DownloadState", detail.DownloadState.ToString()),
                        new StringElement("Temporary", detail.Temporary),
                        new StringElement("Total", detail.Total.ToString()),
                        new StringElement("Written", detail.Written.ToString()),
                        new StringElement("StatusCode", detail.StatusCode.ToString()),
                        new StringElement("Description", detail.ErrorDescription),
                        new StringElement("Error", detail.Error.ToString()),
                    },
                };
                var dvc = new DialogViewController(nextroot);
                Navigation.PushViewController(dvc, true);
            };


            var element = new ProgressElement(s, tapped, progress);

            Action <Download> progressing = (d) => {
                InvokeOnMainThread(() => {
                    Console.WriteLine("[ProgressElement] Bind {0} OnMainThread", d.Id);
                    element.Caption = Caption(d);
                    element.GetImmediateRootElement()
                    .Reload(element, UITableViewRowAnimation.Automatic);
                }
                                   );
            };

            progress.Bind(progressing);

            _downloads.Insert(0, UITableViewRowAnimation.Top, element);
        }