diff --git a/pom.xml b/pom.xml
index 66f40a1..e281ac2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -198,7 +198,7 @@
     <javaVersion>8</javaVersion>
     <!-- for dependencies -->
     <jettyVersion>9.4.53.v20231009</jettyVersion>
-    <doxiaVersion>2.0.0-M8</doxiaVersion>
+    <doxiaVersion>2.0.0-M9-SNAPSHOT</doxiaVersion>
     <doxiaSitetoolsVersion>2.0.0-M17-SNAPSHOT</doxiaSitetoolsVersion>
     <wagonVersion>3.5.3</wagonVersion>
     <slf4jVersion>1.7.36</slf4jVersion>
diff --git a/src/main/java/org/apache/maven/plugins/site/render/AbstractSiteRenderingMojo.java b/src/main/java/org/apache/maven/plugins/site/render/AbstractSiteRenderingMojo.java
index 151ee18..66e8922 100644
--- a/src/main/java/org/apache/maven/plugins/site/render/AbstractSiteRenderingMojo.java
+++ b/src/main/java/org/apache/maven/plugins/site/render/AbstractSiteRenderingMojo.java
@@ -95,17 +95,18 @@
     private Map<String, Object> attributes;
 
     /**
-     * Parser configurations (per Doxia markup source file paths).
-     * Each entry has the following format
+     * Parser configurations (per matching Doxia markup source file path patterns).
+     * Each configuration item has the following format:
      * <p/>
      * <pre>
      *   &lt;patterns&gt;
-     *     &lt;pattern&gt;glob:**&#47;*.md&lt;/pattern&gt;&lt;!-- is either glob or regex syntax --&gt;
+     *     &lt;pattern&gt;glob:**&#47;*.md&lt;/pattern&gt;&lt;!-- is either glob or regex syntax with the according prefix --&gt;
      *   &lt;/patterns&gt;
      *   &lt;emitComments&gt;true&lt;/emitComments&gt;&lt;!-- false by default --&gt;
      *   &lt;emitAnchorsForIndexableEntries&gt;false&lt;/emitAnchorsForIndexableEntries&gt;&lt;!-- true by default --&gt;
      * </pre>
-     *
+     * The configuration is only applied if one of the given patterns matches the Doxia markup source file path.
+     * The first matching configuration wins (i.e. is applied).
      * @since 4.0.0
      * @see java.nio.file.FileSystem#getPathMatcher(String) FileSystem.getPathMatcher(String) for the supported patterns
      */
diff --git a/src/main/java/org/apache/maven/plugins/site/render/ParserConfiguration.java b/src/main/java/org/apache/maven/plugins/site/render/ParserConfiguration.java
index 4f8a84d..c48abda 100644
--- a/src/main/java/org/apache/maven/plugins/site/render/ParserConfiguration.java
+++ b/src/main/java/org/apache/maven/plugins/site/render/ParserConfiguration.java
@@ -28,7 +28,9 @@
 
 import org.apache.maven.doxia.parser.Parser;
 
-/** Configuration for a Doxia {@link Parser} (bound to a specific markup source path pattern) **/
+/** Configuration for a Doxia {@link Parser} (bound to a specific markup source path pattern)
+ * @since 4.0.0
+ **/
 public class ParserConfiguration implements org.apache.maven.doxia.siterenderer.ParserConfiguration {
 
     /**
@@ -56,7 +58,7 @@
 
     /**
      * Switches the feature {@link Parser#setEmitComments(boolean)} either on or off.
-     * Default is off.
+     * Default (for Doxia Sitetools) is off.
      *
      * @param emitComments {@code true} to switch it on, otherwise leave it off
      * @see Parser#setEmitComments(boolean)
@@ -67,7 +69,7 @@
 
     /**
      * Switches the feature {@link Parser#setEmitAnchorsForIndexableEntries(boolean)} either on or off.
-     * Default is on.
+     * Default (for Doxia Sitetools) is on.
      *
      * @param emitAnchorsForIndexableEntries {@code true} to switch it on, otherwise leave it off
      * @see Parser#setEmitAnchorsForIndexableEntries(boolean)
@@ -110,8 +112,8 @@
     }
 
     @Override
-    public void accept(Parser parser) {
+    public void configure(Parser parser) {
         parser.setEmitComments(emitComments);
-        // parser.setEmitAnchorsForIndexableEntries(emitAnchorsForIndexableEntries);
+        parser.setEmitAnchorsForIndexableEntries(emitAnchorsForIndexableEntries);
     }
 }
diff --git a/src/main/java/org/apache/maven/plugins/site/render/ParserConfigurationRetrieverImpl.java b/src/main/java/org/apache/maven/plugins/site/render/ParserConfigurationRetrieverImpl.java
index a6ce768..9376595 100644
--- a/src/main/java/org/apache/maven/plugins/site/render/ParserConfigurationRetrieverImpl.java
+++ b/src/main/java/org/apache/maven/plugins/site/render/ParserConfigurationRetrieverImpl.java
@@ -33,7 +33,10 @@
     }
 
     @Override
-    public Optional<ParserConfiguration> apply(Path filePath) {
-        return parserConfigurations.stream().filter(c -> c.matches(filePath)).findFirst();
+    public Optional<org.apache.maven.doxia.siterenderer.ParserConfiguration> retrieve(Path filePath) {
+        return parserConfigurations.stream()
+                .filter(c -> c.matches(filePath))
+                .findFirst()
+                .map(c -> c);
     }
 }
diff --git a/src/main/java/org/apache/maven/plugins/site/render/ReportDocumentRenderer.java b/src/main/java/org/apache/maven/plugins/site/render/ReportDocumentRenderer.java
index e30862e..c359269 100644
--- a/src/main/java/org/apache/maven/plugins/site/render/ReportDocumentRenderer.java
+++ b/src/main/java/org/apache/maven/plugins/site/render/ReportDocumentRenderer.java
@@ -131,7 +131,6 @@
                     docRenderingContext.getBasedirRelativePath(),
                     document,
                     docRenderingContext.getParserId(),
-                    docRenderingContext.getParserConfiguration(), // TODO: use another config?
                     docRenderingContext.getExtension(),
                     docRenderingContext.isEditable(),
                     docRenderingContext.getGenerator());
diff --git a/src/test/java/org/apache/maven/plugins/site/render/ParserConfigurationRetrieverImplTest.java b/src/test/java/org/apache/maven/plugins/site/render/ParserConfigurationRetrieverImplTest.java
index 2cc80db..df80ea1 100644
--- a/src/test/java/org/apache/maven/plugins/site/render/ParserConfigurationRetrieverImplTest.java
+++ b/src/test/java/org/apache/maven/plugins/site/render/ParserConfigurationRetrieverImplTest.java
@@ -35,7 +35,8 @@
         ParserConfiguration config2 = new ParserConfiguration();
         assertEquals(
                 Optional.empty(),
-                new ParserConfigurationRetrieverImpl(Arrays.asList(config1, config2)).apply(Paths.get("some", "file")));
+                new ParserConfigurationRetrieverImpl(Arrays.asList(config1, config2))
+                        .retrieve(Paths.get("some", "file")));
     }
 
     @Test
@@ -45,7 +46,7 @@
         ParserConfigurationRetrieverImpl parserConfigurationRetrieverImpl =
                 new ParserConfigurationRetrieverImpl(Arrays.asList(config1));
         assertThrows(RuntimeException.class, () -> {
-            parserConfigurationRetrieverImpl.apply(Paths.get("some", "file"));
+            parserConfigurationRetrieverImpl.retrieve(Paths.get("some", "file"));
         });
     }
 
@@ -57,7 +58,8 @@
         config2.addPattern("regex:.*\\.apt");
         assertEquals(
                 Optional.empty(),
-                new ParserConfigurationRetrieverImpl(Arrays.asList(config1, config2)).apply(Paths.get("some", "file")));
+                new ParserConfigurationRetrieverImpl(Arrays.asList(config1, config2))
+                        .retrieve(Paths.get("some", "file")));
     }
 
     @Test
@@ -68,7 +70,8 @@
         config2.addPattern("glob:**/*");
         assertEquals(
                 Optional.of(config2),
-                new ParserConfigurationRetrieverImpl(Arrays.asList(config1, config2)).apply(Paths.get("some", "file")));
+                new ParserConfigurationRetrieverImpl(Arrays.asList(config1, config2))
+                        .retrieve(Paths.get("some", "file")));
     }
 
     @Test
@@ -79,6 +82,7 @@
         config2.addPattern("regex:.*");
         assertEquals(
                 Optional.of(config1),
-                new ParserConfigurationRetrieverImpl(Arrays.asList(config1, config2)).apply(Paths.get("some", "file")));
+                new ParserConfigurationRetrieverImpl(Arrays.asList(config1, config2))
+                        .retrieve(Paths.get("some", "file")));
     }
 }
