Index: /trunk/src/org/openstreetmap/josm/actions/OpenLocationAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/OpenLocationAction.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/actions/OpenLocationAction.java	(revision 5361)
@@ -23,5 +23,6 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadGpsTask;
-import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmBzip2Task;
+import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmChangeCompressedTask;
+import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmCompressedTask;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmChangeTask;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
@@ -56,5 +57,6 @@
         addDownloadTaskClass(DownloadOsmChangeTask.class);
         addDownloadTaskClass(DownloadOsmUrlTask.class);
-        addDownloadTaskClass(DownloadOsmBzip2Task.class);
+        addDownloadTaskClass(DownloadOsmCompressedTask.class);
+        addDownloadTaskClass(DownloadOsmChangeCompressedTask.class);
     }
 
Index: unk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmBzip2Task.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmBzip2Task.java	(revision 5360)
+++ 	(revision )
@@ -1,52 +1,0 @@
-// License: GPL. Copyright 2007 by Immanuel Scholz and others
-package org.openstreetmap.josm.actions.downloadtasks;
-
-import java.util.concurrent.Future;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.gui.progress.ProgressMonitor;
-import org.openstreetmap.josm.io.OsmBzip2Importer;
-import org.openstreetmap.josm.io.OsmServerLocationReader;
-import org.openstreetmap.josm.io.OsmTransferException;
-
-public class DownloadOsmBzip2Task extends DownloadOsmTask {
-    
-    OsmBzip2Importer importer;
-    
-    /* (non-Javadoc)
-     * @see org.openstreetmap.josm.actions.downloadtasks.DownloadTask#acceptsUrl(java.lang.String)
-     */
-    @Override
-    public boolean acceptsUrl(String url) {
-        return url != null && url.matches("http://.*/.*\\.osm.bz2?"); // Remote .osm.bz / .osm.bz2 files
-    }
-    
-    /* (non-Javadoc)
-     * @see org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask#download(boolean, org.openstreetmap.josm.data.Bounds, org.openstreetmap.josm.gui.progress.ProgressMonitor)
-     */
-    @Override
-    public Future<?> download(boolean newLayer, Bounds downloadArea,
-            ProgressMonitor progressMonitor) {
-        return null;
-    }
-    
-    /**
-     * Loads a given URL
-     * @param True if the data should be saved to a new layer
-     * @param The URL as String
-     */
-    public Future<?> loadUrl(boolean new_layer, String url, ProgressMonitor progressMonitor) {
-        downloadTask = new DownloadTask(new_layer, new OsmServerLocationReader(url), progressMonitor) {
-            @Override
-            protected DataSet parseDataSet() throws OsmTransferException {
-                return reader.parseOsmBzip2(progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
-            }
-        };
-        currentBounds = null;
-        // Extract .osm.bz/bz2 filename from URL to set the new layer name
-        extractOsmFilename("http://.*/(.*\\.osm.bz2?)", url);
-        return Main.worker.submit(downloadTask);
-    }
-}
Index: /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeCompressedTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeCompressedTask.java	(revision 5361)
+++ /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeCompressedTask.java	(revision 5361)
@@ -0,0 +1,44 @@
+// License: GPL. Copyright 2007 by Immanuel Scholz and others
+package org.openstreetmap.josm.actions.downloadtasks;
+
+import java.util.concurrent.Future;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.io.OsmServerLocationReader;
+import org.openstreetmap.josm.io.OsmTransferException;
+
+public class DownloadOsmChangeCompressedTask extends DownloadOsmChangeTask {
+    
+    /* (non-Javadoc)
+     * @see org.openstreetmap.josm.actions.downloadtasks.DownloadTask#acceptsUrl(java.lang.String)
+     */
+    @Override
+    public boolean acceptsUrl(String url) {
+        return url != null && url.matches("http://.*/.*\\.osc.(gz|bz2?)"); // Remote .osc.gz / .osc.bz / .osc.bz2 files
+    }
+        
+    /**
+     * Loads a given URL
+     * @param True if the data should be saved to a new layer
+     * @param The URL as String
+     */
+    public Future<?> loadUrl(boolean new_layer, final String url, ProgressMonitor progressMonitor) {
+        downloadTask = new DownloadTask(new_layer, new OsmServerLocationReader(url), progressMonitor) {
+            @Override
+            protected DataSet parseDataSet() throws OsmTransferException {
+                ProgressMonitor subTaskMonitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
+                if (url.matches("http://.*/.*\\.osc.bz2?")) {
+                    return reader.parseOsmChangeBzip2(subTaskMonitor);
+                } else {
+                    return reader.parseOsmChangeGzip(subTaskMonitor);
+                }
+            }
+        };
+        currentBounds = null;
+        // Extract .osc.gz/bz/bz2 filename from URL to set the new layer name
+        extractOsmFilename("http://.*/(.*\\.osc.(gz|bz2?))", url);
+        return Main.worker.submit(downloadTask);
+    }
+}
Index: /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmCompressedTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmCompressedTask.java	(revision 5361)
+++ /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmCompressedTask.java	(revision 5361)
@@ -0,0 +1,54 @@
+// License: GPL. Copyright 2007 by Immanuel Scholz and others
+package org.openstreetmap.josm.actions.downloadtasks;
+
+import java.util.concurrent.Future;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.io.OsmServerLocationReader;
+import org.openstreetmap.josm.io.OsmTransferException;
+
+public class DownloadOsmCompressedTask extends DownloadOsmTask {
+    
+    /* (non-Javadoc)
+     * @see org.openstreetmap.josm.actions.downloadtasks.DownloadTask#acceptsUrl(java.lang.String)
+     */
+    @Override
+    public boolean acceptsUrl(String url) {
+        return url != null && url.matches("http://.*/.*\\.osm.(gz|bz2?)"); // Remote .osm.gz / .osm.bz / .osm.bz2 files
+    }
+    
+    /* (non-Javadoc)
+     * @see org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask#download(boolean, org.openstreetmap.josm.data.Bounds, org.openstreetmap.josm.gui.progress.ProgressMonitor)
+     */
+    @Override
+    public Future<?> download(boolean newLayer, Bounds downloadArea,
+            ProgressMonitor progressMonitor) {
+        return null;
+    }
+    
+    /**
+     * Loads a given URL
+     * @param True if the data should be saved to a new layer
+     * @param The URL as String
+     */
+    public Future<?> loadUrl(boolean new_layer, final String url, ProgressMonitor progressMonitor) {
+        downloadTask = new DownloadTask(new_layer, new OsmServerLocationReader(url), progressMonitor) {
+            @Override
+            protected DataSet parseDataSet() throws OsmTransferException {
+                ProgressMonitor subTaskMonitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
+                if (url.matches("http://.*/.*\\.osm.bz2?")) {
+                    return reader.parseOsmBzip2(subTaskMonitor);
+                } else {
+                    return reader.parseOsmGzip(subTaskMonitor);
+                }
+            }
+        };
+        currentBounds = null;
+        // Extract .osm.gz/bz/bz2 filename from URL to set the new layer name
+        extractOsmFilename("http://.*/(.*\\.osm.(gz|bz2?))", url);
+        return Main.worker.submit(downloadTask);
+    }
+}
Index: /trunk/src/org/openstreetmap/josm/io/FileImporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/FileImporter.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/FileImporter.java	(revision 5361)
@@ -4,10 +4,14 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.List;
+import java.util.zip.GZIPInputStream;
 
 import javax.swing.JOptionPane;
 
+import org.apache.tools.bzip2.CBZip2InputStream;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
@@ -97,4 +101,24 @@
         return (new Double(this.getPriority())).compareTo(other.getPriority());
     }
+    
+    public static CBZip2InputStream getBZip2InputStream(InputStream in) throws IOException {
+        if (in == null) {
+            return null;
+        }
+        BufferedInputStream bis = new BufferedInputStream(in);
+        int b = bis.read();
+        if (b != 'B')
+            throw new IOException(tr("Invalid bz2 file."));
+        b = bis.read();
+        if (b != 'Z')
+            throw new IOException(tr("Invalid bz2 file."));
+        return new CBZip2InputStream(bis);
+    }
 
+    public static GZIPInputStream getGZipInputStream(InputStream in) throws IOException {
+        if (in == null) {
+            return null;
+        }
+        return new GZIPInputStream(in);
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/io/GeoJSONExporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/GeoJSONExporter.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/GeoJSONExporter.java	(revision 5361)
@@ -12,6 +12,9 @@
 public class GeoJSONExporter extends FileExporter {
 
+    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
+            "json,geojson", "json", tr("GeoJSON Files") + " (*.json *.geojson)");
+    
     public GeoJSONExporter() {
-        super(new ExtensionFileFilter("json,geojson", "json", tr("GeoJSON Files") + " (*.json *.geojson)"));
+        super(FILE_FILTER);
     }
 
Index: /trunk/src/org/openstreetmap/josm/io/GpxExporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/GpxExporter.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/GpxExporter.java	(revision 5361)
@@ -27,5 +27,4 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.ExtensionFileFilter;
 import org.openstreetmap.josm.data.gpx.GpxData;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -43,5 +42,5 @@
 
     public GpxExporter() {
-        super(new ExtensionFileFilter("gpx,gpx.gz", "gpx", tr("GPX Files") + " (*.gpx *.gpx.gz)"));
+        super(GpxImporter.FILE_FILTER);
     }
 
Index: /trunk/src/org/openstreetmap/josm/io/GpxImporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/GpxImporter.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/GpxImporter.java	(revision 5361)
@@ -22,4 +22,7 @@
 public class GpxImporter extends FileImporter {
 
+    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
+            "gpx,gpx.gz", "gpx", tr("GPX Files") + " (*.gpx *.gpx.gz)");
+    
     protected static class GpxImporterData {
         public GpxLayer gpxLayer;
@@ -29,5 +32,5 @@
 
     public GpxImporter() {
-        super(new ExtensionFileFilter("gpx,gpx.gz", "gpx", tr("GPX Files") + " (*.gpx *.gpx.gz)"));
+        super(FILE_FILTER);
     }
 
Index: /trunk/src/org/openstreetmap/josm/io/JpgImporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/JpgImporter.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/JpgImporter.java	(revision 5361)
@@ -19,7 +19,10 @@
 public class JpgImporter extends FileImporter {
     private GpxLayer gpx;
+    
+    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
+            "jpg", "jpg", tr("Image Files") + " (*.jpg, "+ tr("folder")+")");
 
     public JpgImporter() {
-        super(new ExtensionFileFilter("jpg", "jpg", tr("Image Files") + " (*.jpg, "+ tr("folder")+")"));
+        super(FILE_FILTER);
     }
 
Index: /trunk/src/org/openstreetmap/josm/io/NMEAImporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/NMEAImporter.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/NMEAImporter.java	(revision 5361)
@@ -20,8 +20,9 @@
 public class NMEAImporter extends FileImporter {
 
+    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
+            "nmea,nme,nma,log,txt", "nmea", tr("NMEA-0183 Files") + " (*.nmea *.nme *.nma *.log *.txt)");
+    
     public NMEAImporter() {
-        super(
-                new ExtensionFileFilter("nmea,nme,nma,log,txt", "nmea", tr("NMEA-0183 Files")
-                        + " (*.nmea *.nme *.nma *.log *.txt)"));
+        super(FILE_FILTER);
     }
 
Index: /trunk/src/org/openstreetmap/josm/io/OsmBzip2Exporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmBzip2Exporter.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/OsmBzip2Exporter.java	(revision 5361)
@@ -1,6 +1,4 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.File;
@@ -11,10 +9,8 @@
 
 import org.apache.tools.bzip2.CBZip2OutputStream;
-import org.openstreetmap.josm.actions.ExtensionFileFilter;
 public class OsmBzip2Exporter extends OsmExporter {
 
     public OsmBzip2Exporter() {
-        super(new ExtensionFileFilter("osm.bz2, osm.bz", "osm.bz2", tr("OSM Server Files bzip2 compressed")
-                + " (*.osm.bz2 *.osm.bz)"));
+        super(OsmBzip2Importer.FILE_FILTER);
     }
 
Index: /trunk/src/org/openstreetmap/josm/io/OsmBzip2Importer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmBzip2Importer.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/OsmBzip2Importer.java	(revision 5361)
@@ -4,11 +4,8 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
 
-import org.apache.tools.bzip2.CBZip2InputStream;
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
@@ -16,7 +13,9 @@
 public class OsmBzip2Importer extends OsmImporter {
 
+    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
+            "osm.bz2,osm.bz", "osm.bz2", tr("OSM Server Files bzip2 compressed") + " (*.osm.bz2 *.osm.bz)");
+    
     public OsmBzip2Importer() {
-        super(new ExtensionFileFilter("osm.bz2,osm.bz", "osm.bz2", tr("OSM Server Files bzip2 compressed")
-                + " (*.osm.bz2 *.osm.bz)"));
+        super(FILE_FILTER);
     }
 
@@ -25,17 +24,3 @@
         importData(getBZip2InputStream(new FileInputStream(file)), file);
     }
-    
-    public static CBZip2InputStream getBZip2InputStream(InputStream in) throws IOException {
-        if (in == null) {
-            return null;
-        }
-        BufferedInputStream bis = new BufferedInputStream(in);
-        int b = bis.read();
-        if (b != 'B')
-            throw new IOException(tr("Invalid bz2 file."));
-        b = bis.read();
-        if (b != 'Z')
-            throw new IOException(tr("Invalid bz2 file."));
-        return new CBZip2InputStream(bis);
-    }
 }
Index: /trunk/src/org/openstreetmap/josm/io/OsmChangeImporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmChangeImporter.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/OsmChangeImporter.java	(revision 5361)
@@ -22,6 +22,9 @@
 public class OsmChangeImporter extends FileImporter {
 
+    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
+            "osc,osc.bz2,osc.bz,osc.gz", "osc", tr("OsmChange File") + " (*.osc *.osc.bz2 *.osc.bz *.osc.gz)");
+    
     public OsmChangeImporter() {
-        super(new ExtensionFileFilter("osc", "osc", tr("OsmChange File") + " (*.osc)"));
+        super(FILE_FILTER);
     }
 
@@ -33,5 +36,13 @@
         try {
             FileInputStream in = new FileInputStream(file);
-            importData(in, file);
+            
+            if (file.getName().endsWith(".osc")) {
+                importData(in, file);
+            } else if (file.getName().endsWith(".gz")) {
+                importData(getGZipInputStream(in), file);
+            } else {
+                importData(getBZip2InputStream(in), file);
+            }
+            
         } catch (FileNotFoundException e) {
             e.printStackTrace();
Index: /trunk/src/org/openstreetmap/josm/io/OsmExporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmExporter.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/OsmExporter.java	(revision 5361)
@@ -25,5 +25,5 @@
 
     public OsmExporter() {
-        super(new ExtensionFileFilter("osm,xml", "osm", tr("OSM Server Files") + " (*.osm *.xml)"));
+        super(OsmImporter.FILE_FILTER);
     }
 
Index: /trunk/src/org/openstreetmap/josm/io/OsmGzipExporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmGzipExporter.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/OsmGzipExporter.java	(revision 5361)
@@ -1,6 +1,4 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.File;
@@ -10,10 +8,8 @@
 import java.io.OutputStream;
 import java.util.zip.GZIPOutputStream;
-
-import org.openstreetmap.josm.actions.ExtensionFileFilter;
 public class OsmGzipExporter extends OsmExporter {
 
     public OsmGzipExporter() {
-        super(new ExtensionFileFilter("osm.gz", "osm.gz", tr("OSM Server Files gzip compressed") + " (*.osm.gz)"));
+        super(OsmGzipImporter.FILE_FILTER);
     }
 
Index: /trunk/src/org/openstreetmap/josm/io/OsmGzipImporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmGzipImporter.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/OsmGzipImporter.java	(revision 5361)
@@ -7,5 +7,4 @@
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.util.zip.GZIPInputStream;
 
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
@@ -14,12 +13,14 @@
 public class OsmGzipImporter extends OsmImporter {
 
+    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
+            "osm.gz", "osm.gz", tr("OSM Server Files gzip compressed") + " (*.osm.gz)");
+    
     public OsmGzipImporter() {
-        super(new ExtensionFileFilter("osm.gz", "osm.gz", tr("OSM Server Files gzip compressed") + " (*.osm.gz)"));
+        super(FILE_FILTER);
     }
 
     @Override
     public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
-        GZIPInputStream in = new GZIPInputStream(new FileInputStream(file));
-        importData(in, file);
+        importData(getGZipInputStream(new FileInputStream(file)), file);
     }
 }
Index: /trunk/src/org/openstreetmap/josm/io/OsmImporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmImporter.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/OsmImporter.java	(revision 5361)
@@ -22,4 +22,7 @@
 public class OsmImporter extends FileImporter {
 
+    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
+            "osm,xml", "osm", tr("OSM Server Files") + " (*.osm *.xml)");
+    
     public static class OsmImporterData {
 
@@ -42,5 +45,5 @@
 
     public OsmImporter() {
-        super(new ExtensionFileFilter("osm,xml", "osm", tr("OSM Server Files") + " (*.osm *.xml)"));
+        super(FILE_FILTER);
     }
 
Index: /trunk/src/org/openstreetmap/josm/io/OsmServerLocationReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmServerLocationReader.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/OsmServerLocationReader.java	(revision 5361)
@@ -6,4 +6,5 @@
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.zip.GZIPInputStream;
 
 import org.apache.tools.bzip2.CBZip2InputStream;
@@ -76,7 +77,25 @@
                 if (in == null)
                     return null;
-                CBZip2InputStream bzin = OsmBzip2Importer.getBZip2InputStream(in);
+                CBZip2InputStream bzin = FileImporter.getBZip2InputStream(in);
                 progressMonitor.subTask(tr("Downloading OSM data..."));
                 return OsmReader.parseDataSet(bzin, progressMonitor.createSubTaskMonitor(1, false));
+            }
+        }, progressMonitor);
+    }
+    
+    /**
+     * Method to download GZip-compressed OSM files from somewhere
+     */
+    @Override
+    public DataSet parseOsmGzip(final ProgressMonitor progressMonitor) throws OsmTransferException {
+        return doParse(new Parser<DataSet>() {
+            @Override
+            public DataSet parse() throws OsmTransferException, IllegalDataException, IOException {
+                in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false));
+                if (in == null)
+                    return null;
+                GZIPInputStream gzin = FileImporter.getGZipInputStream(in);
+                progressMonitor.subTask(tr("Downloading OSM data..."));
+                return OsmReader.parseDataSet(gzin, progressMonitor.createSubTaskMonitor(1, false));
             }
         }, progressMonitor);
@@ -97,4 +116,40 @@
                 progressMonitor.subTask(tr("Downloading OSM data..."));
                 return OsmChangeReader.parseDataSet(in, progressMonitor.createSubTaskMonitor(1, false));
+            }
+        }, progressMonitor);
+    }
+    
+    /**
+     * Method to download BZip2-compressed OSM Change files from somewhere
+     */
+    @Override
+    public DataSet parseOsmChangeBzip2(final ProgressMonitor progressMonitor) throws OsmTransferException {
+        return doParse(new Parser<DataSet>() {
+            @Override
+            public DataSet parse() throws OsmTransferException, IllegalDataException, IOException {
+                in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false));
+                if (in == null)
+                    return null;
+                CBZip2InputStream bzin = FileImporter.getBZip2InputStream(in);
+                progressMonitor.subTask(tr("Downloading OSM data..."));
+                return OsmChangeReader.parseDataSet(bzin, progressMonitor.createSubTaskMonitor(1, false));
+            }
+        }, progressMonitor);
+    }
+    
+    /**
+     * Method to download GZip-compressed OSM Change files from somewhere
+     */
+    @Override
+    public DataSet parseOsmChangeGzip(final ProgressMonitor progressMonitor) throws OsmTransferException {
+        return doParse(new Parser<DataSet>() {
+            @Override
+            public DataSet parse() throws OsmTransferException, IllegalDataException, IOException {
+                in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false));
+                if (in == null)
+                    return null;
+                GZIPInputStream gzin = FileImporter.getGZipInputStream(in);
+                progressMonitor.subTask(tr("Downloading OSM data..."));
+                return OsmChangeReader.parseDataSet(gzin, progressMonitor.createSubTaskMonitor(1, false));
             }
         }, progressMonitor);
Index: /trunk/src/org/openstreetmap/josm/io/OsmServerReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 5361)
@@ -151,5 +151,13 @@
         return null;
     }
-    
+
+    public DataSet parseOsmChangeBzip2(final ProgressMonitor progressMonitor) throws OsmTransferException {
+        return null;
+    }
+
+    public DataSet parseOsmChangeGzip(final ProgressMonitor progressMonitor) throws OsmTransferException {
+        return null;
+    }
+
     public GpxData parseRawGps(final ProgressMonitor progressMonitor) throws OsmTransferException {
         return null;
@@ -159,5 +167,9 @@
         return null;
     }
-    
+
+    public DataSet parseOsmGzip(final ProgressMonitor progressMonitor) throws OsmTransferException {
+        return null;
+    }
+
     /**
      * Returns true if this reader is adding authentication credentials to the read
Index: /trunk/src/org/openstreetmap/josm/io/WMSLayerExporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/WMSLayerExporter.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/WMSLayerExporter.java	(revision 5361)
@@ -2,12 +2,8 @@
 package org.openstreetmap.josm.io;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import org.openstreetmap.josm.actions.ExtensionFileFilter;
-
-public class WMSLayerExporter extends FileExporter{
+public class WMSLayerExporter extends FileExporter {
 
     public WMSLayerExporter() {
-        super(new ExtensionFileFilter("wms", "wms", tr("WMS Files (*.wms)")));
+        super(WMSLayerImporter.FILE_FILTER);
     }
 }
Index: /trunk/src/org/openstreetmap/josm/io/WMSLayerImporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/WMSLayerImporter.java	(revision 5360)
+++ /trunk/src/org/openstreetmap/josm/io/WMSLayerImporter.java	(revision 5361)
@@ -6,9 +6,11 @@
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
 
-public class WMSLayerImporter extends FileImporter{
+public class WMSLayerImporter extends FileImporter {
 
+    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
+            "wms", "wms", tr("WMS Files (*.wms)"));
+    
     public WMSLayerImporter() {
-        super(new ExtensionFileFilter("wms", "wms", tr("WMS Files (*.wms)")));
+        super(FILE_FILTER);
     }
-
 }
