Index: trunk/src/org/openstreetmap/josm/gui/io/importexport/GeoJSONImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/importexport/GeoJSONImporter.java	(revision 18806)
+++ trunk/src/org/openstreetmap/josm/gui/io/importexport/GeoJSONImporter.java	(revision 18807)
@@ -4,34 +4,24 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Arrays;
-import java.util.Locale;
 
-import javax.swing.JOptionPane;
-
-import jakarta.json.JsonException;
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
-import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.io.Compression;
 import org.openstreetmap.josm.io.GeoJSONReader;
 import org.openstreetmap.josm.io.IllegalDataException;
-import org.openstreetmap.josm.tools.Logging;
-import org.openstreetmap.josm.tools.Utils;
 
 /**
  * GeoJSON file importer.
  * @author Ian Dees &lt;ian.dees@gmail.com&gt;
- * @author matthieun &lt;https://github.com/matthieun&gt;
- * @since 15424
+ * @author <a href="https://github.com/matthieun">matthieun</a>
+ * @since 15424, extends {@link OsmImporter} since 18807
  */
-public class GeoJSONImporter extends FileImporter {
+public class GeoJSONImporter extends OsmImporter {
 
     private static final ExtensionFileFilter FILE_FILTER = ExtensionFileFilter.newFilterWithArchiveExtensions(
@@ -46,24 +36,4 @@
     }
 
-    @Override
-    public void importData(final File file, final ProgressMonitor progressMonitor) {
-        progressMonitor.beginTask(tr("Loading json file…"));
-        progressMonitor.setTicksCount(2);
-        Logging.info("Parsing GeoJSON: {0}", file.getAbsolutePath());
-        try (InputStream fileInputStream = Compression.getUncompressedFileInputStream(file)) {
-            DataSet data = GeoJSONReader.parseDataSet(fileInputStream, progressMonitor);
-            progressMonitor.worked(1);
-            MainApplication.getLayerManager().addLayer(new OsmDataLayer(data, file.getName(), file));
-        } catch (IOException | IllegalArgumentException | IllegalDataException | JsonException e) {
-            Logging.error("Error while reading json file!");
-            Logging.error(e);
-            String message = tr("Error loading geojson file {0}", file.getAbsolutePath())
-                    + tr(" ({0})", Utils.getSizeString(file.length(), Locale.getDefault()));
-            GuiHelper.runInEDT(() -> JOptionPane.showMessageDialog(null, message, tr("Error"), JOptionPane.WARNING_MESSAGE));
-        } finally {
-            progressMonitor.finishTask();
-        }
-    }
-
     /**
      * Parse GeoJSON dataset.
@@ -72,10 +42,17 @@
      * @throws IOException in case of I/O error
      * @throws IllegalDataException if an error was found while parsing the data from the source
+     * @deprecated since 18807, use {@link #parseDataSet(InputStream, ProgressMonitor)} instead
      */
+    @Deprecated
     public DataSet parseDataSet(final String source) throws IOException, IllegalDataException {
         try (CachedFile cf = new CachedFile(source)) {
             InputStream fileInputStream = Compression.getUncompressedFileInputStream(cf.getFile()); // NOPMD
-            return GeoJSONReader.parseDataSet(fileInputStream, NullProgressMonitor.INSTANCE);
+            return this.parseDataSet(fileInputStream, NullProgressMonitor.INSTANCE);
         }
     }
+
+    @Override
+    protected DataSet parseDataSet(InputStream in, ProgressMonitor progressMonitor) throws IllegalDataException {
+        return GeoJSONReader.parseDataSet(in, progressMonitor);
+    }
 }
Index: trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java	(revision 18806)
+++ trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java	(revision 18807)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -13,4 +14,6 @@
 import javax.xml.xpath.XPathFactory;
 
+import org.openstreetmap.josm.actions.ExtensionFileFilter;
+import org.openstreetmap.josm.gui.io.importexport.FileImporter;
 import org.openstreetmap.josm.gui.io.importexport.OsmImporter;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -31,5 +34,12 @@
     public Layer load(Element elem, ImportSupport support, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
         checkMetaVersion(elem);
-        String fileStr = extractFileName(elem, support);
+        final String fileStr = extractFileName(elem, support);
+        final File file = new File(fileStr);
+        for (FileImporter importer : ExtensionFileFilter.getImporters()) {
+            if (importer instanceof OsmImporter && importer.acceptFile(file)) {
+                return importData((OsmImporter) importer, support, fileStr, progressMonitor);
+            }
+        }
+        // Fall back to the default OsmImporter, just in case. It will probably fail.
         return importData(new OsmImporter(), support, fileStr, progressMonitor);
     }
