diff --git a/configure.in b/configure.in
index 0279f61..f2d4ca6 100644
--- a/configure.in
+++ b/configure.in
@@ -158,7 +158,7 @@ HAVE_GST=no
 PKG_CHECK_MODULES(GSR, \
   gstreamer-$GST_MAJORMINOR >= $GST_REQ \
   gstreamer-plugins-base-$GST_MAJORMINOR >= $GST_REQ \
-  gtk+-2.0 >= 2.6.0 libgnomeui-2.0 >= 1.102.0 gnome-vfs-2.0,
+  gtk+-2.0 >= 2.6.0 libgnomeui-2.0 >= 1.102.0 gio-2.0,
   HAVE_GST=yes,
   [
     HAVE_GST=no
diff --git a/grecord/src/gsr-window.c b/grecord/src/gsr-window.c
index b29f3ca..baa18ae 100644
--- a/grecord/src/gsr-window.c
+++ b/grecord/src/gsr-window.c
@@ -37,9 +37,9 @@
 #include <string.h>
 
 #include <glib/gi18n.h>
+#include <gio/gio.h>
 #include <gtk/gtk.h>
 #include <libgnome/gnome-help.h>
-#include <libgnomevfs/gnome-vfs.h>
 #include <gconf/gconf-client.h>
 #include <gst/gst.h>
 #include <gst/interfaces/mixer.h>
@@ -655,8 +655,9 @@ do_save_file (GSRWindow *window,
 {
 	GSRWindowPrivate *priv;
         GMAudioProfile *profile;
-	char *tmp, *src, *name;
-	GnomeVFSURI *src_uri, *dst_uri;
+	char *name;
+	GFile *src, *dst;
+	GError *error = NULL;
 
 	priv = window->priv;
 
@@ -673,39 +674,27 @@ do_save_file (GSRWindow *window,
 			return;
 	}
 
-	tmp = g_filename_to_uri (name, NULL, NULL);
-	src = g_filename_to_uri (priv->record_filename, NULL, NULL);
-	src_uri = gnome_vfs_uri_new (src);
-	dst_uri = gnome_vfs_uri_new (tmp);
-	g_free (src);
-	if (src_uri && dst_uri) {
-		GnomeVFSResult result;
-		result = gnome_vfs_xfer_uri (src_uri, dst_uri,
-			GNOME_VFS_XFER_DEFAULT,
-			GNOME_VFS_XFER_ERROR_MODE_ABORT,
-			GNOME_VFS_XFER_OVERWRITE_MODE_REPLACE,
-			NULL, NULL);
-		if (result == GNOME_VFS_OK) {
-			g_object_set (G_OBJECT (window), "location", name, NULL);
-			priv->dirty = FALSE;
-			window->priv->saved = TRUE;
-			if (window->priv->quit_after_save == TRUE) {
-				gsr_window_close (window);
-			}
-		} else {
-			show_error_dialog (GTK_WINDOW (window), NULL,
-			                   _("Could not save the file \"%s\""),
-			                   gnome_vfs_result_to_string (result));
+	src = g_file_new_for_path(priv->record_filename);
+	dst = g_file_new_for_path(name);
+
+	/* TODO: Show progress? Where? */
+	if (g_file_copy(src, dst, G_FILE_COPY_OVERWRITE,
+	                NULL, NULL, NULL, &error)) {
+		g_object_set (G_OBJECT (window), "location", name, NULL);
+		priv->dirty = FALSE;
+		window->priv->saved = TRUE;
+		if (window->priv->quit_after_save == TRUE) {
+			gsr_window_close (window);
 		}
-		gnome_vfs_uri_unref (src_uri);
-		gnome_vfs_uri_unref (dst_uri);
 	} else {
 		show_error_dialog (GTK_WINDOW (window), NULL,
 			           _("Could not save the file \"%s\""), name);
 	}
 
+	g_object_unref(src);
+	g_object_unref(dst);
+
 	g_free (name);
-	g_free (tmp);
 }
 
 static void
@@ -958,7 +947,7 @@ fill_in_information (GSRWindow *window,
 		gchar *human;
 
 		file_size = (guint64) buf.st_size;
-		human = gnome_vfs_format_file_size_for_display (file_size);
+		human = g_format_size_for_display (file_size);
 
 		text = g_strdup_printf (ngettext ("%s (%llu byte)", "%s (%llu bytes)", 
 		                        file_size), human, file_size);
