Index: trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java	(revision 4532)
+++ trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java	(revision 4533)
@@ -41,4 +41,5 @@
                 "org.openstreetmap.josm.io.OsmImporter",
                 "org.openstreetmap.josm.io.OsmGzipImporter",
+                "org.openstreetmap.josm.io.OsmChangeImporter",
                 "org.openstreetmap.josm.io.GpxImporter",
                 "org.openstreetmap.josm.io.NMEAImporter",
Index: trunk/src/org/openstreetmap/josm/io/AllFormatsImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/AllFormatsImporter.java	(revision 4532)
+++ trunk/src/org/openstreetmap/josm/io/AllFormatsImporter.java	(revision 4533)
@@ -13,5 +13,5 @@
 public class AllFormatsImporter extends FileImporter {
     public AllFormatsImporter() {
-        super(new ExtensionFileFilter("osm,xml,osm.gz,osm.bz2,osm.bz,gpx,gpx.gz,nmea,nme,nma,log,txt,wms,jpg", "", tr("All Formats")
+        super(new ExtensionFileFilter("osm,xml,osm.gz,osm.bz2,osm.bz,osc,gpx,gpx.gz,nmea,nme,nma,log,txt,wms,jpg", "", tr("All Formats")
                     + " (*.gpx *.osm *.nmea *.jpg ...)"));
     }
Index: trunk/src/org/openstreetmap/josm/io/OsmChangeImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmChangeImporter.java	(revision 4533)
+++ trunk/src/org/openstreetmap/josm/io/OsmChangeImporter.java	(revision 4533)
@@ -0,0 +1,71 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.io;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.ExtensionFileFilter;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+
+public class OsmChangeImporter extends FileImporter {
+
+    public OsmChangeImporter() {
+        super(new ExtensionFileFilter("osc", "osc", tr("OsmChange File") + " (*.osc)"));
+    }
+
+    public OsmChangeImporter(ExtensionFileFilter filter) {
+        super(filter);
+    }
+
+    @Override public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
+        try {
+            FileInputStream in = new FileInputStream(file);
+            importData(in, file);
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+            throw new IOException(tr("File ''{0}'' does not exist.", file.getName()));
+        }
+    }
+
+    protected void importData(InputStream in, final File associatedFile) throws IllegalDataException {
+        final DataSet dataSet = OsmChangeReader.parseDataSet(in, NullProgressMonitor.INSTANCE);
+        final OsmDataLayer layer = new OsmDataLayer(dataSet, associatedFile.getName(), associatedFile);
+        addDataLayer(dataSet, layer, associatedFile.getPath()); 
+    }
+        
+    protected void addDataLayer(final DataSet dataSet, final OsmDataLayer layer, final String filePath) { 
+        // FIXME: remove UI stuff from IO subsystem
+        //
+        Runnable uiStuff = new Runnable() {
+            @Override
+            public void run() {
+                if (dataSet.allPrimitives().isEmpty()) {
+                    JOptionPane.showMessageDialog(
+                            Main.parent,
+                            tr("No data found in file {0}.", filePath),
+                            tr("Open OsmChange file"),
+                            JOptionPane.INFORMATION_MESSAGE);
+                }
+                Main.main.addLayer(layer);
+                layer.onPostLoadFromFile();
+            }
+        };
+        if (SwingUtilities.isEventDispatchThread()) {
+            uiStuff.run();
+        } else {
+            SwingUtilities.invokeLater(uiStuff);
+        }
+    }
+}
