Index: trunk/src/org/openstreetmap/josm/actions/DiskAccessAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/DiskAccessAction.java	(revision 18134)
+++ trunk/src/org/openstreetmap/josm/actions/DiskAccessAction.java	(revision 18135)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.util.Collection;
@@ -7,6 +9,9 @@
 import javax.swing.filechooser.FileFilter;
 
+import org.openstreetmap.josm.gui.Notification;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
 import org.openstreetmap.josm.gui.widgets.FileChooserManager;
+import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -137,3 +142,28 @@
                 .openFileChooser();
     }
+
+    /**
+     * Show "saving file ..." notification and returns it, for future replacement.
+     * @param filename filename of file to save
+     * @return {@link Notification} to provide to {@link #showSavedNotification} once saving is successful
+     * @since 18135
+     */
+    protected static Notification showSavingNotification(String filename) {
+        Notification savingNotification = new Notification(tr("Saving file {0}...", filename)).setIcon(ImageProvider.get("save"));
+        GuiHelper.runInEDT(savingNotification::show);
+        return savingNotification;
+    }
+
+    /**
+     * Show "Successfully saved file" notification and returns it.
+     * @param savingNotification {@link Notification} returned by {@link #showSavingNotification}
+     * @param filename filename of file saved
+     * @return {@code Notification} displayed
+     * @since 18135
+     */
+    protected static Notification showSavedNotification(Notification savingNotification, String filename) {
+        Notification doneNotification = new Notification(tr("Successfully saved file {0}", filename)).setIcon(ImageProvider.get("save"));
+        GuiHelper.runInEDT(() -> doneNotification.replaceExisting(savingNotification));
+        return doneNotification;
+    }
 }
Index: trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java	(revision 18134)
+++ trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java	(revision 18135)
@@ -12,5 +12,4 @@
 import java.util.List;
 
-import javax.swing.ImageIcon;
 import javax.swing.JFileChooser;
 import javax.swing.JOptionPane;
@@ -27,5 +26,4 @@
 import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
 import org.openstreetmap.josm.spi.preferences.Config;
-import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -137,7 +135,5 @@
             return false;
 
-        ImageIcon icon = ImageProvider.get("save");
-        Notification savingNotification = new Notification(tr("Saving file {0}...", file.getName())).setIcon(icon);
-        GuiHelper.runInEDT(savingNotification::show);
+        Notification savingNotification = showSavingNotification(file.getName());
         try {
             boolean exported = false;
@@ -175,6 +171,5 @@
         }
         addToFileOpenHistory(file);
-        Notification doneNotification = new Notification(tr("Successfully saved file {0}", file.getName())).setIcon(icon);
-        GuiHelper.runInEDT(() -> doneNotification.replaceExisting(savingNotification));
+        showSavedNotification(savingNotification, file.getName());
         return true;
     }
Index: trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java	(revision 18134)
+++ trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java	(revision 18135)
@@ -38,4 +38,5 @@
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapFrameListener;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.util.WindowGeometry;
@@ -166,6 +167,8 @@
         SessionWriter sw = new SessionWriter(layersOut, active, exporters, dependencies, zip);
         try {
+            Notification savingNotification = showSavingNotification(file.getName());
             sw.write(file);
             SaveActionBase.addToFileOpenHistory(file);
+            showSavedNotification(savingNotification, file.getName());
         } catch (IOException ex) {
             Logging.error(ex);
