Index: trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java	(revision 10406)
+++ trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java	(revision 10407)
@@ -34,5 +34,5 @@
      * @since 4869
      */
-    public static final ArrayList<FileImporter> importers;
+    private static final ArrayList<FileImporter> importers;
 
     /**
@@ -40,5 +40,5 @@
      * @since 4869
      */
-    public static final ArrayList<FileExporter> exporters;
+    private static final ArrayList<FileExporter> exporters;
 
     // add some file types only if the relevant classes are there.
@@ -140,4 +140,66 @@
 
     /**
+     * Adds a new file importer at the end of the global list. This importer will be evaluated after core ones.
+     * @param importer new file importer
+     * @since 10407
+     */
+    public static void addImporter(FileImporter importer) {
+        if (importer != null) {
+            importers.add(importer);
+        }
+    }
+
+    /**
+     * Adds a new file importer at the beginning of the global list. This importer will be evaluated before core ones.
+     * @param importer new file importer
+     * @since 10407
+     */
+    public static void addImporterFirst(FileImporter importer) {
+        if (importer != null) {
+            importers.add(0, importer);
+        }
+    }
+
+    /**
+     * Adds a new file exporter at the end of the global list. This exporter will be evaluated after core ones.
+     * @param exporter new file exporter
+     * @since 10407
+     */
+    public static void addExporter(FileExporter exporter) {
+        if (exporter != null) {
+            exporters.add(exporter);
+        }
+    }
+
+    /**
+     * Adds a new file exporter at the beginning of the global list. This exporter will be evaluated before core ones.
+     * @param exporter new file exporter
+     * @since 10407
+     */
+    public static void addExporterFirst(FileExporter exporter) {
+        if (exporter != null) {
+            exporters.add(0, exporter);
+        }
+    }
+
+    /**
+     * Returns the list of file importers.
+     * @return unmodifiable list of file importers
+     * @since 10407
+     */
+    public static List<FileImporter> getImporters() {
+        return Collections.unmodifiableList(importers);
+    }
+
+    /**
+     * Returns the list of file exporters.
+     * @return unmodifiable list of file exporters
+     * @since 10407
+     */
+    public static List<FileExporter> getExporters() {
+        return Collections.unmodifiableList(exporters);
+    }
+
+    /**
      * 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.
Index: trunk/src/org/openstreetmap/josm/actions/GpxExportAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/GpxExportAction.java	(revision 10406)
+++ trunk/src/org/openstreetmap/josm/actions/GpxExportAction.java	(revision 10407)
@@ -85,5 +85,5 @@
             return;
 
-        for (FileExporter exporter : ExtensionFileFilter.exporters) {
+        for (FileExporter exporter : ExtensionFileFilter.getExporters()) {
             if (exporter.acceptFile(file, layer)) {
                 try {
Index: trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java	(revision 10406)
+++ trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java	(revision 10407)
@@ -238,5 +238,5 @@
             FileImporter chosenImporter = null;
             if (fileFilter != null) {
-                for (FileImporter importer : ExtensionFileFilter.importers) {
+                for (FileImporter importer : ExtensionFileFilter.getImporters()) {
                     if (fileFilter.equals(importer.filter)) {
                         chosenImporter = importer;
@@ -291,5 +291,5 @@
                 List<File> urlFiles = new LinkedList<>();
                 FILES: for (File f : files) {
-                    for (FileImporter importer : ExtensionFileFilter.importers) {
+                    for (FileImporter importer : ExtensionFileFilter.getImporters()) {
                         if (importer.acceptFile(f)) {
                             importerMap.put(importer, f);
Index: trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java	(revision 10406)
+++ trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java	(revision 10407)
@@ -93,5 +93,5 @@
             boolean exported = false;
             boolean canceled = false;
-            for (FileExporter exporter : ExtensionFileFilter.exporters) {
+            for (FileExporter exporter : ExtensionFileFilter.getExporters()) {
                 if (exporter.acceptFile(file, layer)) {
                     exporter.exportData(file, layer);
Index: trunk/src/org/openstreetmap/josm/io/AllFormatsImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/AllFormatsImporter.java	(revision 10406)
+++ trunk/src/org/openstreetmap/josm/io/AllFormatsImporter.java	(revision 10407)
@@ -31,5 +31,5 @@
      */
     private static String getAllExtensions() {
-        Iterator<FileImporter> imp = ExtensionFileFilter.importers.iterator();
+        Iterator<FileImporter> imp = ExtensionFileFilter.getImporters().iterator();
         StringBuilder ext = new StringBuilder();
         while (imp.hasNext()) {
