diff --git a/conf/dokuwiki.php b/conf/dokuwiki.php
index 9cfdb5c3bcaa3c6f938b5a0c78179e29dd55ba59..6475ff291befb9af54d1dabcabda60c79d3c5271 100644
--- a/conf/dokuwiki.php
+++ b/conf/dokuwiki.php
@@ -119,6 +119,7 @@ $conf['rss_show_summary'] = 1;           //Add revision summary to title? 0|1
 $conf['broken_iua']  = 0;                //Platform with broken ignore_user_abort (IIS+CGI) 0|1
 $conf['xsendfile']   = 0;                //Use X-Sendfile (1 = lighttpd, 2 = standard)
 $conf['xmlrpc'] = 0;                     //Enable/disable XML-RPC interface
+$conf['renderer_xhtml'] = 'xhtml';       //renderer to use for main page generation
 
 //Set target to use when creating links - leave empty for same window
 $conf['target']['wiki']      = '';
diff --git a/inc/parser/renderer.php b/inc/parser/renderer.php
index aa4da9dc12c3fee1a07ab67f69b7c63c2e1164cf..92bbf51fb9ba723c7c841f500fbb94d16b7a481d 100644
--- a/inc/parser/renderer.php
+++ b/inc/parser/renderer.php
@@ -29,6 +29,10 @@ class Doku_Renderer extends DokuWiki_Plugin {
     var $entities = array();
     var $interwiki = array();
 
+    // allows renderer to be used again, clean out any per-use values
+    function reset() {
+    }
+
     function nocache() {
         $this->info['cache'] = false;
     }
diff --git a/inc/parserutils.php b/inc/parserutils.php
index c6518523914596a5c32b92004cfa99767abc33bd..d03ad8d1eac123cf605daea796d9f608c633fc73 100644
--- a/inc/parserutils.php
+++ b/inc/parserutils.php
@@ -530,26 +530,10 @@ function p_sort_modes($a, $b){
 function p_render($mode,$instructions,&$info){
   if(is_null($instructions)) return '';
 
-  // try default renderer first:
-  $file = DOKU_INC."inc/parser/$mode.php";
-  if(@file_exists($file)){
-    require_once $file;
-    $rclass = "Doku_Renderer_$mode";
+  $Renderer =& p_get_renderer($mode);
+  if (is_null($Renderer)) return null;
 
-    if ( !class_exists($rclass) ) {
-      trigger_error("Unable to resolve render class $rclass",E_USER_WARNING);
-      msg("Renderer for $mode not valid",-1);
-      return null;
-    }
-    $Renderer = & new $rclass();
-  }else{
-    // Maybe a plugin is available?
-    $Renderer =& plugin_load('renderer',$mode);
-    if(is_null($Renderer)){
-      msg("No renderer for $mode found",-1);
-      return null;
-    }
-  }
+  $Renderer->reset();
 
   $Renderer->smileys = getSmileys();
   $Renderer->entities = getEntities();
@@ -572,6 +556,35 @@ function p_render($mode,$instructions,&$info){
   return $Renderer->doc;
 }
 
+function & p_get_renderer($mode) {
+  global $conf;
+
+  $rname = !empty($conf['renderer_'.$mode]) ? $conf['renderer_'.$mode] : $mode;
+
+  // try default renderer first:
+  $file = DOKU_INC."inc/parser/$rname.php";
+  if(@file_exists($file)){
+    require_once $file;
+    $rclass = "Doku_Renderer_$rname";
+
+    if ( !class_exists($rclass) ) {
+      trigger_error("Unable to resolve render class $rclass",E_USER_WARNING);
+      msg("Renderer '$rname' for $mode not valid",-1);
+      return null;
+    }
+    $Renderer = & new $rclass();
+  }else{
+    // Maybe a plugin is available?
+    $Renderer =& plugin_load('renderer',$rname);
+    if(is_null($Renderer)){
+      msg("No renderer '$rname' found for mode '$mode'",-1);
+      return null;
+    }
+  }
+
+  return $Renderer;
+}
+
 /**
  * Gets the first heading from a file
  *