diff --git a/doxia-core/src/main/java/org/apache/maven/doxia/parser/AbstractParser.java b/doxia-core/src/main/java/org/apache/maven/doxia/parser/AbstractParser.java
index e648427..cf5599d 100644
--- a/doxia-core/src/main/java/org/apache/maven/doxia/parser/AbstractParser.java
+++ b/doxia-core/src/main/java/org/apache/maven/doxia/parser/AbstractParser.java
@@ -22,6 +22,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.Reader;
 import java.io.StringReader;
 
 import java.util.Properties;
@@ -170,6 +171,13 @@
     {
         parse( new StringReader( string ), sink );
     }
+    
+    @Override
+    public void parse( Reader source, Sink sink, String reference )
+        throws ParseException
+    {
+        parse( source, sink );
+    }
 
     /**
      * Set <code>secondParsing</code> to true, if we need a second parsing.
diff --git a/doxia-core/src/main/java/org/apache/maven/doxia/parser/Parser.java b/doxia-core/src/main/java/org/apache/maven/doxia/parser/Parser.java
index f3559b0..26a2c28 100644
--- a/doxia-core/src/main/java/org/apache/maven/doxia/parser/Parser.java
+++ b/doxia-core/src/main/java/org/apache/maven/doxia/parser/Parser.java
@@ -58,6 +58,17 @@
      */
     void parse( Reader source, Sink sink )
         throws ParseException;
+    
+    /**
+     * Parses the given source model and emits Doxia events into the given sink.
+     *
+     * @param source not null reader that provides the source document.
+     * You could use <code>newReader</code> methods from {@link org.codehaus.plexus.util.ReaderFactory}.
+     * @param sink A sink that consumes the Doxia events.
+     * @throws org.apache.maven.doxia.parser.ParseException if the model could not be parsed.
+     */
+    void parse( Reader source, Sink sink, String reference )
+        throws ParseException;
 
     /**
      * The parser type value could be {@link #UNKNOWN_TYPE}, {@link #TXT_TYPE} or
diff --git a/doxia-core/src/main/java/org/apache/maven/doxia/util/ByLineReaderSource.java b/doxia-core/src/main/java/org/apache/maven/doxia/util/ByLineReaderSource.java
index 3d9ad2c..07d938e 100644
--- a/doxia-core/src/main/java/org/apache/maven/doxia/util/ByLineReaderSource.java
+++ b/doxia-core/src/main/java/org/apache/maven/doxia/util/ByLineReaderSource.java
@@ -58,6 +58,8 @@
      * called
      */
     private boolean ungetted = false;
+    
+    private String name;
 
     /**
      * Creates the ByLineReaderSource.
@@ -66,9 +68,16 @@
      */
     public ByLineReaderSource( final Reader in )
     {
-        reader = new LineNumberReader( in );
+        this( in, "" );
+    }
+    
+    public ByLineReaderSource( final Reader in, final String name )
+    {
+        this.reader = new LineNumberReader( in );
+        
+        this.name = name;
 
-        lineNumber = -1;
+        this.lineNumber = -1;
     }
 
     /** {@inheritDoc} */
@@ -113,7 +122,7 @@
     /** {@inheritDoc} */
     public final String getName()
     {
-        return "";
+        return name;
     }
 
     /** {@inheritDoc} */
diff --git a/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java b/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java
index 651ca14..7b5c059 100644
--- a/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java
+++ b/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java
@@ -184,10 +184,17 @@
     // Public methods
     // ----------------------------------------------------------------------
 
-    /** {@inheritDoc} */
+    @Override
     public void parse( Reader source, Sink sink )
         throws ParseException
     {
+        parse( source, sink, "" );
+    }
+    
+    @Override
+    public void parse( Reader source, Sink sink, String reference )
+        throws ParseException
+    {
         init();
 
         try
@@ -203,7 +210,7 @@
 
         try
         {
-            this.source = new AptReaderSource( new StringReader( sourceContent ) );
+            this.source = new AptReaderSource( new StringReader( sourceContent ), reference );
 
             this.sink = sink;
             sink.enableLogging( getLog() );
diff --git a/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/ConfluenceParser.java b/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/ConfluenceParser.java
index eabc151..da3d868 100644
--- a/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/ConfluenceParser.java
+++ b/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/ConfluenceParser.java
@@ -104,11 +104,18 @@
         return blocks;
     }
 
-    /** {@inheritDoc} */
-    public synchronized void parse( Reader source, Sink sink )
+    @Override
+    public void parse( Reader source, Sink sink )
         throws ParseException
     {
-        ByLineSource src = new ByLineReaderSource( source );
+        parse( source, sink, "" );
+    }
+
+    @Override
+    public synchronized void parse( Reader source, Sink sink, String reference )
+        throws ParseException
+    {
+        ByLineSource src = new ByLineReaderSource( source, reference );
 
         try
         {
diff --git a/doxia-modules/doxia-module-twiki/src/main/java/org/apache/maven/doxia/module/twiki/TWikiParser.java b/doxia-modules/doxia-module-twiki/src/main/java/org/apache/maven/doxia/module/twiki/TWikiParser.java
index 8f9cfb9..8e90cf6 100644
--- a/doxia-modules/doxia-module-twiki/src/main/java/org/apache/maven/doxia/module/twiki/TWikiParser.java
+++ b/doxia-modules/doxia-module-twiki/src/main/java/org/apache/maven/doxia/module/twiki/TWikiParser.java
@@ -131,14 +131,21 @@
         return ret;
     }
 
-    /** {@inheritDoc} */
-    public final synchronized void parse( final Reader source, final Sink sink )
+    @Override
+    public void parse( Reader source, Sink sink )
+        throws ParseException
+    {
+        parse( source, sink, "" );
+    }
+    
+    @Override
+    public final synchronized void parse( final Reader source, final Sink sink, String reference )
         throws ParseException
     {
         init();
 
         List<Block> blocks;
-        final ByLineSource src = new ByLineReaderSource( source );
+        final ByLineSource src = new ByLineReaderSource( source, reference );
 
         try
         {
