Index: trunk/src/org/openstreetmap/josm/actions/GpxExportAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/GpxExportAction.java	(revision 5454)
+++ trunk/src/org/openstreetmap/josm/actions/GpxExportAction.java	(revision 5456)
@@ -19,4 +19,5 @@
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.io.FileExporter;
+import org.openstreetmap.josm.io.GpxImporter;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -73,5 +74,5 @@
             throw new IllegalArgumentException(MessageFormat.format("Expected instance of OsmDataLayer or GpxLayer. Got ''{0}''.", layer.getClass().getName()));
 
-        File file = createAndOpenSaveFileChooser(tr("Export GPX file"), "gpx");
+        File file = createAndOpenSaveFileChooser(tr("Export GPX file"), GpxImporter.FILE_FILTER);
         if (file == null)
             return;
Index: trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java	(revision 5454)
+++ trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java	(revision 5456)
@@ -23,4 +23,5 @@
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.io.FileExporter;
+import org.openstreetmap.josm.io.GpxImporter;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -142,5 +143,5 @@
             return createAndOpenSaveFileChooser(tr("Save OSM file"), "osm");
         else if (layer instanceof GpxLayer)
-            return createAndOpenSaveFileChooser(tr("Save GPX file"), "gpx");
+            return createAndOpenSaveFileChooser(tr("Save GPX file"), GpxImporter.FILE_FILTER);
         return createAndOpenSaveFileChooser(tr("Save Layer"), "lay");
     }
@@ -181,9 +182,35 @@
     }
 
+    /**
+     * Creates a new "Save" dialog for a single {@link ExtensionFileFilter} and makes it visible.<br/>
+     * When the user has chosen a file, checks the file extension, and confirms overwrite if needed.
+     * 
+     * @param title The dialog title
+     * @param filter The dialog file filter
+     * @return The output {@code File}
+     * @since 5456
+     * @see DiskAccessAction#createAndOpenFileChooser(boolean, boolean, String, FileFilter, int, String)
+     */
+    public static File createAndOpenSaveFileChooser(String title, ExtensionFileFilter filter) {
+        JFileChooser fc = createAndOpenFileChooser(false, false, title, filter, JFileChooser.FILES_ONLY, null);
+        return checkFileAndConfirmOverWrite(fc, filter.getDefaultExtension());
+    }
+
+    /**
+     * Creates a new "Save" dialog for a given file extension and makes it visible.<br/>
+     * When the user has chosen a file, checks the file extension, and confirms overwrite if needed.
+     * 
+     * @param title The dialog title
+     * @param extension The file extension
+     * @return The output {@code File}
+     * @see DiskAccessAction#createAndOpenFileChooser(boolean, boolean, String, String)
+     */
     public static File createAndOpenSaveFileChooser(String title, String extension) {
-
         JFileChooser fc = createAndOpenFileChooser(false, false, title, extension);
-        if (fc == null) return null; 
-
+        return checkFileAndConfirmOverWrite(fc, extension);
+    }
+    
+    private static File checkFileAndConfirmOverWrite(JFileChooser fc, String extension) {
+        if (fc == null) return null;
         File file = fc.getSelectedFile();
         String fn = file.getPath();
@@ -193,5 +220,5 @@
             if (ff instanceof ExtensionFileFilter) {
                 fn += "." + ((ExtensionFileFilter)ff).getDefaultExtension();
-            } else if(extension != null) {
+            } else if (extension != null) {
                 fn += "." + extension;
             }
