diff --git a/gio/gfile.c b/gio/gfile.c
index da3477b..ea451ec 100644
--- a/gio/gfile.c
+++ b/gio/gfile.c
@@ -194,6 +194,14 @@ static void               g_file_real_replace_async               (GFile
 static GFileOutputStream *g_file_real_replace_finish              (GFile                  *file,
 								   GAsyncResult           *res,
 								   GError                **error);
+static void               g_file_real_delete_async                (GFile                      *file,
+								   int                         io_priority,
+								   GCancellable               *cancellable,
+								   GAsyncReadyCallback         callback,
+								   gpointer                    user_data);
+static gboolean           g_file_real_delete_finish               (GFile                      *file,
+								   GAsyncResult               *res,
+								   GError                    **error);
 static void               g_file_real_open_readwrite_async        (GFile                  *file,
                                                                    int                  io_priority,
                                                                    GCancellable           *cancellable,
@@ -292,6 +300,8 @@ g_file_default_init (GFileIface *iface)
   iface->create_finish = g_file_real_create_finish;
   iface->replace_async = g_file_real_replace_async;
   iface->replace_finish = g_file_real_replace_finish;
+  iface->delete_file_async = g_file_real_delete_async;
+  iface->delete_file_finish = g_file_real_delete_finish;
   iface->open_readwrite_async = g_file_real_open_readwrite_async;
   iface->open_readwrite_finish = g_file_real_open_readwrite_finish;
   iface->create_readwrite_async = g_file_real_create_readwrite_async;
@@ -3540,6 +3550,76 @@ g_file_delete (GFile         *file,
 }
 
 /**
+ * g_file_delete_async:
+ * @file: input #GFile.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request.
+ * @cancellable: (allow-none): optional #GCancellable object, %NULL to ignore.
+ * @callback: (scope async): a #GAsyncReadyCallback to call when the request is
+ *     satisfied
+ * @user_data: (closure): the data to pass to callback function
+ * 
+ * Asynchronously deletes a file. If the @file is a directory, it will only
+ * be deleted if it is empty.
+ *
+ * For more details, see g_file_delete() which is
+ * the synchronous version of this call.
+ *
+ * When the operation is finished, @callback will be called. You can then call
+ * g_file_delete_finish() to get the result of the operation.
+ **/
+void
+g_file_delete_async (GFile               *file,
+		     int                  io_priority,
+		     GCancellable        *cancellable,
+		     GAsyncReadyCallback  callback,
+		     gpointer             user_data)
+{
+  GFileIface *iface;
+  
+  g_return_if_fail (G_IS_FILE (file));
+
+  iface = G_FILE_GET_IFACE (file);
+  (* iface->delete_file_async) (file,
+			        io_priority,
+			        cancellable,
+			        callback,
+			        user_data);
+}
+
+/**
+ * g_file_delete_finish:
+ * @file: input #GFile.
+ * @res: a #GAsyncResult. 
+ * @error: a #GError, or %NULL
+ * 
+ * Finishes an asynchronous file delete operation started with 
+ * g_file_delete_async(). 
+ * 
+ * Returns: %TRUE if the file was deleted. %FALSE otherwise.
+ **/
+gboolean
+g_file_delete_finish (GFile         *file,
+		      GAsyncResult  *res,
+		      GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (res))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return FALSE;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->delete_file_finish) (file, res, error);
+}
+
+/**
  * g_file_trash:
  * @file: #GFile to send to trash.
  * @cancellable: (allow-none): optional #GCancellable object, %NULL to ignore.
@@ -5289,6 +5369,47 @@ g_file_real_replace_finish (GFile         *file,
 }
 
 static void
+delete_async_thread (GSimpleAsyncResult *res,
+		     GObject            *object,
+		     GCancellable       *cancellable)
+{
+  GFileIface *iface;
+  gboolean result;
+  GError *error = NULL;
+
+  iface = G_FILE_GET_IFACE (object);
+
+  result = iface->delete_file (G_FILE (object), cancellable, &error);
+
+  if (!result)
+    g_simple_async_result_take_error (res, error);
+}
+
+static void
+g_file_real_delete_async (GFile               *file,
+			  int                  io_priority,
+			  GCancellable        *cancellable,
+			  GAsyncReadyCallback  callback,
+			  gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+
+  res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_delete_async);
+
+  g_simple_async_result_run_in_thread (res, delete_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static gboolean
+g_file_real_delete_finish (GFile         *file,
+			   GAsyncResult  *res,
+			   GError       **error)
+{
+  /* Error handled in g_file_delete_finish() */
+  return TRUE;
+}
+
+static void
 open_readwrite_async_thread (GSimpleAsyncResult *res,
 			     GObject            *object,
 			     GCancellable       *cancellable)
diff --git a/gio/gfile.h b/gio/gfile.h
index 918f26a..b467308 100644
--- a/gio/gfile.h
+++ b/gio/gfile.h
@@ -105,8 +105,8 @@ typedef struct _GFileIface    		GFileIface;
  * @replace_async: Asynchronously replaces the contents of a file.
  * @replace_finish: Finishes asynchronously replacing a file.
  * @delete_file: Deletes a file.
- * @_delete_file_async: Asynchronously deletes a file.
- * @_delete_file_finish: Finishes an asynchronous delete.
+ * @delete_file_async: Asynchronously deletes a file.
+ * @delete_file_finish: Finishes an asynchronous delete.
  * @trash: Sends a #GFile to the Trash location.
  * @_trash_async: Asynchronously sends a #GFile to the Trash location.
  * @_trash_finish: Finishes an asynchronous file trashing operation.
@@ -353,8 +353,14 @@ struct _GFileIface
   gboolean            (* delete_file)                 (GFile                *file,
                                                        GCancellable         *cancellable,
                                                        GError              **error);
-  void                (* _delete_file_async)          (void);
-  void                (* _delete_file_finish)         (void);
+  void                (* delete_file_async)           (GFile                *file,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  gboolean            (* delete_file_finish)          (GFile                *file,
+                                                       GAsyncResult         *res,
+                                                       GError              **error);
 
   gboolean            (* trash)                       (GFile                *file,
                                                        GCancellable         *cancellable,
@@ -631,6 +637,14 @@ void                    g_file_replace_async              (GFile
 GFileOutputStream *     g_file_replace_finish             (GFile                      *file,
 							   GAsyncResult               *res,
 							   GError                    **error);
+void                    g_file_delete_async               (GFile                      *file,
+							   int                         io_priority,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+gboolean                g_file_delete_finish              (GFile                      *file,
+							   GAsyncResult               *res,
+							   GError                    **error);
 GFileIOStream *         g_file_open_readwrite             (GFile                      *file,
 							   GCancellable               *cancellable,
 							   GError                    **error);
diff --git a/gio/gio.symbols b/gio/gio.symbols
index dc03066..e7aa050 100644
--- a/gio/gio.symbols
+++ b/gio/gio.symbols
@@ -373,6 +373,8 @@ g_file_create_async
 g_file_create_finish
 g_file_replace_async
 g_file_replace_finish
+g_file_delete_async
+g_file_delete_finish
 g_file_query_exists
 g_file_query_info
 g_file_query_info_async
