Index: /applications/editors/josm/plugins/openjfx/.classpath
===================================================================
--- /applications/editors/josm/plugins/openjfx/.classpath	(revision 34622)
+++ /applications/editors/josm/plugins/openjfx/.classpath	(revision 34623)
@@ -4,37 +4,37 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/JOSM"/>
-	<classpathentry exported="true" kind="lib" path="lib/javafx-base-11-ea+23-win.jar" sourcepath="lib/javafx-base-11-ea+23-sources.jar">
+	<classpathentry exported="true" kind="lib" path="lib/javafx-base-11-ea+25-win.jar" sourcepath="lib/javafx-base-11-ea+25-sources.jar">
 		<attributes>
-			<attribute name="javadoc_location" value="jar:platform:/resource/JOSM-openjfx/lib/javafx-base-11-ea+23-javadoc.jar!/"/>
+			<attribute name="javadoc_location" value="jar:platform:/resource/JOSM-openjfx/lib/javafx-base-11-ea+25-javadoc.jar!/"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry exported="true" kind="lib" path="lib/javafx-controls-11-ea+23-win.jar" sourcepath="lib/javafx-controls-11-ea+23-sources.jar">
+	<classpathentry exported="true" kind="lib" path="lib/javafx-controls-11-ea+25-win.jar" sourcepath="lib/javafx-controls-11-ea+25-sources.jar">
 		<attributes>
-			<attribute name="javadoc_location" value="jar:platform:/resource/JOSM-openjfx/lib/javafx-controls-11-ea+23-javadoc.jar!/"/>
+			<attribute name="javadoc_location" value="jar:platform:/resource/JOSM-openjfx/lib/javafx-controls-11-ea+25-javadoc.jar!/"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry exported="true" kind="lib" path="lib/javafx-fxml-11-ea+23-win.jar" sourcepath="lib/javafx-fxml-11-ea+23-sources.jar">
+	<classpathentry exported="true" kind="lib" path="lib/javafx-fxml-11-ea+25-win.jar" sourcepath="lib/javafx-fxml-11-ea+25-sources.jar">
 		<attributes>
-			<attribute name="javadoc_location" value="jar:platform:/resource/JOSM-openjfx/lib/javafx-fxml-11-ea+23-javadoc.jar!/"/>
+			<attribute name="javadoc_location" value="jar:platform:/resource/JOSM-openjfx/lib/javafx-fxml-11-ea+25-javadoc.jar!/"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry exported="true" kind="lib" path="lib/javafx-graphics-11-ea+23-win.jar" sourcepath="lib/javafx-graphics-11-ea+23-sources.jar">
+	<classpathentry exported="true" kind="lib" path="lib/javafx-graphics-11-ea+25-win.jar" sourcepath="lib/javafx-graphics-11-ea+25-sources.jar">
 		<attributes>
-			<attribute name="javadoc_location" value="jar:platform:/resource/JOSM-openjfx/lib/javafx-graphics-11-ea+23-javadoc.jar!/"/>
+			<attribute name="javadoc_location" value="jar:platform:/resource/JOSM-openjfx/lib/javafx-graphics-11-ea+25-javadoc.jar!/"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry exported="true" kind="lib" path="lib/javafx-media-11-ea+23-win.jar" sourcepath="lib/javafx-media-11-ea+23-sources.jar">
+	<classpathentry exported="true" kind="lib" path="lib/javafx-media-11-ea+25-win.jar" sourcepath="lib/javafx-media-11-ea+25-sources.jar">
 		<attributes>
-			<attribute name="javadoc_location" value="jar:platform:/resource/JOSM-openjfx/lib/javafx-media-11-ea+23-javadoc.jar!/"/>
+			<attribute name="javadoc_location" value="jar:platform:/resource/JOSM-openjfx/lib/javafx-media-11-ea+25-javadoc.jar!/"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry exported="true" kind="lib" path="lib/javafx-swing-11-ea+23-win.jar" sourcepath="lib/javafx-swing-11-ea+23-sources.jar">
+	<classpathentry exported="true" kind="lib" path="lib/javafx-swing-11-ea+25-win.jar" sourcepath="lib/javafx-swing-11-ea+25-sources.jar">
 		<attributes>
-			<attribute name="javadoc_location" value="jar:platform:/resource/JOSM-openjfx/lib/javafx-swing-11-ea+23-javadoc.jar!/"/>
+			<attribute name="javadoc_location" value="jar:platform:/resource/JOSM-openjfx/lib/javafx-swing-11-ea+25-javadoc.jar!/"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry exported="true" kind="lib" path="lib/javafx-web-11-ea+23-win.jar" sourcepath="lib/javafx-web-11-ea+23-sources.jar">
+	<classpathentry exported="true" kind="lib" path="lib/javafx-web-11-ea+25-win.jar" sourcepath="lib/javafx-web-11-ea+25-sources.jar">
 		<attributes>
-			<attribute name="javadoc_location" value="jar:platform:/resource/JOSM-openjfx/lib/javafx-web-11-ea+23-javadoc.jar!/"/>
+			<attribute name="javadoc_location" value="jar:platform:/resource/JOSM-openjfx/lib/javafx-web-11-ea+25-javadoc.jar!/"/>
 		</attributes>
 	</classpathentry>
Index: /applications/editors/josm/plugins/openjfx/.settings/org.eclipse.jdt.ui.prefs
===================================================================
--- /applications/editors/josm/plugins/openjfx/.settings/org.eclipse.jdt.ui.prefs	(revision 34623)
+++ /applications/editors/josm/plugins/openjfx/.settings/org.eclipse.jdt.ui.prefs	(revision 34623)
@@ -0,0 +1,60 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
Index: /applications/editors/josm/plugins/openjfx/README
===================================================================
--- /applications/editors/josm/plugins/openjfx/README	(revision 34622)
+++ /applications/editors/josm/plugins/openjfx/README	(revision 34623)
@@ -1,4 +1,4 @@
 README 
 ======
-This plugin provides the openjfx library for JOSM plugins.
+This plugin provides the openjfx (JavaFX) library for JOSM plugins.
     * Licensed under GPL v3 (see LICENSE)
Index: /applications/editors/josm/plugins/openjfx/build.xml
===================================================================
--- /applications/editors/josm/plugins/openjfx/build.xml	(revision 34622)
+++ /applications/editors/josm/plugins/openjfx/build.xml	(revision 34623)
@@ -4,5 +4,5 @@
     <property name="commit.message" value="Commit message"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
-    <property name="plugin.main.version" value="14183"/>
+    <property name="plugin.main.version" value="14234"/>
 
 	<!-- Configure these properties (replace "..." accordingly).
@@ -10,5 +10,5 @@
     -->
     <property name="plugin.author" value="Don-vip"/>
-    <property name="plugin.class" value="org.openstreetmap.josm.plugins.jaxb.OpenJfxPlugin"/>
+    <property name="plugin.class" value="org.openstreetmap.josm.plugins.openjfx.OpenJfxPlugin"/>
     <property name="plugin.description" value="Provides the OpenJFX (JavaFX) library for JOSM core and other JOSM plugins. Provides additional features such as MP3 audio playback."/>
     <property name="plugin.minimum.java.version" value="11"/>
@@ -25,3 +25,59 @@
 		<!-- include fetch_dependencies task -->
 	</target>
+
+    <!-- Override build-jar target to speed up merging from 16 minutes to 7 minutes -->
+    <target name="build-jar">
+        <echo>Building commong jar...</echo>
+        <jar destfile="${plugin.jar}" basedir="${plugin.build.dir}" manifest="MANIFEST" manifestencoding="UTF-8" duplicate="preserve" level="9">
+            <restrict>
+                <not><or>
+                    <name name="META-INF/maven/*"/>
+                    <name name="META-INF/DEPENDENCIES"/>
+                    <name name="META-INF/LICENSE"/>
+                    <name name="META-INF/NOTICE"/>
+                    <name name="META-INF/*.RSA"/>
+                    <name name="META-INF/*.SF"/>
+                    <name name="module-info.class"/>
+                </or></not>
+                <archives>
+                    <zips>
+                        <fileset dir="${plugin.lib.dir}" includes="*-linux.jar"/>
+                    </zips>
+                </archives>
+            </restrict>
+        </jar>
+        <echo>Adding macOS artifacts...</echo>
+        <jar destfile="${plugin.jar}" update="true" duplicate="preserve" level="9">
+            <restrict>
+                <or>
+                    <name name="*.dylib"/>
+                    <name name="com/sun/glass/events/mac/**"/>
+                    <name name="com/sun/glass/ui/mac/**"/>
+                    <name name="com/sun/media/jfxmediaimpl/platform/osx/**"/>
+                    <name name="com/sun/prism/es2/**"/>
+                </or>
+                <archives>
+                    <zips>
+                        <fileset dir="${plugin.lib.dir}" includes="*-mac.jar"/>
+                    </zips>
+                </archives>
+            </restrict>
+        </jar>
+        <echo>Adding Windows artifacts...</echo>
+        <jar destfile="${plugin.jar}" update="true" duplicate="preserve" level="9">
+            <restrict>
+                <or>
+                    <name name="*.dll"/>
+                    <name name="com/sun/glass/ui/win/**"/>
+                    <name name="com/sun/prism/d3d/**"/>
+                    <name name="com/sun/scenario/effect/impl/hw/d3d/**"/>
+                </or>
+                <archives>
+                    <zips>
+                        <fileset dir="${plugin.lib.dir}" includes="*-win.jar"/>
+                    </zips>
+                </archives>
+            </restrict>
+        </jar>
+    </target>
 </project>
Index: /applications/editors/josm/plugins/openjfx/ivy.xml
===================================================================
--- /applications/editors/josm/plugins/openjfx/ivy.xml	(revision 34622)
+++ /applications/editors/josm/plugins/openjfx/ivy.xml	(revision 34623)
@@ -5,5 +5,5 @@
 	</configurations>
 	<dependencies>
-        <dependency org="org.openjfx" name="javafx-swing" rev="11-ea+23">
+        <dependency org="org.openjfx" name="javafx-swing" rev="11-ea+25">
             <artifact name="javafx-swing" type="jar" m:classifier="linux"/>
             <artifact name="javafx-swing" type="jar" m:classifier="mac"/>
@@ -12,5 +12,5 @@
             <artifact name="javafx-swing" type="jar" m:classifier="javadoc"/>
         </dependency>
-        <dependency org="org.openjfx" name="javafx-fxml" rev="11-ea+23">
+        <dependency org="org.openjfx" name="javafx-fxml" rev="11-ea+25">
             <artifact name="javafx-fxml" type="jar" m:classifier="linux"/>
             <artifact name="javafx-fxml" type="jar" m:classifier="mac"/>
@@ -19,5 +19,5 @@
             <artifact name="javafx-fxml" type="jar" m:classifier="javadoc"/>
         </dependency>
-        <dependency org="org.openjfx" name="javafx-web" rev="11-ea+23">
+        <dependency org="org.openjfx" name="javafx-web" rev="11-ea+25">
             <artifact name="javafx-web" type="jar" m:classifier="linux"/>
             <artifact name="javafx-web" type="jar" m:classifier="mac"/>
@@ -26,5 +26,5 @@
             <artifact name="javafx-web" type="jar" m:classifier="javadoc"/>
         </dependency>
-        <dependency org="org.openjfx" name="javafx-media" rev="11-ea+23">
+        <dependency org="org.openjfx" name="javafx-media" rev="11-ea+25">
             <artifact name="javafx-media" type="jar" m:classifier="linux"/>
             <artifact name="javafx-media" type="jar" m:classifier="mac"/>
@@ -33,5 +33,5 @@
             <artifact name="javafx-media" type="jar" m:classifier="javadoc"/>
         </dependency>
-        <dependency org="org.openjfx" name="javafx-controls" rev="11-ea+23">
+        <dependency org="org.openjfx" name="javafx-controls" rev="11-ea+25">
             <artifact name="javafx-controls" type="jar" m:classifier="linux"/>
             <artifact name="javafx-controls" type="jar" m:classifier="mac"/>
@@ -40,5 +40,5 @@
             <artifact name="javafx-controls" type="jar" m:classifier="javadoc"/>
         </dependency>
-        <dependency org="org.openjfx" name="javafx-base" rev="11-ea+23">
+        <dependency org="org.openjfx" name="javafx-base" rev="11-ea+25">
             <artifact name="javafx-base" type="jar" m:classifier="linux"/>
             <artifact name="javafx-base" type="jar" m:classifier="mac"/>
@@ -47,5 +47,5 @@
             <artifact name="javafx-base" type="jar" m:classifier="javadoc"/>
         </dependency>
-        <dependency org="org.openjfx" name="javafx-graphics" rev="11-ea+23">
+        <dependency org="org.openjfx" name="javafx-graphics" rev="11-ea+25">
             <artifact name="javafx-graphics" type="jar" m:classifier="linux"/>
             <artifact name="javafx-graphics" type="jar" m:classifier="mac"/>
Index: /applications/editors/josm/plugins/openjfx/src/org/openstreetmap/josm/plugins/openjfx/OpenJfxPlugin.java
===================================================================
--- /applications/editors/josm/plugins/openjfx/src/org/openstreetmap/josm/plugins/openjfx/OpenJfxPlugin.java	(revision 34622)
+++ /applications/editors/josm/plugins/openjfx/src/org/openstreetmap/josm/plugins/openjfx/OpenJfxPlugin.java	(revision 34623)
@@ -2,11 +2,33 @@
 package org.openstreetmap.josm.plugins.openjfx;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URISyntaxException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.StandardCopyOption;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.security.CodeSource;
+import java.util.Enumeration;
+import java.util.Objects;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.io.audio.AudioPlayer;
+import org.openstreetmap.josm.plugins.DynamicURLClassLoader;
 import org.openstreetmap.josm.plugins.Plugin;
 import org.openstreetmap.josm.plugins.PluginInformation;
 import org.openstreetmap.josm.plugins.openjfx.io.audio.JavaFxMediaPlayer;
+import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.PlatformManager;
 
 /**
- * JAXB plugin brings OpenJFX (JavaFX) to other plugins.
+ * OpenJFX plugin brings OpenJFX (JavaFX) to other plugins.
  */
 public class OpenJfxPlugin extends Plugin {
@@ -19,4 +41,80 @@
         super(info);
         AudioPlayer.setSoundPlayerClass(JavaFxMediaPlayer.class);
+        String ext = null;
+        if (PlatformManager.isPlatformWindows()) {
+            ext = ".dll";
+        } else if (PlatformManager.isPlatformUnixoid()) {
+            ext = ".so";
+        } else if (PlatformManager.isPlatformOsx()) {
+            ext = ".dylib";
+        }
+        extractNativeLibs(ext);
+        loadNativeLibs(ext);
+    }
+
+    private static void extractNativeLibs(String ext) {
+        CodeSource src = OpenJfxPlugin.class.getProtectionDomain().getCodeSource();
+        if (src != null) {
+            try (ZipFile zf = new ZipFile(Paths.get(src.getLocation().toURI()).toFile(), StandardCharsets.UTF_8)) {
+                Path dir = getNativeDir();
+                Enumeration<? extends ZipEntry> es = zf.entries();
+                while (es.hasMoreElements()) {
+                    ZipEntry ze = es.nextElement();
+                    String name = ze.getName();
+                    if (name.endsWith(ext) || name.endsWith(".jar")) {
+                        Path targetPath = dir.resolve(name);
+                        File targetFile = targetPath.toFile();
+                        if (!targetFile.exists() || targetFile.lastModified() < ze.getTime()) {
+                            try (InputStream is = zf.getInputStream(ze)) {
+                                Logging.debug("Extracting " + targetPath);
+                                Files.copy(is, targetPath, StandardCopyOption.REPLACE_EXISTING);
+                            }
+                        }
+                    }
+                }
+            } catch (IOException | URISyntaxException e) {
+                Logging.error(e);
+            }
+        } else {
+            Logging.error("Unable to locate openjfx jar file");
+        }
+    }
+
+    private static Path getNativeDir() throws IOException {
+        return Files.createDirectories(new File(Preferences.main().getPluginsDirectory(), "openjfx").toPath());
+    }
+
+    private static class LibVisitor extends SimpleFileVisitor<Path> {
+        private final ClassLoader ccl = Thread.currentThread().getContextClassLoader();
+        private final String ext;
+
+        public LibVisitor(String ext) {
+            this.ext = Objects.requireNonNull(ext);
+        }
+
+        @Override
+        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+            if (ccl instanceof DynamicURLClassLoader) {
+                if (file.endsWith(ext)) {
+                    Logging.debug("Loading " + file);
+                    System.load(file.toAbsolutePath().toString());
+                } else if (file.endsWith(".jar")) {
+                    Logging.debug("Loading " + file);
+                    ((DynamicURLClassLoader) ccl).addURL(file.toUri().toURL());
+                }
+            } else {
+                Logging.error("Unexpected context class loader: " + ccl);
+                return FileVisitResult.TERMINATE;
+            }
+            return FileVisitResult.CONTINUE;
+        }
+    }
+
+    private void loadNativeLibs(String ext) {
+        try {
+            Files.walkFileTree(getNativeDir(), new LibVisitor(ext));
+        } catch (IOException e) {
+            Logging.error(e);
+        }
     }
 }
