public void Transfer()
        {
            try {
#if GIO_2_16
                bool result = true;
#else
                Gnome.Vfs.Result result = Gnome.Vfs.Result.Ok;
#endif

                if (clean)
#if GIO_2_16
                { Clean(dest); }
#else
                { Clean(); }
#endif

                foreach (IBrowsableItem photo in selection.Items)
                {
                    //FIXME need to implement the uniquename as a filter
                    using (FilterRequest request = new FilterRequest(photo.DefaultVersionUri)) {
                        if (rotate)
                        {
                            new OrientationFilter().Convert(request);
                        }

#if GIO_2_16
                        GLib.File source = FileFactory.NewForUri(request.Current.ToString());
#else
                        Gnome.Vfs.Uri source = new Gnome.Vfs.Uri(request.Current.ToString());
                        Gnome.Vfs.Uri target = dest.Clone();
#endif
#if GIO_2_16
                        GLib.File            target = UniqueName(dest, photo.Name);
                        FileProgressCallback cb     = Progress;
#else
                        target = UniqueName(target, photo.Name);
                        Gnome.Vfs.XferProgressCallback cb = new Gnome.Vfs.XferProgressCallback(Progress);
#endif

                        progress_dialog.Message      = System.String.Format(Catalog.GetString("Transferring picture \"{0}\" To CD"), photo.Name);
                        progress_dialog.Fraction     = photo_index / (double)selection.Count;
                        progress_dialog.ProgressText = System.String.Format(Catalog.GetString("{0} of {1}"),
                                                                            photo_index, selection.Count);

#if GIO_2_16
                        result &= source.Copy(target,
                                              FileCopyFlags.None,
                                              null,
                                              cb);
#else
                        result = Gnome.Vfs.Xfer.XferUri(source, target,
                                                        Gnome.Vfs.XferOptions.Default,
                                                        Gnome.Vfs.XferErrorMode.Abort,
                                                        Gnome.Vfs.XferOverwriteMode.Replace,
                                                        cb);
#endif
                    }
                    photo_index++;
                }

                // FIXME the error dialog here is ugly and needs improvement when strings are not frozen.
#if GIO_2_16
                if (result)
                {
#else
                if (result == Gnome.Vfs.Result.Ok)
                {
#endif
                    progress_dialog.Message      = Catalog.GetString("Done Sending Photos");
                    progress_dialog.Fraction     = 1.0;
                    progress_dialog.ProgressText = Catalog.GetString("Transfer Complete");
                    progress_dialog.ButtonLabel  = Gtk.Stock.Ok;
                    progress_dialog.Hide();
                    system("nautilus-cd-burner");
                }
                else
                {
                    throw new System.Exception(System.String.Format("{0}{3}{1}{3}{2}",
                                                                    progress_dialog.Message,
                                                                    Catalog.GetString("Error While Transferring"),
                                                                    result.ToString(),
                                                                    System.Environment.NewLine));
                }
            } catch (System.Exception e) {
                progress_dialog.Message      = e.ToString();
                progress_dialog.ProgressText = Catalog.GetString("Error Transferring");
                return;
            }
            Gtk.Application.Invoke(this.Destroy);
        }
		public void Transfer () {
			try {
				Gnome.Vfs.Result result = Gnome.Vfs.Result.Ok;

				if (clean)
					Clean ();

				foreach (IBrowsableItem photo in selection.Items) {

 				//FIXME need to implement the uniquename as a filter	
					using (Filters.FilterRequest request = new Filters.FilterRequest (photo.DefaultVersionUri)) {
						if (rotate)
							new Filters.OrientationFilter ().Convert (request);
						
						Gnome.Vfs.Uri source = new Gnome.Vfs.Uri (request.Current.ToString ());
						Gnome.Vfs.Uri target = dest.Clone ();
						target = UniqueName (target, source.ExtractShortName ());
						
						Gnome.Vfs.XferProgressCallback cb = new Gnome.Vfs.XferProgressCallback (Progress);
						
						progress_dialog.Message = System.String.Format (Catalog.GetString ("Transferring picture \"{0}\" To CD"), photo.Name);
						progress_dialog.Fraction = photo_index / (double) selection.Count;
						progress_dialog.ProgressText = System.String.Format (Catalog.GetString ("{0} of {1}"), 
												     photo_index, selection.Count);
						result = Gnome.Vfs.Xfer.XferUri (source, target, 
										 Gnome.Vfs.XferOptions.Default, 
										 Gnome.Vfs.XferErrorMode.Abort, 
										 Gnome.Vfs.XferOverwriteMode.Replace, 
										 cb);
					}
					photo_index++;
				}

				// FIXME the error dialog here is ugly and needs improvement when strings are not frozen.
				if (result == Gnome.Vfs.Result.Ok) {
					progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
					progress_dialog.Fraction = 1.0;
					progress_dialog.ProgressText = Catalog.GetString ("Transfer Complete");
					progress_dialog.ButtonLabel = Gtk.Stock.Ok;
					progress_dialog.Hide ();
					system ("nautilus-cd-burner");
				} else {
					throw new System.Exception (System.String.Format ("{0}{3}{1}{3}{2}", 
											  progress_dialog.Message,
											  Catalog.GetString ("Error While Transferring"), 
											  result.ToString (),
											  System.Environment.NewLine));
				}

			} catch (System.Exception e) {
				progress_dialog.Message = e.ToString ();
				progress_dialog.ProgressText = Catalog.GetString ("Error Transferring");
				return;
			}
			Gtk.Application.Invoke (this.Destroy);
		}
 void Clean()
 {
     Gnome.Vfs.Uri target = dest.Clone();
     Gnome.Vfs.XferProgressCallback cb = new Gnome.Vfs.XferProgressCallback(Progress);
     Gnome.Vfs.Xfer.XferDeleteList(new Gnome.Vfs.Uri [] { target }, Gnome.Vfs.XferErrorMode.Query, Gnome.Vfs.XferOptions.Recursive, cb);
 }
		void Clean ()
		{
			Gnome.Vfs.Uri target = dest.Clone ();
			Gnome.Vfs.XferProgressCallback cb = new Gnome.Vfs.XferProgressCallback (Progress);
			Gnome.Vfs.Xfer.XferDeleteList (new Gnome.Vfs.Uri [] {target}, Gnome.Vfs.XferErrorMode.Query, Gnome.Vfs.XferOptions.Recursive, cb);
			
		}