diff --git a/lib/updaters/types/maven.js b/lib/updaters/types/maven.js
index 37d81c5be..b0b28d5e7 100644
--- a/lib/updaters/types/maven.js
+++ b/lib/updaters/types/maven.js
@@ -1,40 +1,39 @@
-const jsdom = require('jsdom');
-const serialize = require('w3c-xmlserializer');
 const detectNewline = require('detect-newline');
+const { XMLParser, XMLBuilder } = require('fast-xml-parser');
+
 const CRLF = '\r\n';
 const LF = '\n';
 
 function pomDocument(contents) {
-  const dom = new jsdom.JSDOM('');
-  const parser = new dom.window.DOMParser();
-  return parser.parseFromString(contents, 'application/xml');
+  const parser = new XMLParser();
+  return parser.parse(contents);
 }
 
-function pomVersionElement(document) {
-  const versionElement = document.querySelector('project > version');
+function pomVersion(document) {
+  const version = document?.project?.version;
 
-  if (!versionElement) {
+  if (!version) {
     throw new Error(
       'Failed to read the version field in your pom file - is it present?',
     );
   }
 
-  return versionElement;
+  return version;
 }
 
 module.exports.readVersion = function (contents) {
   const document = pomDocument(contents);
-  return pomVersionElement(document).textContent;
+  return pomVersion(document);
 };
 
 module.exports.writeVersion = function (contents, version) {
   const newline = detectNewline(contents);
   const document = pomDocument(contents);
-  const versionElement = pomVersionElement(document);
 
-  versionElement.textContent = version;
+  document.project.version = version;
 
-  const xml = serialize(document);
+  const builder = new XMLBuilder({ format: true });
+  const xml = builder.build(document);
 
   if (newline === CRLF) {
     return xml.replace(/\n/g, CRLF) + CRLF;
diff --git a/package.json b/package.json
index 6995b105f..ebef88c41 100644
--- a/package.json
+++ b/package.json
@@ -47,12 +47,11 @@
     "detect-indent": "^6.1.0",
     "detect-newline": "^3.1.0",
     "dotgitignore": "^2.1.0",
+    "fast-xml-parser": "^5.2.5",
     "figures": "^3.2.0",
     "find-up": "^5.0.0",
     "git-semver-tags": "^5.0.1",
-    "jsdom": "^25.0.1",
     "semver": "^7.7.2",
-    "w3c-xmlserializer": "^5.0.0",
     "yaml": "^2.6.0",
     "yargs": "^17.7.2"
   },
diff --git a/test/mocks/pom-6.4.0-crlf.xml b/test/mocks/pom-6.4.0-crlf.xml
index 90b1bfdb7..1cb5a5ca7 100644
--- a/test/mocks/pom-6.4.0-crlf.xml
+++ b/test/mocks/pom-6.4.0-crlf.xml
@@ -1,20 +1,16 @@
 
   4.0.0
-
   
     com.mycompany.app
     my-app
     3.0.0
   
-
   com.mycompany.app
   my-module
   6.4.0
-
   
     2.0.0
   
-
   
     
       org.some.dependency
@@ -28,3 +24,4 @@
     
   
 
+
diff --git a/test/mocks/pom-6.4.0-lf.xml b/test/mocks/pom-6.4.0-lf.xml
index 99cb25900..32b7e3da9 100644
--- a/test/mocks/pom-6.4.0-lf.xml
+++ b/test/mocks/pom-6.4.0-lf.xml
@@ -1,20 +1,16 @@
 
   4.0.0
-
   
     com.mycompany.app
     my-app
     3.0.0
   
-
   com.mycompany.app
   my-module
   6.4.0
-
   
     2.0.0
   
-
   
     
       org.some.dependency
@@ -28,3 +24,4 @@
     
   
 
+