diff --git a/plugins/geotools/build.xml b/plugins/geotools/build.xml
index dd994dd03..cd6799726 100644
--- a/plugins/geotools/build.xml
+++ b/plugins/geotools/build.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<project name="geotools" default="dist" basedir=".">
+  <project name="geotools" default="dist" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant">
     <!-- enter the SVN commit message -->
     <property name="commit.message" value="Commit message"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
@@ -10,16 +10,21 @@
     <property name="plugin.description" value="Provides parts of the GeoTools library for other JOSM plugins. Not meant to be installed directly by users, but rather as a dependency for other plugins."/>
     <property name="plugin.icon" value="images/compass.png"/>
     <property name="plugin.canloadatruntime" value="true"/>
-    <property name="plugin.requires" value="jts;ejml;apache-commons"/>
+    <property name="plugin.requires" value="ejml;apache-commons;jaxb;jts"/>
     <property name="plugin.stage" value="20"/>
 
     <!-- ** include targets that all plugins have in common ** -->
     <import file="../build-common.xml"/>
 
+    <target name="pre-compile" depends="fetch_dependencies">
+        <!-- include fetch_dependencies task -->
+    </target>
+
 	<fileset id="plugin.requires.jars" dir="${plugin.dist.dir}">
-        <include name="jts.jar"/>
-        <include name="ejml.jar"/>
         <include name="apache-commons.jar"/>
+        <include name="ejml.jar"/>
+        <include name="jaxb.jar"/>
+        <include name="jts.jar"/>
     </fileset>
 
     <target name="merge-geotools-services">
diff --git a/plugins/geotools/ivy.xml b/plugins/geotools/ivy.xml
new file mode 100644
index 000000000..8db73f345
--- /dev/null
+++ b/plugins/geotools/ivy.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- License: GPL. For details, see LICENSE file. -->
+<ivy-module version="2.0">
+    <info organisation="org.openstreetmap.josm.plugins" module="geotools"/>
+    <dependencies>
+        <dependency org="org.geotools" name="gt-coverage" rev="${gt.version}" conf="default->default"/>
+        <dependency org="org.geotools" name="gt-coverage-api" rev="${gt.version}" conf="default->default"/>
+        <dependency org="org.geotools" name="gt-epsg-extension" rev="${gt.version}" conf="default->default"/>
+        <dependency org="org.geotools" name="gt-epsg-hsql" rev="${gt.version}" conf="default->default"/>
+        <dependency org="org.geotools" name="gt-geotiff" rev="${gt.version}" conf="default->default"/>
+        <dependency org="org.geotools" name="gt-main" rev="${gt.version}" conf="default->default"/>
+        <dependency org="org.geotools" name="gt-metadata" rev="${gt.version}" conf="default->default"/>
+        <dependency org="org.geotools" name="gt-opengis" rev="${gt.version}" conf="default->default"/>
+        <dependency org="org.geotools" name="gt-referencing" rev="${gt.version}" conf="default->default"/>
+        <dependency org="org.geotools" name="gt-shapefile" rev="${gt.version}" conf="default->default"/>
+        <!-- Dependencies that were not needed in 22.0 (according to lib in svn) -->
+        <exclude org="org.geotools" module="gt-imagemosaic"/>
+        <!-- unnecessary dependencies -->
+        <exclude org="com.github.spotbugs"/>
+        <exclude org="org.geotools.demo"/>
+        <!-- from jaxb plugin -->
+        <exclude org="javax.xml.bind" module="jaxb-api" />
+        <exclude org="javax.xml.bind" module="jaxb-runtime" />
+        <!-- from ejml plugin -->
+        <exclude org="org.ejml"/>
+        <!-- from jts plugin -->
+        <exclude org="org.locationtech.jts" module="jts-core"/>
+        <exclude org="org.locationtech.jts.io" module="jts-io-common"/>
+        <!-- from apache-commons plugin -->
+        <exclude org="com.github.luben" module="zstd-jni"/>
+        <exclude org="org.apache.commons" module="commons-collections4"/>
+        <exclude org="org.apache.commons" module="commons-compress"/>
+        <exclude org="org.apache.commons" module="commons-imaging"/>
+        <exclude org="commons-io" module="commons-io"/>
+        <exclude org="commons-logging" module="commons-logging"/>
+        <exclude org="org.apache.commons" module="commons-lang3"/>
+        <exclude org="org.apache.commons" module="commons-math3"/>
+        <exclude org="org.apache.commons" module="commons-text"/>
+        <exclude org="org.brotli" module="dec"/>
+        <exclude org="org.tukaani" module="xz"/>
+    </dependencies>
+</ivy-module>
diff --git a/plugins/geotools/ivy_settings.xml b/plugins/geotools/ivy_settings.xml
new file mode 100644
index 000000000..2b72509ae
--- /dev/null
+++ b/plugins/geotools/ivy_settings.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ivysettings>
+  <include file="../../core/ivysettings.xml"/>
+  <property name="gt.version" value="26.1"/>
+  <settings defaultResolver="ordered-resolvers"/>
+  <resolvers>
+    <chain name="ordered-resolvers">
+      <resolver ref="josm-nexus"/>
+      <ibiblio name="osgeo" m2compatible="true" root="https://repo.osgeo.org/repository/release/" />
+      <ibiblio name="central" m2compatible="true" root="https://repo1.maven.org/maven2/" />
+    </chain>
+  </resolvers>
+</ivysettings>
+
diff --git a/plugins/geotools/lib/GeographicLib-Java-1.49.jar b/plugins/geotools/lib/GeographicLib-Java-1.49.jar
deleted file mode 100644
index c75593380..000000000
Binary files a/plugins/geotools/lib/GeographicLib-Java-1.49.jar and /dev/null differ
diff --git a/plugins/geotools/lib/commons-beanutils-1.9.2-noclassprop.jar b/plugins/geotools/lib/commons-beanutils-1.9.2-noclassprop.jar
deleted file mode 100644
index 57a58f4ac..000000000
Binary files a/plugins/geotools/lib/commons-beanutils-1.9.2-noclassprop.jar and /dev/null differ
diff --git a/plugins/geotools/lib/commons-pool-1.5.4.jar b/plugins/geotools/lib/commons-pool-1.5.4.jar
deleted file mode 100644
index 43edf9963..000000000
Binary files a/plugins/geotools/lib/commons-pool-1.5.4.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-coverage-22.0-sources.jar b/plugins/geotools/lib/gt-coverage-22.0-sources.jar
deleted file mode 100644
index 840c293de..000000000
Binary files a/plugins/geotools/lib/gt-coverage-22.0-sources.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-coverage-22.0.jar b/plugins/geotools/lib/gt-coverage-22.0.jar
deleted file mode 100644
index e8c727232..000000000
Binary files a/plugins/geotools/lib/gt-coverage-22.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-coverage-api-22.0-sources.jar b/plugins/geotools/lib/gt-coverage-api-22.0-sources.jar
deleted file mode 100644
index 13a319cd8..000000000
Binary files a/plugins/geotools/lib/gt-coverage-api-22.0-sources.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-coverage-api-22.0.jar b/plugins/geotools/lib/gt-coverage-api-22.0.jar
deleted file mode 100644
index f218c87ca..000000000
Binary files a/plugins/geotools/lib/gt-coverage-api-22.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-epsg-extension-22.0-sources.jar b/plugins/geotools/lib/gt-epsg-extension-22.0-sources.jar
deleted file mode 100644
index e965bc7ff..000000000
Binary files a/plugins/geotools/lib/gt-epsg-extension-22.0-sources.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-epsg-extension-22.0.jar b/plugins/geotools/lib/gt-epsg-extension-22.0.jar
deleted file mode 100644
index 80bdf2d37..000000000
Binary files a/plugins/geotools/lib/gt-epsg-extension-22.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-epsg-hsql-22.0-sources.jar b/plugins/geotools/lib/gt-epsg-hsql-22.0-sources.jar
deleted file mode 100644
index 5c07b8967..000000000
Binary files a/plugins/geotools/lib/gt-epsg-hsql-22.0-sources.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-epsg-hsql-22.0.jar b/plugins/geotools/lib/gt-epsg-hsql-22.0.jar
deleted file mode 100644
index 4122793e0..000000000
Binary files a/plugins/geotools/lib/gt-epsg-hsql-22.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-geotiff-22.0-sources.jar b/plugins/geotools/lib/gt-geotiff-22.0-sources.jar
deleted file mode 100644
index b0c43d30a..000000000
Binary files a/plugins/geotools/lib/gt-geotiff-22.0-sources.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-geotiff-22.0.jar b/plugins/geotools/lib/gt-geotiff-22.0.jar
deleted file mode 100644
index f4ff03c43..000000000
Binary files a/plugins/geotools/lib/gt-geotiff-22.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-main-22.0-sources.jar b/plugins/geotools/lib/gt-main-22.0-sources.jar
deleted file mode 100644
index 2ac6d5f24..000000000
Binary files a/plugins/geotools/lib/gt-main-22.0-sources.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-main-22.0.jar b/plugins/geotools/lib/gt-main-22.0.jar
deleted file mode 100644
index 86d9799c5..000000000
Binary files a/plugins/geotools/lib/gt-main-22.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-metadata-22.0-sources.jar b/plugins/geotools/lib/gt-metadata-22.0-sources.jar
deleted file mode 100644
index efc2c2dc1..000000000
Binary files a/plugins/geotools/lib/gt-metadata-22.0-sources.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-metadata-22.0.jar b/plugins/geotools/lib/gt-metadata-22.0.jar
deleted file mode 100644
index ee852b74c..000000000
Binary files a/plugins/geotools/lib/gt-metadata-22.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-opengis-22.0-sources.jar b/plugins/geotools/lib/gt-opengis-22.0-sources.jar
deleted file mode 100644
index a11593716..000000000
Binary files a/plugins/geotools/lib/gt-opengis-22.0-sources.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-opengis-22.0.jar b/plugins/geotools/lib/gt-opengis-22.0.jar
deleted file mode 100644
index 647663a1e..000000000
Binary files a/plugins/geotools/lib/gt-opengis-22.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-referencing-22.0-sources.jar b/plugins/geotools/lib/gt-referencing-22.0-sources.jar
deleted file mode 100644
index b6cc35585..000000000
Binary files a/plugins/geotools/lib/gt-referencing-22.0-sources.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-referencing-22.0.jar b/plugins/geotools/lib/gt-referencing-22.0.jar
deleted file mode 100644
index f95c06d50..000000000
Binary files a/plugins/geotools/lib/gt-referencing-22.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-shapefile-22.0-sources.jar b/plugins/geotools/lib/gt-shapefile-22.0-sources.jar
deleted file mode 100644
index f29da788d..000000000
Binary files a/plugins/geotools/lib/gt-shapefile-22.0-sources.jar and /dev/null differ
diff --git a/plugins/geotools/lib/gt-shapefile-22.0.jar b/plugins/geotools/lib/gt-shapefile-22.0.jar
deleted file mode 100644
index b5b4f3597..000000000
Binary files a/plugins/geotools/lib/gt-shapefile-22.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/hsqldb-2.4.1.jar b/plugins/geotools/lib/hsqldb-2.4.1.jar
deleted file mode 100644
index 0a91057e7..000000000
Binary files a/plugins/geotools/lib/hsqldb-2.4.1.jar and /dev/null differ
diff --git a/plugins/geotools/lib/imageio-ext-geocore-1.3.2.jar b/plugins/geotools/lib/imageio-ext-geocore-1.3.2.jar
deleted file mode 100644
index c20cd09f7..000000000
Binary files a/plugins/geotools/lib/imageio-ext-geocore-1.3.2.jar and /dev/null differ
diff --git a/plugins/geotools/lib/imageio-ext-streams-1.3.2.jar b/plugins/geotools/lib/imageio-ext-streams-1.3.2.jar
deleted file mode 100644
index 6a9c7caa9..000000000
Binary files a/plugins/geotools/lib/imageio-ext-streams-1.3.2.jar and /dev/null differ
diff --git a/plugins/geotools/lib/imageio-ext-tiff-1.3.2.jar b/plugins/geotools/lib/imageio-ext-tiff-1.3.2.jar
deleted file mode 100644
index da8f3b24a..000000000
Binary files a/plugins/geotools/lib/imageio-ext-tiff-1.3.2.jar and /dev/null differ
diff --git a/plugins/geotools/lib/imageio-ext-utilities-1.3.2.jar b/plugins/geotools/lib/imageio-ext-utilities-1.3.2.jar
deleted file mode 100644
index 512145abd..000000000
Binary files a/plugins/geotools/lib/imageio-ext-utilities-1.3.2.jar and /dev/null differ
diff --git a/plugins/geotools/lib/indriya-1.0.jar b/plugins/geotools/lib/indriya-1.0.jar
deleted file mode 100644
index 328e2a970..000000000
Binary files a/plugins/geotools/lib/indriya-1.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jai_codec-1.1.3.jar b/plugins/geotools/lib/jai_codec-1.1.3.jar
deleted file mode 100644
index 056ecd3a7..000000000
Binary files a/plugins/geotools/lib/jai_codec-1.1.3.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jai_core-1.1.3.jar b/plugins/geotools/lib/jai_core-1.1.3.jar
deleted file mode 100644
index b29b8eed5..000000000
Binary files a/plugins/geotools/lib/jai_core-1.1.3.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jai_imageio-1.1.jar b/plugins/geotools/lib/jai_imageio-1.1.jar
deleted file mode 100644
index 571aa199f..000000000
Binary files a/plugins/geotools/lib/jai_imageio-1.1.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jdom2-2.0.6.jar b/plugins/geotools/lib/jdom2-2.0.6.jar
deleted file mode 100644
index 2850ca10c..000000000
Binary files a/plugins/geotools/lib/jdom2-2.0.6.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jt-colorconvert-1.1.12.jar b/plugins/geotools/lib/jt-colorconvert-1.1.12.jar
deleted file mode 100644
index 03e95761c..000000000
Binary files a/plugins/geotools/lib/jt-colorconvert-1.1.12.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jt-contour-1.5.0.jar b/plugins/geotools/lib/jt-contour-1.5.0.jar
deleted file mode 100644
index 5bd1709ce..000000000
Binary files a/plugins/geotools/lib/jt-contour-1.5.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jt-iterators-1.1.12.jar b/plugins/geotools/lib/jt-iterators-1.1.12.jar
deleted file mode 100644
index 9b1c8e392..000000000
Binary files a/plugins/geotools/lib/jt-iterators-1.1.12.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jt-rangelookup-1.5.0.jar b/plugins/geotools/lib/jt-rangelookup-1.5.0.jar
deleted file mode 100644
index eabe6a716..000000000
Binary files a/plugins/geotools/lib/jt-rangelookup-1.5.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jt-stats-1.1.12.jar b/plugins/geotools/lib/jt-stats-1.1.12.jar
deleted file mode 100644
index e452f973a..000000000
Binary files a/plugins/geotools/lib/jt-stats-1.1.12.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jt-utilities-1.1.12.jar b/plugins/geotools/lib/jt-utilities-1.1.12.jar
deleted file mode 100644
index dbd2f1d40..000000000
Binary files a/plugins/geotools/lib/jt-utilities-1.1.12.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jt-utils-1.5.0.jar b/plugins/geotools/lib/jt-utils-1.5.0.jar
deleted file mode 100644
index 352283174..000000000
Binary files a/plugins/geotools/lib/jt-utils-1.5.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jt-vectorbin-1.1.12.jar b/plugins/geotools/lib/jt-vectorbin-1.1.12.jar
deleted file mode 100644
index 6835e3948..000000000
Binary files a/plugins/geotools/lib/jt-vectorbin-1.1.12.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jt-vectorbinarize-1.5.0.jar b/plugins/geotools/lib/jt-vectorbinarize-1.5.0.jar
deleted file mode 100644
index 1998e325f..000000000
Binary files a/plugins/geotools/lib/jt-vectorbinarize-1.5.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jt-vectorize-1.5.0.jar b/plugins/geotools/lib/jt-vectorize-1.5.0.jar
deleted file mode 100644
index 6c9a24175..000000000
Binary files a/plugins/geotools/lib/jt-vectorize-1.5.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jt-warp-1.1.12.jar b/plugins/geotools/lib/jt-warp-1.1.12.jar
deleted file mode 100644
index 1edb9b6fa..000000000
Binary files a/plugins/geotools/lib/jt-warp-1.1.12.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jt-zonal-1.1.12.jar b/plugins/geotools/lib/jt-zonal-1.1.12.jar
deleted file mode 100644
index 176a1abde..000000000
Binary files a/plugins/geotools/lib/jt-zonal-1.1.12.jar and /dev/null differ
diff --git a/plugins/geotools/lib/jt-zonalstats-1.5.0.jar b/plugins/geotools/lib/jt-zonalstats-1.5.0.jar
deleted file mode 100644
index a3de5debd..000000000
Binary files a/plugins/geotools/lib/jt-zonalstats-1.5.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/si-quantity-0.7.1.jar b/plugins/geotools/lib/si-quantity-0.7.1.jar
deleted file mode 100644
index 9ffa1c38b..000000000
Binary files a/plugins/geotools/lib/si-quantity-0.7.1.jar and /dev/null differ
diff --git a/plugins/geotools/lib/si-units-java8-0.7.1.jar b/plugins/geotools/lib/si-units-java8-0.7.1.jar
deleted file mode 100644
index 2eb6cea9d..000000000
Binary files a/plugins/geotools/lib/si-units-java8-0.7.1.jar and /dev/null differ
diff --git a/plugins/geotools/lib/systems-common-java8-0.7.2.jar b/plugins/geotools/lib/systems-common-java8-0.7.2.jar
deleted file mode 100644
index 2f6fdd162..000000000
Binary files a/plugins/geotools/lib/systems-common-java8-0.7.2.jar and /dev/null differ
diff --git a/plugins/geotools/lib/unit-api-1.0.jar b/plugins/geotools/lib/unit-api-1.0.jar
deleted file mode 100644
index 3ded90e9b..000000000
Binary files a/plugins/geotools/lib/unit-api-1.0.jar and /dev/null differ
diff --git a/plugins/geotools/lib/uom-lib-common-1.0.2.jar b/plugins/geotools/lib/uom-lib-common-1.0.2.jar
deleted file mode 100644
index cd9869a4e..000000000
Binary files a/plugins/geotools/lib/uom-lib-common-1.0.2.jar and /dev/null differ
diff --git a/plugins/geotools/lib/uom-se-1.0.8.jar b/plugins/geotools/lib/uom-se-1.0.8.jar
deleted file mode 100644
index 944699199..000000000
Binary files a/plugins/geotools/lib/uom-se-1.0.8.jar and /dev/null differ
