diff --git a/jvm/src/test/scala/scala/xml/XMLTest.scala b/jvm/src/test/scala/scala/xml/XMLTest.scala
index 5bad0fb3..4e5dba1a 100644
--- a/jvm/src/test/scala/scala/xml/XMLTest.scala
+++ b/jvm/src/test/scala/scala/xml/XMLTest.scala
@@ -667,13 +667,14 @@ class XMLTestJVM {
   @UnitTest
   def checkThatErrorHandlerIsNotOverwritten(): Unit = {
     var gotAnError: Boolean = false
-    XML.reader.setErrorHandler(new org.xml.sax.ErrorHandler {
+    val reader = XML.reader
+    reader.setErrorHandler(new org.xml.sax.ErrorHandler {
       override def warning(e: SAXParseException): Unit = gotAnError = true
       override def error(e: SAXParseException): Unit = gotAnError = true
       override def fatalError(e: SAXParseException): Unit = gotAnError = true
     })
     try {
-      XML.loadString("<a>")
+      XML.adapter.loadDocument(Source.fromString("<a>"), reader)
     } catch {
       case _: org.xml.sax.SAXParseException =>
     }
diff --git a/shared/src/main/scala/scala/xml/factory/XMLLoader.scala b/shared/src/main/scala/scala/xml/factory/XMLLoader.scala
index afe54330..47ee3708 100644
--- a/shared/src/main/scala/scala/xml/factory/XMLLoader.scala
+++ b/shared/src/main/scala/scala/xml/factory/XMLLoader.scala
@@ -45,7 +45,11 @@ trait XMLLoader[T <: Node] {
   }
 
   /* Override this to use a different SAXParser. */
-  def parser: SAXParser = parserInstance.get
+  def parser: SAXParser = {
+    val p = parserInstance.get
+    p.reset()
+    p
+  }
 
   /* Override this to use a different XMLReader. */
   def reader: XMLReader = parser.getXMLReader