diff --git a/daemon/gvfsbackenddav.c b/daemon/gvfsbackenddav.c
index 95dc428..613b585 100644
--- a/daemon/gvfsbackenddav.c
+++ b/daemon/gvfsbackenddav.c
@@ -2241,6 +2241,70 @@ do_delete (GVfsBackend   *backend,
 }
 
 static void
+do_move (GVfsBackend *backend,
+	 GVfsJobMove *job,
+	 const char *source_path,
+	 const char *destination_path,
+	 GFileCopyFlags flags,
+	 GFileProgressCallback progress_callback,
+	 gpointer progress_callback_data)
+{
+  SoupMessage *msg;
+  SoupURI     *source;
+  SoupURI     *target;
+  guint        status;
+
+  /* FIXME: what about G_FILE_COPY_NOFOLLOW_SYMLINKS and G_FILE_COPY_ALL_METADATA? */
+  /* FIXME: Does not handle overwriting file with directory or vice versa */
+  if (flags & G_FILE_COPY_BACKUP)
+    {
+      /* FIXME: implement! */
+      g_vfs_job_failed (G_VFS_JOB (job),
+			G_IO_ERROR,
+			G_IO_ERROR_CANT_CREATE_BACKUP,
+			_("backups not supported yet"));
+      return;
+    }
+
+  source = http_backend_uri_for_filename (backend, source_path, FALSE);
+  msg = soup_message_new_from_uri (SOUP_METHOD_MOVE, source);
+
+  target = http_backend_uri_for_filename (backend, destination_path, FALSE);
+
+  message_add_destination_header (msg, target);
+
+  message_add_overwrite_header (msg,
+                        (flags & G_FILE_COPY_OVERWRITE));
+
+  status = g_vfs_backend_dav_send_message (backend, msg);
+
+  /*
+   * The precondition of SOUP_STATUS_PRECONDITION_FAILED (412) in
+   * this case was triggered by the "Overwrite: F" header which
+   * means that the target already exists.
+   * */
+
+  if (SOUP_STATUS_IS_SUCCESSFUL (status))
+    {
+      g_vfs_job_succeeded (G_VFS_JOB (job));
+    }
+  else if (status == SOUP_STATUS_PRECONDITION_FAILED)
+    g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
+                      G_IO_ERROR_EXISTS,
+                      _("Target file already exists"));
+  else
+    g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
+                      http_error_code_from_status (status),
+                      "%s", msg->reason_phrase);
+
+  g_object_unref (msg);
+  soup_uri_free (target);
+  soup_uri_free (source);
+
+}
+
+
+static void
 do_set_display_name (GVfsBackend           *backend,
                      GVfsJobSetDisplayName *job,
                      const char            *filename,
@@ -2339,4 +2403,5 @@ g_vfs_backend_dav_class_init (GVfsBackendDavClass *klass)
   backend_class->delete            = do_delete;
   backend_class->set_display_name  = do_set_display_name;
   backend_class->try_unmount       = try_unmount;
+  backend_class->move              = do_move;
 }
