diff --git a/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java b/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java
index 01d74ad..1d3baf2 100644
--- a/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java
+++ b/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java
@@ -52,13 +52,10 @@ public class ExtensionFileFilter extends FileFilter implements java.io.FileFilte
 
         final List<Class<? extends FileImporter>> importerNames = Arrays.asList(
                 org.openstreetmap.josm.io.OsmImporter.class,
-                org.openstreetmap.josm.io.OsmGzipImporter.class,
-                org.openstreetmap.josm.io.OsmZipImporter.class,
                 org.openstreetmap.josm.io.OsmChangeImporter.class,
                 org.openstreetmap.josm.io.GpxImporter.class,
                 org.openstreetmap.josm.io.NMEAImporter.class,
                 org.openstreetmap.josm.io.NoteImporter.class,
-                org.openstreetmap.josm.io.OsmBzip2Importer.class,
                 org.openstreetmap.josm.io.JpgImporter.class,
                 org.openstreetmap.josm.io.WMSLayerImporter.class,
                 org.openstreetmap.josm.io.AllFormatsImporter.class,
@@ -141,6 +138,8 @@ public class ExtensionFileFilter extends FileFilter implements java.io.FileFilte
         );
     }
 
+    public enum AddArchiveExtension { NONE, BASE, ALL }
+
     /**
      * Updates the {@link AllFormatsImporter} that is contained in the importers list. If
      * you do not use the importers variable directly, you don’t need to call this.
@@ -295,25 +294,56 @@ public class ExtensionFileFilter extends FileFilter implements java.io.FileFilte
      * @param extensions The comma-separated list of file extensions
      * @param defaultExtension The default extension
      * @param description A short textual description of the file type without supported extensions in parentheses
-     * @param addArchiveExtensionsToDescription Whether to also add the archive extensions to the description
+     * @param addArchiveExtension Whether to also add the archive extensions to the description
+     * @param archiveExtensions List of extensions to be added
      * @return The constructed filter
      */
     public static ExtensionFileFilter newFilterWithArchiveExtensions(
-            String extensions, String defaultExtension, String description, boolean addArchiveExtensionsToDescription) {
+            String extensions, String defaultExtension, String description, AddArchiveExtension addArchiveExtension, List<String> archiveExtensions) {
         final Collection<String> extensionsPlusArchive = new LinkedHashSet<>();
         final Collection<String> extensionsForDescription = new LinkedHashSet<>();
         for (String e : extensions.split(",")) {
             extensionsPlusArchive.add(e);
-            extensionsPlusArchive.add(e + ".gz");
-            extensionsPlusArchive.add(e + ".bz2");
-            extensionsForDescription.add("*." + e);
-            if (addArchiveExtensionsToDescription) {
-                extensionsForDescription.add("*." + e + ".gz");
-                extensionsForDescription.add("*." + e + ".bz2");
+            if (addArchiveExtension != AddArchiveExtension.NONE) {
+                extensionsForDescription.add("*." + e);
+            }
+            for (String extension : archiveExtensions) {
+                extensionsPlusArchive.add(e + '.' + extension);
+                if (addArchiveExtension == AddArchiveExtension.ALL) {
+                    extensionsForDescription.add("*." + e + '.' + extension);
+                }
             }
         }
-        return new ExtensionFileFilter(Utils.join(",", extensionsPlusArchive), defaultExtension,
-                description + " (" + Utils.join(", ", extensionsForDescription) + ")");
+        return new ExtensionFileFilter(
+            Utils.join(",", extensionsPlusArchive),
+            defaultExtension,
+            description + (!extensionsForDescription.isEmpty()
+                ? " (" + Utils.join(", ", extensionsForDescription) + ")"
+                : "")
+            );
+    }
+
+    /**
+     * Construct an extension file filter with the extensions supported by {@link org.openstreetmap.josm.io.Compression}
+     * automatically added to the {@code extensions}. The specified {@code extensions} will be added to the description
+     * in the form {@code old-description (*.ext1, *.ext2)}.
+     * @param extensions The comma-separated list of file extensions
+     * @param defaultExtension The default extension
+     * @param description A short textual description of the file type without supported extensions in parentheses
+     * @param addArchiveExtensionsToDescription Whether to also add the archive extensions to the description
+     * @return The constructed filter
+     */
+    public static ExtensionFileFilter newFilterWithArchiveExtensions(
+            String extensions, String defaultExtension, String description, boolean addArchiveExtensionsToDescription) {
+
+        List<String> archiveExtensions = Arrays.asList("gz", "bz2");
+        return newFilterWithArchiveExtensions(
+            extensions,
+            defaultExtension,
+            description,
+            addArchiveExtensionsToDescription ? AddArchiveExtension.ALL : AddArchiveExtension.BASE,
+            archiveExtensions
+        );
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/io/OsmBzip2Exporter.java b/src/org/openstreetmap/josm/io/OsmBzip2Exporter.java
index a3dd2f6..38a6e1a 100644
--- a/src/org/openstreetmap/josm/io/OsmBzip2Exporter.java
+++ b/src/org/openstreetmap/josm/io/OsmBzip2Exporter.java
@@ -1,6 +1,10 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import org.openstreetmap.josm.actions.ExtensionFileFilter;
+
 /**
  * OSM data exporter that compresses it in Bzip2 format.
  */
@@ -10,7 +14,8 @@ public class OsmBzip2Exporter extends OsmExporter {
      * Constructs a new {@code OsmBzip2Exporter}.
      */
     public OsmBzip2Exporter() {
-        super(OsmBzip2Importer.FILE_FILTER);
+        super(new ExtensionFileFilter(
+            "osm.bz2,osm.bz", "osm.bz2", tr("OSM Server Files bzip2 compressed") + " (*.osm.bz2, *.osm.bz)"));
     }
 
     // compression handling is performed in super-class
diff --git a/src/org/openstreetmap/josm/io/OsmBzip2Importer.java b/src/org/openstreetmap/josm/io/OsmBzip2Importer.java
deleted file mode 100644
index de84539..0000000
--- a/src/org/openstreetmap/josm/io/OsmBzip2Importer.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.io;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import org.openstreetmap.josm.actions.ExtensionFileFilter;
-
-/**
- * OSM data importer that uncompresses it from Bzip2 format.
- */
-public class OsmBzip2Importer extends OsmImporter {
-
-    /**
-     * File filter used to load/save Bzip2 compressed OSM files.
-     */
-    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
-            "osm.bz2,osm.bz", "osm.bz2", tr("OSM Server Files bzip2 compressed") + " (*.osm.bz2 *.osm.bz)");
-
-    /**
-     * Constructs a new {@code OsmBzip2Importer}.
-     */
-    public OsmBzip2Importer() {
-        super(FILE_FILTER);
-    }
-
-    // compression handling is performed in super-class
-
-}
diff --git a/src/org/openstreetmap/josm/io/OsmExporter.java b/src/org/openstreetmap/josm/io/OsmExporter.java
index 95d8ad3..40a7051 100644
--- a/src/org/openstreetmap/josm/io/OsmExporter.java
+++ b/src/org/openstreetmap/josm/io/OsmExporter.java
@@ -31,7 +31,8 @@ public class OsmExporter extends FileExporter {
      * Constructs a new {@code OsmExporter}.
      */
     public OsmExporter() {
-        super(OsmImporter.FILE_FILTER);
+        super(new ExtensionFileFilter(
+            "osm,xml", "osm", tr("OSM Server Files") + " (*.osm)"));
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/io/OsmGzipExporter.java b/src/org/openstreetmap/josm/io/OsmGzipExporter.java
index 77ca4e1..a2eea57 100644
--- a/src/org/openstreetmap/josm/io/OsmGzipExporter.java
+++ b/src/org/openstreetmap/josm/io/OsmGzipExporter.java
@@ -1,6 +1,10 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import org.openstreetmap.josm.actions.ExtensionFileFilter;
+
 /**
  * OSM data exporter that compresses it in GZip format.
  */
@@ -10,7 +14,8 @@ public class OsmGzipExporter extends OsmExporter {
      * Constructs a new {@code OsmGzipExporter}.
      */
     public OsmGzipExporter() {
-        super(OsmGzipImporter.FILE_FILTER);
+        super(new ExtensionFileFilter(
+            "osm.gz", "osm.gz", tr("OSM Server Files gzip compressed") + " (*.osm.gz)"));
     }
 
     // compression handling is performed in super-class
diff --git a/src/org/openstreetmap/josm/io/OsmGzipImporter.java b/src/org/openstreetmap/josm/io/OsmGzipImporter.java
deleted file mode 100644
index 9ab1df7..0000000
--- a/src/org/openstreetmap/josm/io/OsmGzipImporter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.io;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import org.openstreetmap.josm.actions.ExtensionFileFilter;
-
-/**
- * OSM data importer that uncompresses it from Gzip format.
- */
-public class OsmGzipImporter extends OsmImporter {
-
-    /**
-     * File filter used to load/save Gzip compressed OSM files.
-     */
-    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
-            "osm.gz", "osm.gz", tr("OSM Server Files gzip compressed") + " (*.osm.gz)");
-
-    /**
-     * Constructs a new {@code OsmGzipImporter}.
-     */
-    public OsmGzipImporter() {
-        super(FILE_FILTER);
-    }
-
-    // compression handling is performed in super-class
-
-}
diff --git a/src/org/openstreetmap/josm/io/OsmImporter.java b/src/org/openstreetmap/josm/io/OsmImporter.java
index fa54c0b..5e833c7 100644
--- a/src/org/openstreetmap/josm/io/OsmImporter.java
+++ b/src/org/openstreetmap/josm/io/OsmImporter.java
@@ -7,6 +7,7 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Arrays;
 
 import javax.swing.JOptionPane;
 
@@ -23,8 +24,8 @@ public class OsmImporter extends FileImporter {
     /**
      * The OSM file filter (*.osm and *.xml files).
      */
-    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
-            "osm,xml", "osm", tr("OSM Server Files") + " (*.osm *.xml)");
+    public static final ExtensionFileFilter FILE_FILTER = ExtensionFileFilter.newFilterWithArchiveExtensions(
+            "osm,xml", "osm", tr("OSM Server Files") + " (*.osm, *.osm.gz, *.osm.bz2, *.osm.zip, *.xml)", ExtensionFileFilter.AddArchiveExtension.NONE, Arrays.asList("gz", "bz", "bz2", "zip"));
 
     /**
      * Utility class containing imported OSM layer, and a task to run after it is added to MapView.
diff --git a/src/org/openstreetmap/josm/io/OsmZipImporter.java b/src/org/openstreetmap/josm/io/OsmZipImporter.java
deleted file mode 100644
index d9b4e6d..0000000
--- a/src/org/openstreetmap/josm/io/OsmZipImporter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.io;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import org.openstreetmap.josm.actions.ExtensionFileFilter;
-
-/**
- * OSM data importer that uncompresses it from Zip format.
- * @since 6882
- */
-public class OsmZipImporter extends OsmImporter {
-
-    /**
-     * File filter used to load/save Zip compressed OSM files.
-     */
-    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
-            "osm.zip", "osm.zip", tr("OSM Server Files zip compressed") + " (*.osm.zip)");
-
-    /**
-     * Constructs a new {@code OsmZipImporter}.
-     */
-    public OsmZipImporter() {
-        super(FILE_FILTER);
-    }
-
-    // compression handling is performed in super-class
-}
