diff --git a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
index 25f73d1..43c7609 100644
--- a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
+++ b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
@@ -470,7 +470,7 @@
             IOUtil.close( reader );
         }
 
-        generateDocument( writer, sink, siteContext );
+        mergeDocumentIntoSite( writer, (DocumentContent) sink, siteContext );
     }
 
     /**
@@ -605,22 +605,22 @@
      * Create a Velocity Context for the site template decorating the document. In addition to all the informations
      * from the document, this context contains data gathered in {@link SiteRendererSink} during document rendering.
      *
-     * @param siteRendererSink the site renderer sink for the document
+     * @param content the document content to be merged into the template
      * @param siteRenderingContext the site rendering context
      * @return
      */
-    protected Context createSiteTemplateVelocityContext( SiteRendererSink siteRendererSink,
+    protected Context createSiteTemplateVelocityContext( DocumentContent content,
                                                          SiteRenderingContext siteRenderingContext )
     {
         // first get the context from document
-        Context context = createDocumentVelocityContext( siteRendererSink.getRenderingContext(), siteRenderingContext );
+        Context context = createDocumentVelocityContext( content.getRenderingContext(), siteRenderingContext );
 
         // then add data objects from rendered document
 
         // Add infos from document
-        context.put( "authors", siteRendererSink.getAuthors() );
+        context.put( "authors", content.getAuthors() );
 
-        context.put( "shortTitle", siteRendererSink.getTitle() );
+        context.put( "shortTitle", content.getTitle() );
 
         // DOXIASITETOOLS-70: Prepend the project name to the title, if any
         String title = "";
@@ -638,16 +638,16 @@
         {
             title += " &#x2013; "; // Symbol Name: En Dash, Html Entity: &ndash;
         }
-        title += siteRendererSink.getTitle();
+        title += content.getTitle();
 
         context.put( "title", title );
 
-        context.put( "headContent", siteRendererSink.getHead() );
+        context.put( "headContent", content.getHead() );
 
-        context.put( "bodyContent", siteRendererSink.getBody() );
+        context.put( "bodyContent", content.getBody() );
 
         // document date (got from Doxia Sink date() API)
-        String documentDate = siteRendererSink.getDate();
+        String documentDate = content.getDate();
         if ( StringUtils.isNotEmpty( documentDate ) )
         {
             context.put( "documentDate", documentDate );
@@ -667,13 +667,13 @@
             catch ( java.text.ParseException e )
             {
                 getLogger().warn( "Could not parse date '" + documentDate + "' from "
-                    + siteRendererSink.getRenderingContext().getInputName()
+                    + content.getRenderingContext().getInputName()
                     + " (expected yyyy-MM-dd format), ignoring!" );
             }
         }
 
         // document rendering context, to get eventual inputName
-        context.put( "docRenderingContext", siteRendererSink.getRenderingContext() );
+        context.put( "docRenderingContext", content.getRenderingContext() );
 
         return context;
     }
@@ -682,12 +682,20 @@
     public void generateDocument( Writer writer, SiteRendererSink sink, SiteRenderingContext siteRenderingContext )
             throws RendererException
     {
+        mergeDocumentIntoSite( writer, sink, siteRenderingContext );
+    }
+
+    /** {@inheritDoc} */
+    public void mergeDocumentIntoSite( Writer writer, DocumentContent content,
+                                           SiteRenderingContext siteRenderingContext )
+        throws RendererException
+    {
         String templateName = siteRenderingContext.getTemplateName();
 
         getLogger().debug( "Processing Velocity for template " + templateName + " on "
-            + sink.getRenderingContext().getInputName() );
+            + content.getRenderingContext().getInputName() );
 
-        Context context = createSiteTemplateVelocityContext( sink, siteRenderingContext );
+        Context context = createSiteTemplateVelocityContext( content, siteRenderingContext );
 
         ClassLoader old = null;
 
diff --git a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DocumentContent.java b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DocumentContent.java
new file mode 100644
index 0000000..4bcbb9e
--- /dev/null
+++ b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DocumentContent.java
@@ -0,0 +1,66 @@
+package org.apache.maven.doxia.siterenderer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+/**
+ * Document content, that will be merged into a site template.
+ *
+ * @since 1.8
+ */
+public interface DocumentContent
+{
+    /**
+     * Get the title of the document.
+     * @return the document title
+     */
+    String getTitle();
+
+    /**
+     * Get the date of the document.
+     * @return the document date
+     */
+    String getDate();
+
+    /**
+     * Get the authors of the document.
+     * @return the document authors
+     */
+    List<String> getAuthors();
+
+    /**
+     * Get the html head of the document.
+     * @return the document html head
+     */
+    String getHead();
+
+    /**
+     * Get the html body of the document.
+     * @return the document body head
+     */
+    String getBody();
+
+    /**
+     * Get the document rendering context.
+     * @return the document rendering context
+     */
+    RenderingContext getRenderingContext();
+}
diff --git a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/Renderer.java b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/Renderer.java
index 9607209..82b3068 100644
--- a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/Renderer.java
+++ b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/Renderer.java
@@ -69,10 +69,24 @@
      * @param siteRenderingContext the SiteRenderingContext to use.
      * @throws RendererException if it bombs.
      */
+    @Deprecated
     void generateDocument( Writer writer, SiteRendererSink sink, SiteRenderingContext siteRenderingContext )
         throws RendererException;
 
     /**
+     * Generate a document output integrated in a site from a document content,
+     * i.e. merge the document content into the site template.
+     *
+     * @param writer the Writer to use.
+     * @param content the document content to be merged
+     * @param siteRenderingContext the SiteRenderingContext to use.
+     * @throws RendererException if it bombs.
+     * @since 1.8
+     */
+    void mergeDocumentIntoSite( Writer writer, DocumentContent content, SiteRenderingContext siteRenderingContext )
+        throws RendererException;
+
+    /**
      * Create a Site Rendering Context for a site using a skin.
      *
      * @param skin
diff --git a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/sink/SiteRendererSink.java b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/sink/SiteRendererSink.java
index d47d3d8..9f59855 100644
--- a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/sink/SiteRendererSink.java
+++ b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/sink/SiteRendererSink.java
@@ -31,6 +31,7 @@
 import org.apache.maven.doxia.module.xhtml.XhtmlSink;
 import org.apache.maven.doxia.sink.Sink;
 import org.apache.maven.doxia.sink.SinkEventAttributes;
+import org.apache.maven.doxia.siterenderer.DocumentContent;
 import org.apache.maven.doxia.siterenderer.RenderingContext;
 import org.apache.maven.doxia.util.HtmlTools;
 import org.codehaus.plexus.util.StringUtils;
@@ -41,17 +42,11 @@
  * into skin or template: title, date, authors, head, body 
  *
  * @author <a href="mailto:evenisse@codehaus.org">Emmanuel Venisse</a>
- * @version $Id$
- * @see #getTitle()
- * @see #getDate()
- * @see #getAuthors()
- * @see #getHead()
- * @see #getBody()
  */
 @SuppressWarnings( "checkstyle:methodname" )
 public class SiteRendererSink
     extends XhtmlSink
-    implements Sink, org.codehaus.doxia.sink.Sink
+    implements Sink, org.codehaus.doxia.sink.Sink, DocumentContent
 {
     private String date = "";
 
@@ -124,16 +119,6 @@
         resetTextBuffer();
     }
 
-    /**
-     * <p>Getter for the field <code>title</code>.</p>
-     *
-     * @return a {@link java.lang.String} object.
-     */
-    public String getTitle()
-    {
-        return title;
-    }
-
     /** {@inheritDoc} */
     @Override
     public void author()
@@ -155,16 +140,6 @@
         resetTextBuffer();
     }
 
-    /**
-     * <p>Getter for the field <code>authors</code>.</p>
-     *
-     * @return a {@link java.util.List} object.
-     */
-    public List<String> getAuthors()
-    {
-        return authors;
-    }
-
     /** {@inheritDoc} */
     @Override
     public void date()
@@ -185,16 +160,6 @@
     }
 
     /**
-     * <p>Getter for the field <code>date</code>.</p>
-     *
-     * @return a {@link java.lang.String} object.
-     */
-    public String getDate()
-    {
-        return date;
-    }
-
-    /**
      * {@inheritDoc}
      *
      * Do nothing.
@@ -218,28 +183,6 @@
         // nop
     }
 
-    /**
-     * <p>getBody.</p>
-     *
-     * @return a {@link java.lang.String} object.
-     */
-    public String getBody()
-    {
-        return writer.toString();
-    }
-
-    /**
-     * <p>getHead.</p>
-     *
-     * @return a {@link java.lang.String} object.
-     *
-     * @since 1.1.1
-     */
-    public String getHead()
-    {
-        return headWriter.toString();
-    }
-
     /** {@inheritDoc} */
     @Override
     public void head_()
@@ -315,17 +258,6 @@
         super.onSectionTitle_( depth );
     }
 
-    /**
-     * <p>Getter for the field <code>renderingContext</code> containing the document rendering context.</p>
-     *
-     * @return the current document rendering context
-     * @since 1.1
-     */
-    public RenderingContext getRenderingContext()
-    {
-        return renderingContext;
-    }
-
     /** {@inheritDoc} */
     @Override
     public void text( String text )
@@ -376,4 +308,42 @@
             super.write( txt );
         }
     }
+
+    // DocumentContent interface
+
+    /** {@inheritDoc} */
+    public String getTitle()
+    {
+        return title;
+    }
+
+    /** {@inheritDoc} */
+    public List<String> getAuthors()
+    {
+        return authors;
+    }
+
+    /** {@inheritDoc} */
+    public String getDate()
+    {
+        return date;
+    }
+
+    /** {@inheritDoc} */
+    public String getBody()
+    {
+        return writer.toString();
+    }
+
+    /** {@inheritDoc} */
+    public String getHead()
+    {
+        return headWriter.toString();
+    }
+
+    /** {@inheritDoc} */
+    public RenderingContext getRenderingContext()
+    {
+        return renderingContext;
+    }
 }
