Index: /trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java	(revision 8912)
+++ /trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java	(revision 8913)
@@ -64,4 +64,23 @@
     @Override
     public void actionPerformed(ActionEvent e) {
+        try {
+            saveSession();
+        } catch (CancelException ignore) {
+        }
+    }
+
+    /**
+     * Denotes that the user has cancelled the save process.
+     * @since 8913
+     */
+    public static class CancelException extends Exception {
+    }
+
+    /**
+     * Attempts to save the session.
+     * @throws CancelException when the user has cancelled the save process.
+     * @since 8913
+     */
+    public void saveSession() throws CancelException {
         if (!isEnabled()) {
             return;
@@ -70,5 +89,7 @@
         SessionSaveAsDialog dlg = new SessionSaveAsDialog();
         dlg.showDialog();
-        if (dlg.getValue() != 1) return;
+        if (dlg.getValue() != 1) {
+            throw new CancelException();
+        }
 
         boolean zipRequired = false;
@@ -93,6 +114,7 @@
         }
 
-        if (fc == null)
-            return;
+        if (fc == null) {
+            throw new CancelException();
+        }
 
         File file = fc.getSelectedFile();
@@ -116,6 +138,7 @@
         if (fn.indexOf('.') == -1) {
             file = new File(file.getPath() + (zip ? ".joz" : ".jos"));
-            if (!SaveActionBase.confirmOverwrite(file))
-                return;
+            if (!SaveActionBase.confirmOverwrite(file)) {
+                throw new CancelException();
+            }
         }
 
Index: /trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java	(revision 8912)
+++ /trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java	(revision 8913)
@@ -42,4 +42,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.SessionSaveAsAction;
 import org.openstreetmap.josm.actions.UploadAction;
 import org.openstreetmap.josm.gui.ExceptionDialogUtil;
@@ -67,4 +68,5 @@
 
     private SaveAndProceedAction saveAndProceedAction;
+    private SaveSessionAction saveSessionAction;
     private DiscardAndProceedAction discardAndProceedAction;
     private CancelAction cancelAction;
@@ -105,12 +107,15 @@
         saveAndProceedAction = new SaveAndProceedAction();
         model.addPropertyChangeListener(saveAndProceedAction);
-        pnl.add(saveAndProceedActionButton = new JButton(saveAndProceedAction), GBC.std().insets(5, 5, 5, 5).fill(GBC.HORIZONTAL));
+        pnl.add(saveAndProceedActionButton = new JButton(saveAndProceedAction), GBC.std(0, 0).insets(5, 5, 0, 0).fill(GBC.HORIZONTAL));
+
+        saveSessionAction = new SaveSessionAction();
+        pnl.add(new JButton(saveSessionAction), GBC.std(1, 0).insets(5, 5, 5, 0). fill(GBC.HORIZONTAL));
 
         discardAndProceedAction = new DiscardAndProceedAction();
         model.addPropertyChangeListener(discardAndProceedAction);
-        pnl.add(new JButton(discardAndProceedAction), GBC.std().insets(0, 0, 5, 0).fill(GBC.HORIZONTAL));
+        pnl.add(new JButton(discardAndProceedAction), GBC.std(0, 1).insets(5, 5, 0, 5).fill(GBC.HORIZONTAL));
 
         cancelAction = new CancelAction();
-        pnl.add(new JButton(cancelAction), GBC.std().insets(0, 0, 5, 0).fill(GBC.HORIZONTAL));
+        pnl.add(new JButton(cancelAction), GBC.std(1, 1).insets(5, 5, 5, 5). fill(GBC.HORIZONTAL));
 
         JPanel pnl2 = new JPanel();
@@ -363,4 +368,16 @@
     }
 
+    class SaveSessionAction extends SessionSaveAsAction {
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            try {
+                saveSession();
+                setUserAction(UserAction.PROCEED);
+                closeDialog();
+            } catch (CancelException ignore) {
+            }
+        }
+    }
+
     final class SaveAndProceedAction extends AbstractAction implements PropertyChangeListener {
         private static final int is = 24; // icon size
