Index: /applications/editors/josm/plugins/build-common.xml
===================================================================
--- /applications/editors/josm/plugins/build-common.xml	(revision 36314)
+++ /applications/editors/josm/plugins/build-common.xml	(revision 36315)
@@ -11,5 +11,5 @@
 **
 -->
-<project name="plugin_common" basedir="." xmlns:jacoco="antlib:org.jacoco.ant" xmlns:if="ant:if" xmlns:unless="ant:unless" xmlns:ivy="antlib:org.apache.ivy.ant">
+<project name="plugin_common" basedir="." xmlns:jacoco="antlib:org.jacoco.ant" xmlns:if="ant:if" xmlns:unless="ant:unless" xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:mvn="antlib:org.apache.maven.resolver.ant" >
 
     <property name="josm"                   location="../../core/dist/josm-custom.jar"/>
@@ -43,4 +43,7 @@
     <property name="ivy.jar.file"           location="${ivy.jar.dir}/ivy.jar"/>
     <property name="ivy.version"            value="2.5.1"/>
+    <property name="maven.artifact.resolver.version" value="1.5.1"/>
+    <property name="maven.artifact.resolver.parent.dir" value="${user.home}/.m2/repository/org/apache/maven/resolver/maven-resolver-ant-tasks/${maven.artifact.resolver.version}/"/>
+    <property name="maven.artifact.resolver.jar.file" value="${maven.artifact.resolver.parent.dir}/maven-resolver-ant-tasks-${maven.artifact.resolver.version}-uber.jar"/>
     <property name="jacoco.inclbootstrapclasses"  value="false" />
     <property name="jacoco.inclnolocationclasses" value="false" />
@@ -111,4 +114,10 @@
     </target>
     <target name="compile" depends="init, pre-compile, resolve-tools" unless="skip-compile">
+        <condition property="plugin.classpath.actual.defined">
+            <isreference refid="plugin.classpath.actual" type="path"/>
+        </condition>
+        <path id="plugin.classpath.actual" unless:set="plugin.classpath.actual.defined">
+            <path refid="plugin.classpath"/>
+        </path>
         <echo message="compiling sources for ${plugin.jar} ..."/>
         <path id="jdk.boot.classpath">
@@ -134,5 +143,5 @@
             <compilerarg value="-Xplugin:ErrorProne -Xep:StringSplitter:OFF -Xep:ReferenceEquality:OFF -Xep:InsecureCryptoUsage:OFF -Xep:FutureReturnValueIgnored:OFF -Xep:JdkObsolete:OFF -Xep:EqualsHashCode:OFF -Xep:JavaUtilDate:OFF -Xep:DoNotCallSuggester:OFF -Xep:BanSerializableRead:OFF" />
             <compilerarg line="-Xmaxwarns 1000"/>
-            <classpath refid="plugin.classpath"/>
+            <classpath refid="plugin.classpath.actual"/>
         </javac>
     </target>
@@ -280,5 +289,6 @@
         <!-- to be overridden by plugins that need to perform additional tasks before generating javadoc -->
     </target>
-    <target name="javadoc" depends="pre-javadoc" unless="skip-javadoc">
+    <target name="javadoc" depends="pre-javadoc,pre-compile" unless="skip-javadoc">
+        <mkdir dir="${plugin.doc.dir}"/>
         <javadoc destdir="${plugin.doc.dir}"
                 executable="${javadoc.executable}"
@@ -289,5 +299,6 @@
                 linksource="true"
                 author="false">
-            <classpath refid="plugin.classpath"/>
+            <classpath refid="plugin.classpath" unless:set="plugin.classpath.dependencies"/>
+            <classpath refid="plugin.classpath.dependencies" if:set="plugin.classpath.dependencies"/>
             <sourcepath>
                 <pathelement path="${plugin.src.dir}" />
@@ -661,4 +672,5 @@
                                                                          "/>
             <fileset dir="${basedir}/test" includes="**/*.java" erroronmissingdir="false"/>
+            <formatter type="plain"/>
             <formatter type="xml" toFile="checkstyle-josm-${ant.project.name}.xml"/>
         </checkstyle>
@@ -677,5 +689,6 @@
                 jvmargs="-Xmx1024m"
                 >
-            <auxClasspath refid="plugin.classpath" />
+            <auxClasspath refid="plugin.classpath" unless:set="plugin.classpath.dependencies"/>
+            <auxClasspath refid="plugin.classpath.dependencies" if:set="plugin.classpath.dependencies"/>
             <sourcePath path="${basedir}/src" />
             <class location="${plugin.build.dir}" />
@@ -715,4 +728,9 @@
     ** Ivy tasks
     -->
+    <target name="is-ivy">
+        <condition property="isIvy">
+            <available file="ivy.xml"/>
+        </condition>
+    </target>
     <target name="download-ivy">
         <mkdir dir="${ivy.jar.dir}"/>
@@ -743,5 +761,5 @@
         </delete>
     </target>
-    <target name="fetch_dependencies" depends="clean_ivy, init-ivy">
+    <target name="fetch-dependencies-ivy" depends="clean_ivy, init-ivy, is-ivy" if="isIvy">
         <echo>fetching dependencies with ivy</echo>
         <available property="plugin.ivysettings.exists" file="ivy_settings.xml"/>
@@ -751,6 +769,85 @@
         <ivy:retrieve pattern="${plugin.lib.dir}/[artifact]-[revision](-[classifier]).[ext]" conf="default" />
     </target>
-    <target name="ivy-checkdepsupdate" description="Display dependency updates on the console" depends="fetch_dependencies">
+    <target name="ivy-checkdepsupdate" description="Display dependency updates on the console" depends="fetch-dependencies-ivy">
         <ivy:checkdepsupdate/>
     </target>
+    <!--
+    ** Maven tasks
+    -->
+    <target name="is-maven" depends="is-ivy">
+        <condition property="isMaven">
+            <and>
+                <available file="pom.xml"/>
+                <not>
+                    <isset property="isIvy"/>
+                </not>
+            </and>
+        </condition>
+    </target>
+    <target name="download-maven" depends="is-maven" if="isMaven">
+        <mkdir dir="${maven.artifact.resolver.parent.dir}"/>
+        <get src="https://josm.openstreetmap.de/nexus/content/repositories/public/org/apache/maven/resolver/maven-resolver-ant-tasks/${maven.artifact.resolver.version}/maven-resolver-ant-tasks-${maven.artifact.resolver.version}-uber.jar"
+             dest="${maven.artifact.resolver.jar.file}"
+             usetimestamp="true"/>
+    </target>
+    <target name="init-maven" depends="is-maven,download-maven" if="isMaven">
+        <path id="maven.lib.path">
+            <fileset dir="${maven.artifact.resolver.parent.dir}" includes="*.jar"/>
+        </path>
+        <taskdef uri="antlib:org.apache.maven.resolver.ant" resource="org/apache/maven/resolver/ant/antlib.xml" classpathref="maven.lib.path"/>
+    </target>
+    <target name="fetch-dependencies-maven" depends="is-maven,init-maven,clean_ivy" if="isMaven">
+        <mvn:pom file="pom.xml"/>
+        <mvn:pom file="pom.xml" id="pom"/>
+        <!-- This stanza is necessary since the maven resolver doesn't read repo settings from the pom.xml file -->
+        <!-- resolver.repositories makes it global -->
+        <mvn:remoterepos id="resolver.repositories">
+            <mvn:remoterepo id="JOSM" url="https://josm.openstreetmap.de/nexus/content/repositories/public/" />
+        </mvn:remoterepos>
+        <mkdir dir="${plugin.lib.dir}"/>
+        <mvn:resolve>
+            <!-- For some reason, compile time josm-unittest dependencies get included -->
+            <mvn:dependencies pomRef="pom">
+                <mvn:exclusion groupId="org.openstreetmap.josm" artifactId="josm-unittest"/>
+                <mvn:exclusion groupId="org.junit.platform"/>
+                <mvn:exclusion groupId="org.junit.vintage"/>
+                <mvn:exclusion groupId="org.junit.jupiter"/>
+            </mvn:dependencies>
+            <mvn:files refid="lib.files" dir="${plugin.lib.dir}" layout="{artifactId}-{version}-{classifier}.{extension}" scopes="compile,!test"/>
+        </mvn:resolve>
+        <echo message="${toString:lib.files}"/>
+        <mvn:resolve>
+            <mvn:path refid="classpath.provided" scopes="provided"/>
+        </mvn:resolve>
+        <mvn:resolve>
+            <mvn:path refid="testlib.classpath" classpath="test"/>
+        </mvn:resolve>
+        <mvn:resolve>
+            <mvn:dependencies>
+                <mvn:dependency groupId="org.jacoco" artifactId="org.jacoco.ant" version="${pom.properties.jacoco.version}" classifier="nodeps" type="jar" scope="test"/>
+            </mvn:dependencies>
+            <mvn:path refid="jacocotest.classpath" classpath="test"/>
+        </mvn:resolve>
+        <mvn:resolve>
+            <mvn:dependencies>
+                <mvn:dependency groupId="com.puppycrawl.tools" artifactId="checkstyle" version="${pom.properties.checkstyle.version}" scope="compile"/>
+            </mvn:dependencies>
+            <mvn:path refid="checkstyle.classpath" classpath="compile"/>
+        </mvn:resolve>
+        <mvn:resolve>
+            <mvn:dependencies>
+                <mvn:dependency groupId="com.github.spotbugs" artifactId="spotbugs" version="${pom.properties.spotbugs.version}" scope="compile"/>
+                <mvn:dependency groupId="com.github.spotbugs" artifactId="spotbugs-ant" version="${pom.properties.spotbugs.version}" scope="compile"/>
+            </mvn:dependencies>
+            <mvn:path refid="spotbugs.classpath" classpath="compile"/>
+        </mvn:resolve>
+        <path id="plugin.classpath.actual">
+            <path refid="plugin.classpath"/>
+            <path refid="classpath.provided"/>
+        </path>
+    </target>
+
+    <target name="fetch_dependencies" depends="fetch-dependencies-ivy,fetch-dependencies-maven">
+      <!-- We can depend upon ivy and/or maven right now. -->
+    </target>
 </project>
Index: /applications/editors/josm/plugins/build.xml
===================================================================
--- /applications/editors/josm/plugins/build.xml	(revision 36314)
+++ /applications/editors/josm/plugins/build.xml	(revision 36315)
@@ -13,5 +13,6 @@
     <property name="java21_plugins" value="FIT/build.xml
                                             MicrosoftStreetside/build.xml" />
-    <property name="java17_plugins" value="imageio/build.xml
+    <property name="java17_plugins" value="javafx/build.xml
+                                            imageio/build.xml
                                             Mapillary/build.xml
                                             MapRoulette/build.xml
@@ -19,5 +20,4 @@
                                             todo/build.xml"/>
     <property name="ordered_plugins" value="jackson/build.xml
-                                            javafx/build.xml
                                             jaxb/build.xml
                                             jna/build.xml
Index: /applications/editors/josm/plugins/javafx/build.xml
===================================================================
--- /applications/editors/josm/plugins/javafx/build.xml	(revision 36314)
+++ /applications/editors/josm/plugins/javafx/build.xml	(revision 36315)
@@ -12,5 +12,5 @@
     <property name="plugin.class" value="org.openstreetmap.josm.plugins.javafx.JavaFxPlugin"/>
     <property name="plugin.description" value="Provides additional OpenJFX (JavaFX) features such as MP3 audio playback."/>
-    <!--<property name="plugin.minimum.java.version" value="10"/>-->
+    <property name="plugin.minimum.java.version" value="17"/>
     <property name="plugin.provides" value="javafx"/>
     <!--<property name="plugin.icon" value="..."/>-->
Index: plications/editors/josm/plugins/javafx/ivy.xml
===================================================================
--- /applications/editors/josm/plugins/javafx/ivy.xml	(revision 36314)
+++ 	(revision )
@@ -1,58 +1,0 @@
-<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven">
-	<info organisation="org.openstreetmap.josm.plugins" module="OpenJFX" revision="1.0" />
-	<configurations defaultconf="default" defaultconfmapping="default->default">
-		<conf name="default" />
-	</configurations>
-	<dependencies>
-        <dependency org="org.testfx" name="openjfx-monocle" rev="jdk-11+26"/>
-        <dependency org="org.openjfx" name="javafx-swing" rev="19">
-            <artifact name="javafx-swing" type="jar" m:classifier="linux"/>
-            <artifact name="javafx-swing" type="jar" m:classifier="mac"/>
-            <artifact name="javafx-swing" type="jar" m:classifier="win"/>
-            <artifact name="javafx-swing" type="jar" m:classifier="sources"/>
-            <artifact name="javafx-swing" type="jar" m:classifier="javadoc"/>
-        </dependency>
-        <dependency org="org.openjfx" name="javafx-fxml" rev="19">
-            <artifact name="javafx-fxml" type="jar" m:classifier="linux"/>
-            <artifact name="javafx-fxml" type="jar" m:classifier="mac"/>
-            <artifact name="javafx-fxml" type="jar" m:classifier="win"/>
-            <artifact name="javafx-fxml" type="jar" m:classifier="sources"/>
-            <artifact name="javafx-fxml" type="jar" m:classifier="javadoc"/>
-        </dependency>
-        <dependency org="org.openjfx" name="javafx-web" rev="19">
-            <artifact name="javafx-web" type="jar" m:classifier="linux"/>
-            <artifact name="javafx-web" type="jar" m:classifier="mac"/>
-            <artifact name="javafx-web" type="jar" m:classifier="win"/>
-            <artifact name="javafx-web" type="jar" m:classifier="sources"/>
-            <artifact name="javafx-web" type="jar" m:classifier="javadoc"/>
-        </dependency>
-        <dependency org="org.openjfx" name="javafx-media" rev="19">
-            <artifact name="javafx-media" type="jar" m:classifier="linux"/>
-            <artifact name="javafx-media" type="jar" m:classifier="mac"/>
-            <artifact name="javafx-media" type="jar" m:classifier="win"/>
-            <artifact name="javafx-media" type="jar" m:classifier="sources"/>
-            <artifact name="javafx-media" type="jar" m:classifier="javadoc"/>
-        </dependency>
-        <dependency org="org.openjfx" name="javafx-controls" rev="19">
-            <artifact name="javafx-controls" type="jar" m:classifier="linux"/>
-            <artifact name="javafx-controls" type="jar" m:classifier="mac"/>
-            <artifact name="javafx-controls" type="jar" m:classifier="win"/>
-            <artifact name="javafx-controls" type="jar" m:classifier="sources"/>
-            <artifact name="javafx-controls" type="jar" m:classifier="javadoc"/>
-        </dependency>
-        <dependency org="org.openjfx" name="javafx-base" rev="19">
-            <artifact name="javafx-base" type="jar" m:classifier="linux"/>
-            <artifact name="javafx-base" type="jar" m:classifier="mac"/>
-            <artifact name="javafx-base" type="jar" m:classifier="win"/>
-            <artifact name="javafx-base" type="jar" m:classifier="sources"/>
-            <artifact name="javafx-base" type="jar" m:classifier="javadoc"/>
-        </dependency>
-        <dependency org="org.openjfx" name="javafx-graphics" rev="19">
-            <artifact name="javafx-graphics" type="jar" m:classifier="linux"/>
-            <artifact name="javafx-graphics" type="jar" m:classifier="mac"/>
-            <artifact name="javafx-graphics" type="jar" m:classifier="win"/>
-            <artifact name="javafx-graphics" type="jar" m:classifier="sources"/>
-            <artifact name="javafx-graphics" type="jar" m:classifier="javadoc"/>
-        </dependency>
-	</dependencies>
-</ivy-module>
Index: /applications/editors/josm/plugins/javafx/pom.xml
===================================================================
--- /applications/editors/josm/plugins/javafx/pom.xml	(revision 36314)
+++ /applications/editors/josm/plugins/javafx/pom.xml	(revision 36315)
@@ -21,4 +21,5 @@
         <plugin.early>true</plugin.early>
         <plugin.stage>5</plugin.stage>
+        <plugin.minimum.java.version>17</plugin.minimum.java.version>
         <javafx.version>21.0.2</javafx.version>
     </properties>
Index: /applications/editors/josm/plugins/opendata/build.xml
===================================================================
--- /applications/editors/josm/plugins/opendata/build.xml	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/build.xml	(revision 36315)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<project name="opendata" default="dist" basedir=".">
+<project name="opendata" default="dist" basedir="." xmlns:mvn="antlib:org.apache.maven.resolver.ant">
     <property name="plugin.main.version" value="18723"/>
     <property name="plugin.author" value="Don-vip"/>
@@ -26,5 +26,5 @@
     <property name="ejml" location="${plugin.dist.dir}/ejml.jar"/>
     <property name="geotools" location="${plugin.dist.dir}/geotools.jar"/>
-    
+
     <!--
     **********************************************************
@@ -41,10 +41,10 @@
     **********************************************************
     -->
-    <target name="compile_jopendoc" depends="init">
+    <target name="compile_jopendoc" depends="init, fetch_dependencies">
         <echo message="compiling JOpenDocument ... "/>
 	<javac srcdir="includes/org/jopendocument" debug="false" destdir="${plugin.build.dir}" includeAntRuntime="false" encoding="ISO-8859-1" release="${java.lang.version}">
             <classpath>
                 <!-- JDOM is required in an older version than the one embedded in geotools jar -->
-                <pathelement location="lib/jdom-1.1.3.jar"/>
+                <pathelement location="lib/jdom2-2.0.6.1.jar"/>
                 <pathelement location="${apache-commons}"/>
             </classpath>
@@ -78,5 +78,5 @@
     **********************************************************
     -->
-    <target name="pre-compile" depends="init, compile_poi, compile_jopendoc, compile_neptune, compile_j7zip"/>
+    <target name="pre-compile" depends="init, fetch_dependencies, compile_poi, compile_jopendoc, compile_neptune, compile_j7zip"/>
     
     <target name="xjc_neptune" depends="init, -jaxb_linux, -jaxb_windows" unless="jaxb.notRequired">
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ChildCreator.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ChildCreator.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ChildCreator.java	(revision 36315)
@@ -20,6 +20,6 @@
 import java.util.ListIterator;
 
-import org.jdom.Element;
-import org.jdom.Namespace;
+import org.jdom2.Element;
+import org.jdom2.Namespace;
 
 /**
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ImmutableDocStyledNode.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ImmutableDocStyledNode.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ImmutableDocStyledNode.java	(revision 36315)
@@ -19,6 +19,6 @@
 import java.util.Set;
 
-import org.jdom.Document;
-import org.jdom.Element;
+import org.jdom2.Document;
+import org.jdom2.Element;
 
 public class ImmutableDocStyledNode<S extends StyleStyle, D extends ODDocument> extends StyledNode<S, D> {
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODMeta.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODMeta.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODMeta.java	(revision 36315)
@@ -24,6 +24,6 @@
 import java.util.Map;
 
-import org.jdom.Element;
-import org.jdom.Namespace;
+import org.jdom2.Element;
+import org.jdom2.Namespace;
 
 /**
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODNode.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODNode.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODNode.java	(revision 36315)
@@ -16,5 +16,5 @@
 package org.jopendocument.dom;
 
-import org.jdom.Element;
+import org.jdom2.Element;
 
 /**
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODPackage.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODPackage.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODPackage.java	(revision 36315)
@@ -22,5 +22,5 @@
 import java.util.Set;
 
-import org.jdom.Document;
+import org.jdom2.Document;
 import org.jopendocument.util.CopyUtils;
 import org.jopendocument.util.FileUtils;
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODUserDefinedMeta.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODUserDefinedMeta.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODUserDefinedMeta.java	(revision 36315)
@@ -19,7 +19,7 @@
 import java.util.List;
 
-import org.jdom.Attribute;
-import org.jdom.Element;
-import org.jdom.Namespace;
+import org.jdom2.Attribute;
+import org.jdom2.Element;
+import org.jdom2.Namespace;
 
 // eg <meta:user-defined meta:name="countOfSomething">5.2</meta:user-defined>
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODXMLDocument.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODXMLDocument.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODXMLDocument.java	(revision 36315)
@@ -24,7 +24,7 @@
 import java.util.Map;
 
-import org.jdom.Document;
-import org.jdom.Element;
-import org.jdom.Namespace;
+import org.jdom2.Document;
+import org.jdom2.Element;
+import org.jdom2.Namespace;
 
 /**
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyleDesc.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyleDesc.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyleDesc.java	(revision 36315)
@@ -20,5 +20,5 @@
 import java.util.List;
 
-import org.jdom.Element;
+import org.jdom2.Element;
 import org.jopendocument.util.CollectionMap;
 
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyleStyle.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyleStyle.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyleStyle.java	(revision 36315)
@@ -19,6 +19,6 @@
 import java.util.Map;
 
-import org.jdom.Element;
-import org.jdom.Namespace;
+import org.jdom2.Element;
+import org.jdom2.Namespace;
 import org.jopendocument.dom.spreadsheet.CellStyle;
 import org.jopendocument.dom.spreadsheet.ColumnStyle;
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyledNode.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyledNode.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyledNode.java	(revision 36315)
@@ -16,5 +16,5 @@
 package org.jopendocument.dom;
 
-import org.jdom.Element;
+import org.jdom2.Element;
 
 /**
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/XMLVersion.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/XMLVersion.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/XMLVersion.java	(revision 36315)
@@ -19,6 +19,6 @@
 import java.util.Map;
 
-import org.jdom.Element;
-import org.jdom.Namespace;
+import org.jdom2.Element;
+import org.jdom2.Namespace;
 
 /**
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Cell.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Cell.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Cell.java	(revision 36315)
@@ -25,7 +25,7 @@
 import java.util.regex.Pattern;
 
-import org.jdom.Element;
-import org.jdom.Namespace;
-import org.jdom.Text;
+import org.jdom2.Element;
+import org.jdom2.Namespace;
+import org.jdom2.Text;
 import org.jopendocument.dom.ODDocument;
 import org.jopendocument.dom.ODValueType;
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/CellStyle.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/CellStyle.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/CellStyle.java	(revision 36315)
@@ -18,5 +18,5 @@
 import java.util.Arrays;
 
-import org.jdom.Element;
+import org.jdom2.Element;
 import org.jopendocument.dom.ODPackage;
 import org.jopendocument.dom.StyleDesc;
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Column.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Column.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Column.java	(revision 36315)
@@ -16,5 +16,5 @@
 package org.jopendocument.dom.spreadsheet;
 
-import org.jdom.Element;
+import org.jdom2.Element;
 import org.jopendocument.dom.ODDocument;
 
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/ColumnStyle.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/ColumnStyle.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/ColumnStyle.java	(revision 36315)
@@ -16,5 +16,5 @@
 package org.jopendocument.dom.spreadsheet;
 
-import org.jdom.Element;
+import org.jdom2.Element;
 import org.jopendocument.dom.ODPackage;
 import org.jopendocument.dom.StyleDesc;
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Row.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Row.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Row.java	(revision 36315)
@@ -22,5 +22,5 @@
 import java.util.List;
 
-import org.jdom.Element;
+import org.jdom2.Element;
 import org.jopendocument.dom.ODDocument;
 
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/RowStyle.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/RowStyle.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/RowStyle.java	(revision 36315)
@@ -16,5 +16,5 @@
 package org.jopendocument.dom.spreadsheet;
 
-import org.jdom.Element;
+import org.jdom2.Element;
 import org.jopendocument.dom.ODPackage;
 import org.jopendocument.dom.StyleDesc;
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Sheet.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Sheet.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Sheet.java	(revision 36315)
@@ -16,5 +16,5 @@
 package org.jopendocument.dom.spreadsheet;
 
-import org.jdom.Element;
+import org.jdom2.Element;
 
 /**
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/SpreadSheet.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/SpreadSheet.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/SpreadSheet.java	(revision 36315)
@@ -21,6 +21,6 @@
 import java.util.NoSuchElementException;
 
-import org.jdom.Document;
-import org.jdom.Element;
+import org.jdom2.Document;
+import org.jdom2.Element;
 import org.jopendocument.dom.ODDocument;
 import org.jopendocument.dom.ODPackage;
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Table.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Table.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Table.java	(revision 36315)
@@ -20,6 +20,6 @@
 import java.util.ListIterator;
 
-import org.jdom.Attribute;
-import org.jdom.Element;
+import org.jdom2.Attribute;
+import org.jdom2.Element;
 import org.jopendocument.dom.ODDocument;
 import org.jopendocument.util.Tuple2;
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/TableCalcNode.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/TableCalcNode.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/TableCalcNode.java	(revision 36315)
@@ -16,6 +16,6 @@
 package org.jopendocument.dom.spreadsheet;
 
-import org.jdom.Element;
-import org.jdom.Namespace;
+import org.jdom2.Element;
+import org.jdom2.Namespace;
 import org.jopendocument.dom.ImmutableDocStyledNode;
 import org.jopendocument.dom.ODDocument;
Index: /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/TableStyle.java
===================================================================
--- /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/TableStyle.java	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/TableStyle.java	(revision 36315)
@@ -18,5 +18,5 @@
 import java.util.Arrays;
 
-import org.jdom.Element;
+import org.jdom2.Element;
 import org.jopendocument.dom.ODPackage;
 import org.jopendocument.dom.StyleDesc;
Index: /applications/editors/josm/plugins/opendata/pom.xml
===================================================================
--- /applications/editors/josm/plugins/opendata/pom.xml	(revision 36314)
+++ /applications/editors/josm/plugins/opendata/pom.xml	(revision 36315)
@@ -71,10 +71,10 @@
             <scope>provided</scope>
         </dependency>
-        <!-- Needed to compile jopendocument, provided by geotools later -->
+        <!-- Needed to compile jopendocument, not currently provided by geotools -->
         <dependency>
             <groupId>org.jdom</groupId>
-            <artifactId>jdom</artifactId>
-            <version>1.1.3</version>
-            <scope>provided</scope>
+            <artifactId>jdom2</artifactId>
+            <version>2.0.6.1</version>
+            <scope>compile</scope>
         </dependency>
     </dependencies>
Index: /applications/editors/josm/plugins/rasterfilters/build.xml
===================================================================
--- /applications/editors/josm/plugins/rasterfilters/build.xml	(revision 36314)
+++ /applications/editors/josm/plugins/rasterfilters/build.xml	(revision 36315)
@@ -13,8 +13,12 @@
 	<property name="plugin.version" value="1.0.4"/>
 
-    <property name="plugin.icon" value="images/josm_filters_48.png"/>
+  <property name="plugin.icon" value="images/josm_filters_48.png"/>
 	<property name="plugin.author" value="Vadim Varnavsky" />
 	<property name="plugin.class" value="org.openstreetmap.josm.plugins.rasterfilters.RasterFiltersPlugin" />
 	<property name="plugin.description" value="The RasterFiltersPlugin allows to choose and apply some images'' filters to some layers" />
 
+  <target name="pre-compile" depends="fetch_dependencies">
+    <!-- include fetch_dependencies task -->
+  </target>
+
 </project>
Index: /applications/editors/josm/plugins/rasterfilters/pom.xml
===================================================================
--- /applications/editors/josm/plugins/rasterfilters/pom.xml	(revision 36314)
+++ /applications/editors/josm/plugins/rasterfilters/pom.xml	(revision 36315)
@@ -35,51 +35,14 @@
             <groupId>org.jsoup</groupId>
             <artifactId>jsoup</artifactId>
-            <version>1.15.3</version>
+            <version>1.18.1</version>
         </dependency>
         <dependency>
-            <!-- I think lib/picker.jar is an "old" version of org.drjekyll:colorpicker:1.2 -->
-            <!-- Note: you will have to run mvn initialize to get this working. Sorry. -->
             <groupId>org.drjekyll</groupId>
             <artifactId>colorpicker</artifactId>
-            <version>1.0</version>
+            <version>2.0.1</version>
         </dependency>
     </dependencies>
     <build>
         <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-install-plugin</artifactId>
-                <version>3.1.1</version>
-                <executions>
-                    <execution>
-                        <id>default-initialize</id>
-                        <phase>initialize</phase>
-                        <goals>
-                            <goal>install-file</goal>
-                        </goals>
-                        <configuration>
-                            <file>lib/picker.jar</file>
-                            <groupId>org.drjekyll</groupId>
-                            <artifactId>colorpicker</artifactId>
-                            <version>1.0</version>
-                            <packaging>jar</packaging>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>clean-initialize</id>
-                        <phase>clean</phase>
-                        <goals>
-                            <goal>install-file</goal>
-                        </goals>
-                        <configuration>
-                            <file>lib/picker.jar</file>
-                            <groupId>org.drjekyll</groupId>
-                            <artifactId>colorpicker</artifactId>
-                            <version>1.0</version>
-                            <packaging>jar</packaging>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
Index: /applications/editors/josm/plugins/rasterfilters/src/org/openstreetmap/josm/plugins/rasterfilters/gui/FilterGuiListener.java
===================================================================
--- /applications/editors/josm/plugins/rasterfilters/src/org/openstreetmap/josm/plugins/rasterfilters/gui/FilterGuiListener.java	(revision 36314)
+++ /applications/editors/josm/plugins/rasterfilters/src/org/openstreetmap/josm/plugins/rasterfilters/gui/FilterGuiListener.java	(revision 36315)
@@ -1,2 +1,3 @@
+// SPDX-License-Identifier: WTFPL
 package org.openstreetmap.josm.plugins.rasterfilters.gui;
 
@@ -26,5 +27,5 @@
 import org.openstreetmap.josm.plugins.rasterfilters.values.SliderValue;
 
-import com.bric.swing.ColorPicker;
+import com.bric.colorpicker.ColorPicker;
 
 /**
@@ -35,12 +36,15 @@
  */
 public class FilterGuiListener implements ChangeListener, ItemListener,
-        ActionListener, PropertyChangeListener, FilterStateOwner
-{
+        ActionListener, PropertyChangeListener, FilterStateOwner {
 
-    private StateChangeListener handler;
+    private final StateChangeListener handler;
     private FilterStateModel filterState;
-    private Set<ComboBoxModel<String>> models = new HashSet<>();
+    private final Set<ComboBoxModel<String>> models = new HashSet<>();
     private UID filterId;
 
+    /**
+     * Create a new {@link FilterGuiListener} with the given handler
+     * @param handler The handler to call when the state changes
+     */
     public FilterGuiListener(StateChangeListener handler) {
         this.handler = handler;
Index: /applications/editors/josm/plugins/rasterfilters/src/org/openstreetmap/josm/plugins/rasterfilters/gui/FilterPanel.java
===================================================================
--- /applications/editors/josm/plugins/rasterfilters/src/org/openstreetmap/josm/plugins/rasterfilters/gui/FilterPanel.java	(revision 36314)
+++ /applications/editors/josm/plugins/rasterfilters/src/org/openstreetmap/josm/plugins/rasterfilters/gui/FilterPanel.java	(revision 36315)
@@ -1,2 +1,3 @@
+// SPDX-License-Identifier: WTFPL
 package org.openstreetmap.josm.plugins.rasterfilters.gui;
 
@@ -13,4 +14,5 @@
 import java.util.Hashtable;
 
+import com.bric.colorpicker.ColorPickerMode;
 import jakarta.json.JsonArray;
 import jakarta.json.JsonObject;
@@ -27,4 +29,5 @@
 import javax.swing.JPanel;
 import javax.swing.JSlider;
+import javax.swing.SwingConstants;
 import javax.swing.border.Border;
 import javax.swing.border.EmptyBorder;
@@ -34,5 +37,5 @@
 import org.openstreetmap.josm.tools.Logging;
 
-import com.bric.swing.ColorPicker;
+import com.bric.colorpicker.ColorPicker;
 
 /**
@@ -46,7 +49,13 @@
 
     private static final long serialVersionUID = 1L;
+    private static final String TITLE = "title";
+    private static final String DEFAULT = "default";
+    private static final String ARIAL = "Arial";
     private UID filterId;
     private int neededHeight;
 
+    /**
+     * Create a new {@link FilterPanel}
+     */
     public FilterPanel() {
         super();
@@ -73,6 +82,6 @@
                 setNeededHeight(getNeededHeight() + 30);
 
-                JCheckBox checkBox = createCheckBox(json.getString("title"));
-                checkBox.setSelected(json.getBoolean("default"));
+                JCheckBox checkBox = createCheckBox(json.getString(TITLE));
+                checkBox.setSelected(json.getBoolean(DEFAULT));
                 checkBox.setName(json.getString("name"));
 
@@ -93,5 +102,5 @@
     private JComponent createSelect(JsonObject json) {
 
-        Font font = new Font("Arial", Font.PLAIN, 14);
+        Font font = new Font(ARIAL, Font.PLAIN, 14);
 
         JPanel selectPanel = new JPanel();
@@ -102,5 +111,5 @@
         selectPanel.setMaximumSize(new Dimension(300, 40));
 
-        JLabel selectTitle = new JLabel(json.getString("title"));
+        JLabel selectTitle = new JLabel(json.getString(TITLE));
 
         selectTitle.setFont(font);
@@ -111,5 +120,5 @@
         DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
 
-        model.setSelectedItem(json.getString("default"));
+        model.setSelectedItem(json.getString(DEFAULT));
 
         for (int i = 0; i < valuesArray.size(); i++) {
@@ -134,8 +143,8 @@
         ColorPicker picker = new ColorPicker(false, false);
         picker.setPreferredSize(new Dimension(200, 180));
-        picker.setMode(ColorPicker.HUE);
+        picker.setMode(ColorPickerMode.HUE);
         picker.setName(json.getString("name"));
 
-        addControlTitle(json.getString("title"));
+        addControlTitle(json.getString(TITLE));
 
         this.add(picker);
@@ -152,5 +161,5 @@
 
         JCheckBox checkBox = new JCheckBox(text);
-        Font font = new Font("Arial", Font.PLAIN, 12);
+        Font font = new Font(ARIAL, Font.PLAIN, 12);
 
         checkBox.setFont(font);
@@ -167,5 +176,5 @@
     private static JCheckBox createDisableBox(ItemListener listener) {
         JCheckBox disable = new JCheckBox("Disable");
-        Font font = new Font("Arial", Font.PLAIN, 12);
+        Font font = new Font(ARIAL, Font.PLAIN, 12);
 
         disable.addItemListener(listener);
@@ -177,5 +186,5 @@
     private static JButton createRemoveButton(ActionListener listener) {
         JButton removeButton = new JButton("Remove");
-        Font font = new Font("Arial", Font.PLAIN, 12);
+        Font font = new Font(ARIAL, Font.PLAIN, 12);
 
         removeButton.setFont(font);
@@ -207,5 +216,5 @@
 
     private void addControlTitle(String labelText) {
-        Font labelFont = new Font("Arial", Font.PLAIN, 14);
+        Font labelFont = new Font(ARIAL, Font.PLAIN, 14);
 
         JPanel sliderLabelPanel = new JPanel();
@@ -214,5 +223,5 @@
         sliderLabelPanel.setBackground(Color.white);
 
-        JLabel sliderLabel = new JLabel(labelText, JLabel.LEFT);
+        JLabel sliderLabel = new JLabel(labelText, SwingConstants.LEFT);
         sliderLabel.setFont(labelFont);
         sliderLabel.setAlignmentX(Component.LEFT_ALIGNMENT);
@@ -228,5 +237,5 @@
         Border sliderBorder = new EmptyBorder(5, 5, 5, 5);
 
-        addControlTitle(json.getString("title"));
+        addControlTitle(json.getString(TITLE));
 
         Hashtable<Integer, JLabel> labelTable = new Hashtable<>();
@@ -240,5 +249,5 @@
             int minValue = array.getInt(0);
             int maxValue = array.getInt(1);
-            int initValue = json.getInt("default");
+            int initValue = json.getInt(DEFAULT);
 
             Logging.debug("Slider is integer\n");
@@ -246,5 +255,5 @@
                     + "maxValue: " + maxValue);
             try {
-                slider = new JSlider(JSlider.HORIZONTAL, minValue, maxValue,
+                slider = new JSlider(SwingConstants.HORIZONTAL, minValue, maxValue,
                         initValue);
                 slider.setName(json.getString("name"));
@@ -273,5 +282,5 @@
 
 
-            double initValue = json.getJsonNumber("default").doubleValue() * 100;
+            double initValue = json.getJsonNumber(DEFAULT).doubleValue() * 100;
             double delta = (maxValue - minValue) / 100d;
 
@@ -287,5 +296,5 @@
 
             try {
-                slider = new JSlider(JSlider.HORIZONTAL, minValue, maxValue, (int) initValue);
+                slider = new JSlider(SwingConstants.HORIZONTAL, minValue, maxValue, (int) initValue);
                 slider.setMinorTickSpacing(maxValue / 4);
                 slider.setName(json.getString("name"));
Index: /applications/editors/josm/plugins/rasterfilters/src/org/openstreetmap/josm/plugins/rasterfilters/model/FiltersManager.java
===================================================================
--- /applications/editors/josm/plugins/rasterfilters/src/org/openstreetmap/josm/plugins/rasterfilters/model/FiltersManager.java	(revision 36314)
+++ /applications/editors/josm/plugins/rasterfilters/src/org/openstreetmap/josm/plugins/rasterfilters/model/FiltersManager.java	(revision 36315)
@@ -1,2 +1,3 @@
+// SPDX-License-Identifier: WTFPL
 package org.openstreetmap.josm.plugins.rasterfilters.model;
 
@@ -32,5 +33,5 @@
 import org.openstreetmap.josm.tools.Logging;
 
-import com.bric.swing.ColorPicker;
+import com.bric.colorpicker.ColorPicker;
 
 
@@ -42,9 +43,14 @@
  */
 public class FiltersManager implements StateChangeListener, ImageProcessor, ActionListener, ItemListener {
-
-    public Map<UID, Filter> filtersMap = new LinkedHashMap<>();
-    public Set<Filter> disabledFilters = new HashSet<>();
-    public FiltersDialog dialog;
-
+    private static final String TITLE = "title";
+
+    private final Map<UID, Filter> filtersMap = new LinkedHashMap<>();
+    private final Set<Filter> disabledFilters = new HashSet<>();
+    private final FiltersDialog dialog;
+
+    /**
+     * Create a new {@link FiltersManager} given a {@link FiltersDialog}
+     * @param dialog The dialog to use
+     */
     public FiltersManager(FiltersDialog dialog) {
         this.dialog = dialog;
@@ -61,5 +67,5 @@
         String filterClassName = meta.getString("classname");
 
-        String filterTitle = meta.getString("title");
+        String filterTitle = meta.getString(TITLE);
 
         fp.setName(filterTitle);
@@ -96,5 +102,5 @@
         }
 
-        fp.setBorder(BorderFactory.createTitledBorder(meta.getString("title")));
+        fp.setBorder(BorderFactory.createTitledBorder(meta.getString(TITLE)));
 
         JsonArray controls = meta.getJsonArray("controls");
@@ -165,5 +171,5 @@
         for (JsonObject json : FiltersDownloader.filtersMeta) {
 
-            if (json.getString("title").equals(title)) {
+            if (json.getString(TITLE).equals(title)) {
                 return createFilterWithPanel(json);
             }
