diff --git a/build.xml b/build.xml
index 83d817f..50c0df7 100644
--- a/build.xml
+++ b/build.xml
@@ -120,7 +120,7 @@
 
     <!-- dependencies -->
     <dependency prefix="xml-apis" artifact="xml-apis:xml-apis:1.4.01" usage="java8"/>
-    <dependency prefix="slf4j-api" artifact="org.slf4j:slf4j-api:1.7.30" usage="main"/>
+    <dependency prefix="log4j-api" artifact="org.apache.logging.log4j:log4j-api:2.14.0" usage="main"/>
     <dependency prefix="saxon" artifact="net.sf.saxon:Saxon-HE:10.3" usage="main"/>
     <dependency prefix="ant" artifact="org.apache.ant:ant:1.10.8" usage="main"/>
     <dependency prefix="javaparser.core" artifact="com.github.javaparser:javaparser-core:3.18.0" usage="main"/>
@@ -139,7 +139,7 @@
 
     <!-- test dependencies -->
     <dependency prefix="junit" artifact="junit:junit:4.13.1" usage="tests"/>
-    <dependency prefix="slf4j-simple" artifact="org.slf4j:slf4j-simple:1.7.30" usage="tests"/>
+    <dependency prefix="log4j-core" artifact="org.apache.logging.log4j:log4j-core:2.14.0" usage="tests"/>
     <dependency prefix="ant-junit" artifact="org.apache.ant:ant-junit:1.10.8" usage="tests"/>
     <dependency prefix="ant-junit4" artifact="org.apache.ant:ant-junit4:1.10.8" usage="tests"/>
     <dependency prefix="hamcrest" artifact="org.hamcrest:hamcrest:2.2" usage="tests"/>
@@ -153,8 +153,8 @@
         <pathelement location="${ant-junit.jar}"/>
         <pathelement location="${ant-junit4.jar}"/>
         <pathelement location="${saxon.jar}"/>
-        <pathelement location="${slf4j-api.jar}"/>
-        <pathelement location="${slf4j-simple.jar}"/>
+        <pathelement location="${log4j-api.jar}"/>
+        <pathelement location="${log4j-core.jar}"/>
         <pathelement location="test/lib/w3c_domts.jar"/>
         <pathelement location="${junit.jar}"/>
         <pathelement location="${hamcrest.jar}"/>
@@ -184,9 +184,8 @@
         <!-- remove previous versions of third-party jars to prevent them from lingering around,
             we often had hard-to-find build/CI-problems because of these! -->
         <delete dir="compile-lib"/>
-        <delete dir="lib/main" includes="javaparser-core-3.15*.jar"/>
-        <delete dir="lib/main" includes="javaparser-core-3.16*.jar"/>
-        <delete dir="lib/main" includes="Saxon-HE-10.2.jar"/>
+        <delete dir="lib/main" includes="javaparser-core-3.15*.jar,javaparser-core-3.16*.jar,slf4j*.jar,Saxon-HE-10.2.jar"/>
+        <delete dir="lib/tests" includes="slf4j*.jar"/>
         <delete dir="lib/util" includes="forbiddenapis-2.6.jar,apache-rat-0.12.jar"/>
         <condition property="jars.present">
             <or>
@@ -194,8 +193,8 @@
                     <available file="${old.xmlbeans.jar}"/>
                     <available file="${javaparser.core.jar}"/>
                     <available file="${saxon.jar}"/>
-                    <available file="${slf4j-api.jar}"/>
-                    <available file="${slf4j-simple.jar}"/>
+                    <available file="${log4j-api.jar}"/>
+                    <available file="${log4j-core.jar}"/>
                     <available file="${junit.jar}"/>
                     <available file="${hamcrest.jar}"/>
                     <available file="${xerces.jar}"/>
@@ -225,8 +224,8 @@
         <downloadfile dest="${old.xmlbeans.jar}" src="${old.xmlbeans.url}"/>
         <downloadfile dest="${javaparser.core.jar}" src="${javaparser.core.url}"/>
         <downloadfile dest="${saxon.jar}" src="${saxon.url}"/>
-        <downloadfile dest="${slf4j-api.jar}" src="${slf4j-api.url}"/>
-        <downloadfile dest="${slf4j-simple.jar}" src="${slf4j-simple.url}"/>
+        <downloadfile dest="${log4j-api.jar}" src="${log4j-api.url}"/>
+        <downloadfile dest="${log4j-core.jar}" src="${log4j-core.url}"/>
         <downloadfile dest="${junit.jar}" src="${junit.url}"/>
         <downloadfile dest="${hamcrest.jar}" src="${hamcrest.url}"/>
         <downloadfile dest="${xerces.jar}" src="${xerces.url}"/>
@@ -359,7 +358,7 @@
                 <pathelement location="${ant-junit.jar}"/>
                 <pathelement location="${ant-junit4.jar}"/>
                 <pathelement location="${saxon.jar}"/>
-                <pathelement location="${slf4j-api.jar}"/>
+                <pathelement location="${log4j-api.jar}"/>
                 <pathelement location="${javaparser.core.jar}"/>
             </classpath>
         </javac>
@@ -374,7 +373,8 @@
 
         <!-- now generate new xmlbeans re-/sources and remove the traces of the oldxbean generated re-/sources -->
         <path id="oldschemas">
-            <pathelement location="${slf4j-api.jar}"/>
+            <pathelement location="${log4j-api.jar}"/>
+            <pathelement location="${log4j-core.jar}"/>
             <pathelement location="${ant.jar}"/>
             <pathelement location="${ant-junit.jar}"/>
             <pathelement location="${ant-junit4.jar}"/>
@@ -402,7 +402,7 @@
                source="${jdk.version.source}">
             <src refid="sources"/>
             <classpath path="${saxon.jar}"/>
-            <classpath path="${slf4j-api.jar}"/>
+            <classpath path="${log4j-api.jar}"/>
             <classpath path="${javaparser.core.jar}"/>
             <classpath path="${ant.jar}"/>
         </javac>
@@ -718,10 +718,10 @@
                 <include name="xmlbeans-${version.base}-sources.jar"/>
             </zipfileset>
             <zipfileset dir="lib/main" prefix="${prefix}/lib">
-                <include name="slf4j-*.jar"/>
+                <include name="log4j-*.jar"/>
             </zipfileset>
             <zipfileset dir="lib/tests" prefix="${prefix}/lib">
-                <include name="slf4j-*.jar"/>
+                <include name="log4j-*.jar"/>
             </zipfileset>
         </zip>
         <tar destfile="build/xmlbeans-bin-${version.base}-${tstamp.dist}.tgz" compression="gzip" longfile="posix">
@@ -738,10 +738,10 @@
                 <include name="xmlbeans-${version.base}-sources.jar"/>
             </tarfileset>
             <tarfileset dir="lib/main" prefix="${prefix}/lib">
-                <include name="slf4j-*.jar"/>
+                <include name="log4j-*.jar"/>
             </tarfileset>
             <tarfileset dir="lib/tests" prefix="${prefix}/lib">
-                <include name="slf4j-*.jar"/>
+                <include name="log4j-*.jar"/>
             </tarfileset>
         </tar>
 
diff --git a/src/main/java/org/apache/xmlbeans/impl/common/DocumentHelper.java b/src/main/java/org/apache/xmlbeans/impl/common/DocumentHelper.java
index f1b3e77..7e12d26 100644
--- a/src/main/java/org/apache/xmlbeans/impl/common/DocumentHelper.java
+++ b/src/main/java/org/apache/xmlbeans/impl/common/DocumentHelper.java
@@ -15,9 +15,9 @@
 
 package org.apache.xmlbeans.impl.common;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.xmlbeans.XmlOptionsBean;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.xml.sax.ErrorHandler;
 import org.xml.sax.InputSource;
@@ -34,7 +34,7 @@
 import java.util.concurrent.TimeUnit;
 
 public final class DocumentHelper {
-    private static final Logger logger = LoggerFactory.getLogger(DocumentHelper.class);
+    private static final Logger LOG = LogManager.getLogger(DocumentHelper.class);
     private static long lastLog;
 
     private DocumentHelper() {}
@@ -42,15 +42,15 @@
     private static class DocHelperErrorHandler implements ErrorHandler {
 
         public void warning(SAXParseException exception) throws SAXException {
-            logger.warn(asString(exception), exception);
+            LOG.atWarn().withThrowable(exception).log(asString(exception));
         }
 
         public void error(SAXParseException exception) throws SAXException {
-            logger.error(asString(exception), exception);
+            LOG.atError().withThrowable(exception).log(asString(exception));
         }
 
         public void fatalError(SAXParseException exception) throws SAXException {
-            logger.error(asString(exception), exception);
+            LOG.atFatal().withThrowable(exception).log(asString(exception));
             throw exception;
         }
 
@@ -93,7 +93,7 @@
         }
     }
 
-    private static final DocumentBuilderFactory documentBuilderFactory(XmlOptionsBean options) {
+    private static DocumentBuilderFactory documentBuilderFactory(XmlOptionsBean options) {
         DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
         documentBuilderFactory.setNamespaceAware(true);
         documentBuilderFactory.setValidating(false);
@@ -108,9 +108,9 @@
         try {
             dbf.setFeature(feature, enabled);
         } catch (Exception e) {
-            logger.warn("SAX Feature unsupported: {}", feature, e);
+            LOG.atWarn().withThrowable(e).log("SAX Feature unsupported: {}", feature);
         } catch (AbstractMethodError ame) {
-            logger.warn("Cannot set SAX feature {} because of outdated XML parser in classpath", feature, ame);
+            LOG.atWarn().withThrowable(ame).log("Cannot set SAX feature {} because of outdated XML parser in classpath", feature);
         }
     }
 
@@ -131,7 +131,7 @@
                 // continue without log, this is expected in some setups
             } catch (Throwable e) {     // NOSONAR - also catch things like NoClassDefError here
                 if(System.currentTimeMillis() > lastLog + TimeUnit.MINUTES.toMillis(5)) {
-                    logger.warn("DocumentBuilderFactory Security Manager could not be setup [log suppressed for 5 minutes]", e);
+                    LOG.atWarn().withThrowable(e).log("DocumentBuilderFactory Security Manager could not be setup [log suppressed for 5 minutes]");
                     lastLog = System.currentTimeMillis();
                 }
             }
@@ -142,7 +142,7 @@
             dbf.setAttribute(XMLBeansConstants.ENTITY_EXPANSION_LIMIT, options.getEntityExpansionLimit());
         } catch (Throwable e) {
             if(System.currentTimeMillis() > lastLog + TimeUnit.MINUTES.toMillis(5)) {
-                logger.warn("DocumentBuilderFactory Entity Expansion Limit could not be setup [log suppressed for 5 minutes]", e);
+                LOG.atWarn().withThrowable(e).log("DocumentBuilderFactory Entity Expansion Limit could not be setup [log suppressed for 5 minutes]");
                 lastLog = System.currentTimeMillis();
             }
         }
diff --git a/src/main/java/org/apache/xmlbeans/impl/common/SAXHelper.java b/src/main/java/org/apache/xmlbeans/impl/common/SAXHelper.java
index cb24942..f99f69f 100644
--- a/src/main/java/org/apache/xmlbeans/impl/common/SAXHelper.java
+++ b/src/main/java/org/apache/xmlbeans/impl/common/SAXHelper.java
@@ -15,10 +15,10 @@
 
 package org.apache.xmlbeans.impl.common;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.xmlbeans.XmlOptions;
 import org.apache.xmlbeans.XmlOptionsBean;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -36,7 +36,7 @@
  * Provides handy methods for working with SAX parsers and readers
  */
 public final class SAXHelper {
-    private static final Logger logger = LoggerFactory.getLogger(SAXHelper.class);
+    private static final Logger LOG = LogManager.getLogger(SAXHelper.class);
     private static long lastLog;
 
     private SAXHelper() {
@@ -79,9 +79,9 @@
         try {
             spf.setFeature(feature, flag);
         } catch (Exception e) {
-            logger.warn("SAX Feature unsupported: {}", feature, e);
+            LOG.atWarn().withThrowable(e).log("SAX Feature unsupported: {}", feature);
         } catch (AbstractMethodError ame) {
-            logger.warn("Cannot set SAX feature {} because outdated XML parser in classpath", feature, ame);
+            LOG.atWarn().withThrowable(ame).log("Cannot set SAX feature {} because outdated XML parser in classpath", feature);
         }
     }
 
@@ -89,9 +89,9 @@
         try {
             xmlReader.setFeature(feature, true);
         } catch (Exception e) {
-            logger.warn("SAX Feature unsupported: {}", feature, e);
+            LOG.atWarn().withThrowable(e).log("SAX Feature unsupported: {}", feature);
         } catch (AbstractMethodError ame) {
-            logger.warn("Cannot set SAX feature {} because outdated XML parser in classpath", feature, ame);
+            LOG.atWarn().withThrowable(ame).log("Cannot set SAX feature {} because outdated XML parser in classpath", feature);
         }
     }
 
@@ -111,7 +111,7 @@
             } catch (Throwable e) {     // NOSONAR - also catch things like NoClassDefError here
                 // throttle the log somewhat as it can spam the log otherwise
                 if (System.currentTimeMillis() > lastLog + TimeUnit.MINUTES.toMillis(5)) {
-                    logger.warn("SAX Security Manager could not be setup [log suppressed for 5 minutes]", e);
+                    LOG.atWarn().withThrowable(e).log("SAX Security Manager could not be setup [log suppressed for 5 minutes]");
                     lastLog = System.currentTimeMillis();
                 }
             }
@@ -123,7 +123,7 @@
         } catch (SAXException e) {     // NOSONAR - also catch things like NoClassDefError here
             // throttle the log somewhat as it can spam the log otherwise
             if (System.currentTimeMillis() > lastLog + TimeUnit.MINUTES.toMillis(5)) {
-                logger.warn("SAX Security Manager could not be setup [log suppressed for 5 minutes]", e);
+                LOG.atWarn().withThrowable(e).log("SAX Security Manager could not be setup [log suppressed for 5 minutes]");
                 lastLog = System.currentTimeMillis();
             }
         }
diff --git a/src/main/java/org/apache/xmlbeans/impl/common/StaxHelper.java b/src/main/java/org/apache/xmlbeans/impl/common/StaxHelper.java
index 59cebaa..207e8cd 100644
--- a/src/main/java/org/apache/xmlbeans/impl/common/StaxHelper.java
+++ b/src/main/java/org/apache/xmlbeans/impl/common/StaxHelper.java
@@ -15,19 +15,19 @@
 
 package org.apache.xmlbeans.impl.common;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.xmlbeans.XmlOptionsBean;
+
 import javax.xml.stream.XMLEventFactory;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLOutputFactory;
 
-import org.apache.xmlbeans.XmlOptionsBean;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * Provides handy methods for working with StAX parsers and readers
  */
 public final class StaxHelper {
-    private static final Logger logger = LoggerFactory.getLogger(StaxHelper.class);
+    private static final Logger LOG = LogManager.getLogger(StaxHelper.class);
 
     private StaxHelper() {}
 
@@ -58,14 +58,14 @@
     public static XMLEventFactory newXMLEventFactory(XmlOptionsBean options) {
         return XMLEventFactory.newFactory();
     }
-            
+
     private static void trySetProperty(XMLInputFactory factory, String feature, boolean flag) {
         try {
             factory.setProperty(feature, flag);
         } catch (Exception e) {
-            logger.warn("StAX Property unsupported: {}", feature, e);
+            LOG.atWarn().withThrowable(e).log("StAX Property unsupported: {}", feature);
         } catch (AbstractMethodError ame) {
-            logger.warn("Cannot set StAX property {} because outdated StAX parser in classpath", feature, ame);
+            LOG.atWarn().withThrowable(ame).log("Cannot set StAX property {} because outdated StAX parser in classpath", feature);
         }
     }
 
@@ -73,9 +73,9 @@
         try {
             factory.setProperty(feature, flag);
         } catch (Exception e) {
-            logger.warn("StAX Property unsupported: {}", feature, e);
+            LOG.atWarn().withThrowable(e).log("StAX Property unsupported: {}", feature);
         } catch (AbstractMethodError ame) {
-            logger.warn("Cannot set StAX property {} because outdated StAX parser in classpath", feature, ame);
+            LOG.atWarn().withThrowable(ame).log("Cannot set StAX property {} because outdated StAX parser in classpath", feature);
         }
     }
 }
diff --git a/src/main/java/org/apache/xmlbeans/impl/store/Locale.java b/src/main/java/org/apache/xmlbeans/impl/store/Locale.java
index 58529a0..9d9ace7 100755
--- a/src/main/java/org/apache/xmlbeans/impl/store/Locale.java
+++ b/src/main/java/org/apache/xmlbeans/impl/store/Locale.java
@@ -15,14 +15,17 @@
 
 package org.apache.xmlbeans.impl.store;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.xmlbeans.*;
 import org.apache.xmlbeans.XmlCursor.XmlBookmark;
-import org.apache.xmlbeans.impl.common.*;
+import org.apache.xmlbeans.impl.common.QNameHelper;
+import org.apache.xmlbeans.impl.common.ResolverUtil;
+import org.apache.xmlbeans.impl.common.SAXHelper;
+import org.apache.xmlbeans.impl.common.XmlLocale;
 import org.apache.xmlbeans.impl.store.Cur.Locations;
 import org.apache.xmlbeans.impl.store.DomImpl.Dom;
 import org.apache.xmlbeans.impl.store.Saaj.SaajCallback;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.w3c.dom.*;
 import org.xml.sax.*;
 import org.xml.sax.ext.DeclHandler;
@@ -46,7 +49,7 @@
 
 public final class Locale
     implements DOMImplementation, SaajCallback, XmlLocale {
-    private static final Logger logger = LoggerFactory.getLogger(Locale.class);
+    private static final Logger LOG = LogManager.getLogger(Locale.class);
 
     static final int ROOT = Cur.ROOT;
     static final int ELEM = Cur.ELEM;
@@ -1914,7 +1917,7 @@
 
 
         // the "better" cache should never walk more than 1/2 len
-        Dom x = null;
+        Dom x;
         boolean bInvalidate = (db - _domNthCache_B._len / 2 > 0) &&
                               (db - _domNthCache_B._len / 2 - domNthCache.BLITZ_BOUNDARY > 0);
         boolean aInvalidate = (da - _domNthCache_A._len / 2 > 0) &&
@@ -2003,7 +2006,7 @@
             }
 
             if (_len == -1) {
-                Dom x = null;
+                Dom x;
 
                 if (_child != null && _n != -1) {
                     x = _child;
@@ -2294,7 +2297,7 @@
         return !_noSync;
     }
 
-    static final boolean isWhiteSpace(String s) {
+    static boolean isWhiteSpace(String s) {
         int l = s.length();
 
         while (l-- > 0) {
@@ -2306,7 +2309,7 @@
         return true;
     }
 
-    static final boolean isWhiteSpace(StringBuffer sb) {
+    static boolean isWhiteSpace(StringBuffer sb) {
         int l = sb.length();
 
         while (l-- > 0) {
@@ -2616,7 +2619,7 @@
             }
         }
 
-        public void characters(char ch[], int start, int length)
+        public void characters(char[] ch, int start, int length)
             throws SAXException {
             _context.text(ch, start, length);
 
@@ -2634,11 +2637,11 @@
             }
         }
 
-        public void ignorableWhitespace(char ch[], int start, int length)
+        public void ignorableWhitespace(char[] ch, int start, int length)
             throws SAXException {
         }
 
-        public void comment(char ch[], int start, int length)
+        public void comment(char[] ch, int start, int length)
             throws SAXException {
             _context.comment(ch, start, length);
         }
@@ -2759,7 +2762,7 @@
             try {
                 _xr.setProperty("http://xml.org/sax/properties/declaration-handler", this);
             } catch (Throwable e) {
-                logger.warn("SAX Declaration Handler is not supported", e);
+                LOG.atWarn().withThrowable(e).log("SAX Declaration Handler is not supported");
             }
         }
 
@@ -2830,7 +2833,7 @@
             throw e;
         }
 
-        private XMLReader _xr;
+        private final XMLReader _xr;
     }
 
     private Dom load(InputSource is, XmlOptions options)
@@ -2974,7 +2977,7 @@
 
     private static final class DefaultQNameFactory
         implements QNameFactory {
-        private QNameCache _cache = XmlBeans.getQNameCache();
+        private final QNameCache _cache = XmlBeans.getQNameCache();
 
         public QName getQName(String uri, String local) {
             return _cache.getName(uri, local, "");
@@ -3005,7 +3008,7 @@
 
     private static final class LocalDocumentQNameFactory
         implements QNameFactory {
-        private QNameCache _cache = new QNameCache(32);
+        private final QNameCache _cache = new QNameCache(32);
 
         public QName getQName(String uri, String local) {
             return _cache.getName(uri, local, "");
diff --git a/src/main/multimodule/java9/module-info.class b/src/main/multimodule/java9/module-info.class
index 836fbf5..e794481 100644
--- a/src/main/multimodule/java9/module-info.class
+++ b/src/main/multimodule/java9/module-info.class
Binary files differ
diff --git a/src/main/multimodule/java9/module-info.java b/src/main/multimodule/java9/module-info.java
index 6c9bc1f..fb91d07 100644
--- a/src/main/multimodule/java9/module-info.java
+++ b/src/main/multimodule/java9/module-info.java
@@ -18,7 +18,7 @@
 module org.apache.xmlbeans {
     requires java.xml;
     requires jdk.xml.dom;
-    requires org.slf4j;
+    requires org.apache.logging.log4j;
     requires static ant;
     requires static com.github.javaparser.core;
     requires static Saxon.HE;
diff --git a/src/main/resources/maven/pom.xml b/src/main/resources/maven/pom.xml
index 77bee6f..eab851b 100644
--- a/src/main/resources/maven/pom.xml
+++ b/src/main/resources/maven/pom.xml
@@ -78,9 +78,15 @@
 
     <dependencies>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>1.7.30</version>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-api</artifactId>
+            <version>2.14.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</artifactId>
+            <version>2.14.0</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>net.sf.saxon</groupId>
