diff -rupN gnucash-2.3.14/src/gnome-utils/dialog-utils.c new-gnucash-2.3.14/src/gnome-utils/dialog-utils.c
--- gnucash-2.3.14/src/gnome-utils/dialog-utils.c	2010-03-31 10:35:19.000000000 +0000
+++ new-gnucash-2.3.14/src/gnome-utils/dialog-utils.c	2010-08-02 13:08:22.000000000 +0000
@@ -919,6 +919,7 @@ gnc_gtk_dialog_add_button (GtkWidget *di
         image = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_BUTTON);
         gtk_button_set_image(GTK_BUTTON(button), image);
     }
+    gtk_widget_set_can_default (button, TRUE);
     gtk_widget_show_all(button);
     gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button, response);
 }
diff -rupN gnucash-2.3.14/src/gnome-utils/gnc-file.c new-gnucash-2.3.14/src/gnome-utils/gnc-file.c
--- gnucash-2.3.14/src/gnome-utils/gnc-file.c	2010-07-07 11:48:30.000000000 +0000
+++ new-gnucash-2.3.14/src/gnome-utils/gnc-file.c	2010-08-02 13:13:02.000000000 +0000
@@ -916,7 +916,7 @@ gnc_file_export_file(const char * newfil
     /* -- this session code is NOT identical in FileOpen and FileSaveAs -- */
 
     new_session = qof_session_new ();
-    qof_session_begin (new_session, newfile, FALSE, TRUE);
+    qof_session_export_begin (new_session, newfile, FALSE, TRUE);
 
     io_err = qof_session_get_error (new_session);
 
diff -rupN gnucash-2.3.14/src/libqof/qof/qofsession.c new-gnucash-2.3.14/src/libqof/qof/qofsession.c
--- gnucash-2.3.14/src/libqof/qof/qofsession.c	2010-05-18 15:36:31.000000000 +0000
+++ new-gnucash-2.3.14/src/libqof/qof/qofsession.c	2010-08-02 13:20:26.000000000 +0000
@@ -1186,6 +1186,95 @@ qof_session_begin (QofSession *session, 
            session,  book_id ? book_id : "(null)");
 }
 
+void
+qof_session_export_begin (QofSession *session, const char * book_id,
+                   gboolean ignore_lock, gboolean create_if_nonexistent)
+{
+    gchar **splituri;
+
+    if (!session) return;
+
+    ENTER (" sess=%p ignore_lock=%d, book-id=%s",
+           session, ignore_lock,
+           book_id ? book_id : "(null)");
+
+    /* Clear the error condition of previous errors */
+    qof_session_clear_error (session);
+
+    /* Check to see if this session is already open */
+    if (session->book_id)
+    {
+        qof_session_push_error (session, ERR_BACKEND_LOCKED, NULL);
+        LEAVE("push error book is already open ");
+        return;
+    }
+
+    /* seriously invalid */
+    if (!book_id)
+    {
+        qof_session_push_error (session, ERR_BACKEND_BAD_URL, NULL);
+        LEAVE("push error missing book_id");
+        return;
+    }
+
+    /* destroy the old backend */
+    qof_session_destroy_backend(session);
+
+    /* Store the session URL  */
+    session->book_id = g_strdup (book_id);
+
+    /* Look for something of the form of "file://", "http://" or
+     * "postgres://". Everything before the colon is the access
+     * method.  Load the first backend found for that access method.
+     */
+    splituri = g_strsplit ( book_id, "://", 2 );
+    if ( splituri[1] == NULL ) /* no access method in the uri, use generic "file" backend */
+        qof_session_load_backend(session, "xml");
+    else                       /* access method found, load appropriate backend */
+        qof_session_load_backend(session, splituri[0]);
+    g_strfreev ( splituri );
+
+    /* No backend was found. That's bad. */
+    if (NULL == session->backend)
+    {
+        g_free(session->book_id);
+        session->book_id = NULL;
+        qof_session_push_error (session, ERR_BACKEND_BAD_URL, NULL);
+        LEAVE (" BAD: no backend: sess=%p book-id=%s",
+               session,  book_id ? book_id : "(null)");
+        return;
+    }
+
+    /* If there's a begin method, call that. */
+    if (session->backend->session_begin)
+    {
+        char *msg;
+        int err;
+
+        (session->backend->session_begin)(session->backend, session,
+                                          session->book_id, ignore_lock,
+                                          create_if_nonexistent);
+        PINFO("Done running session_begin on backend");
+        err = qof_backend_get_error(session->backend);
+        msg = qof_backend_get_message(session->backend);
+        if (err != ERR_BACKEND_NO_ERR)
+        {
+            g_free(session->book_id);
+            session->book_id = NULL;
+            qof_session_push_error (session, err, msg);
+            LEAVE(" backend error %d %s", err, msg ? msg : "(null)");
+            return;
+        }
+        if (msg != NULL)
+        {
+            PWARN("%s", msg);
+            g_free(msg);
+        }
+    }
+
+    LEAVE (" sess=%p book-id=%s",
+           session,  book_id ? book_id : "(null)");
+}
 /* ====================================================================== */
 
 void
diff -rupN gnucash-2.3.14/src/libqof/qof/qofsession.h new-gnucash-2.3.14/src/libqof/qof/qofsession.h
--- gnucash-2.3.14/src/libqof/qof/qofsession.h	2010-05-18 15:36:31.000000000 +0000
+++ new-gnucash-2.3.14/src/libqof/qof/qofsession.h	2010-08-02 13:18:27.000000000 +0000
@@ -146,6 +146,35 @@ void qof_session_swap_data (QofSession *
 void qof_session_begin (QofSession *session, const char * book_id,
                         gboolean ignore_lock, gboolean create_if_nonexistent);
 
+/** The qof_session_export_begin () method begins a new session for accounts export.
+ *    It takes as an argument the book id. The book id must be a string
+ *    in the form of a URI/URL. The access method will be xml. Paths may be relative
+ *    or absolute.
+ *    If the path is relative; that is, if the argument is "file://somefile.xml"
+ *    then the current working directory is assumed. Customized backends can
+ *    choose to search other, application-specific, directories as well.
+ *
+ *    The 'ignore_lock' argument, if set to TRUE, will cause this routine
+ *    to ignore any global-datastore locks (e.g. file locks) that it finds.
+ *    If set to FALSE, then file/database-global locks will be tested and
+ *    obeyed.
+ *
+ *    If the datastore exists, can be reached (e.g over the net),
+ *    connected to, opened and read, and a lock can be obtained then
+ *    a lock will be obtained.   Note that multi-user datastores
+ *    (e.g. the SQL backend) typically will not need to get a global
+ *    lock, and thus, the user will not be locked out.  That's the
+ *    whole point of 'multi-user'.
+ *
+ *    If the file/database doesn't exist, and the create_if_nonexistent
+ *    flag is set to TRUE, then the database is created.
+ *
+ *    If an error occurs, it will be pushed onto the session error
+ *    stack, and that is where it should be examined.
+ */
+void qof_session_export_begin (QofSession *session, const char * book_id,
+                        gboolean ignore_lock, gboolean create_if_nonexistent);
+
 
 /**
  * The qof_session_load() method causes the QofBook to be made ready to
