diff --git a/inc/template.php b/inc/template.php
index 4f4ba9813f42e3f1c18640ed1208cb7e3931e267..cc9d4f9f446727659e2486bc9403773ae26cec29 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -312,11 +312,11 @@ function tpl_metaheaders($alt=true){
 
   // load stylesheets
   $head['link'][] = array('rel'=>'stylesheet', 'media'=>'all', 'type'=>'text/css',
-                          'href'=>DOKU_BASE.'lib/exe/css.php?s=all');
+                          'href'=>DOKU_BASE.'lib/exe/css.php?s=all&t='.$conf['template']);
   $head['link'][] = array('rel'=>'stylesheet', 'media'=>'screen', 'type'=>'text/css',
-                          'href'=>DOKU_BASE.'lib/exe/css.php');
+                          'href'=>DOKU_BASE.'lib/exe/css.php?t='.$conf['template']);
   $head['link'][] = array('rel'=>'stylesheet', 'media'=>'print', 'type'=>'text/css',
-                          'href'=>DOKU_BASE.'lib/exe/css.php?s=print');
+                          'href'=>DOKU_BASE.'lib/exe/css.php?s=print&t='.$conf['template']);
 
   // load javascript
   $js_edit  = ($ACT=='edit' || $ACT=='preview' || $ACT=='recover' || $ACT=='wordblock' ) ? 1 : 0;
diff --git a/lib/exe/css.php b/lib/exe/css.php
index e550ab206c8876fc66831c079ebb76b09e39d4a8..11ae2e828bb2cda204470d01df09a147efb8605f 100644
--- a/lib/exe/css.php
+++ b/lib/exe/css.php
@@ -41,15 +41,24 @@ function css_out(){
         break;
     }
 
+    $tpl = trim(preg_replace('/[^\w]+/','',$_REQUEST['t']));
+    if($tpl){
+        $tplinc = DOKU_INC.'lib/tpl/'.$tpl.'/';
+        $tpldir = DOKU_BASE.'lib/tpl/'.$tpl.'/';
+    }else{
+        $tplinc = DOKU_TPLINC;
+        $tpldir = DOKU_TPL;
+    }
+
     // The generated script depends on some dynamic options
-    $cache = getCacheName('styles'.DOKU_BASE.$conf['template'].$style,'.css');
+    $cache = getCacheName('styles'.DOKU_BASE.$tplinc.$style,'.css');
 
     // load template styles
     $tplstyles = array();
-    if(@file_exists(DOKU_TPLINC.'style.ini')){
-        $ini = parse_ini_file(DOKU_TPLINC.'style.ini',true);
+    if(@file_exists($tplinc.'style.ini')){
+        $ini = parse_ini_file($tplinc.'style.ini',true);
         foreach($ini['stylesheets'] as $file => $mode){
-            $tplstyles[$mode][DOKU_TPLINC.$file] = DOKU_TPL;
+            $tplstyles[$mode][$tplinc.$file] = $tpldir;
         }
     }
 
@@ -80,7 +89,7 @@ function css_out(){
     // check cache age & handle conditional request
     header('Cache-Control: public, max-age=3600');
     header('Pragma: public');
-    if(css_cacheok($cache,array_keys($files))){
+    if(css_cacheok($cache,array_keys($files),$tplinc)){
         http_conditionalRequest(filemtime($cache));
         if($conf['allowdebug']) header("X-CacheUsed: $cache");
         readfile($cache);
@@ -106,7 +115,7 @@ function css_out(){
     ob_end_clean();
 
     // apply style replacements
-    $css = css_applystyle($css);
+    $css = css_applystyle($css,$tplinc);
 
     // compress whitespace and comments
     if($conf['compress']){
@@ -125,7 +134,7 @@ function css_out(){
  *
  * @author Andreas Gohr <andi@splitbrain.org>
  */
-function css_cacheok($cache,$files){
+function css_cacheok($cache,$files,$tplinc){
     if($_REQUEST['purge']) return false; //support purge request
 
     $ctime = @filemtime($cache);
@@ -134,7 +143,7 @@ function css_cacheok($cache,$files){
     // some additional files to check
     $files[] = DOKU_CONF.'dokuwiki.php';
     $files[] = DOKU_CONF.'local.php';
-    $files[] = DOKU_TPLINC.'style.ini';
+    $files[] = $tplinc.'style.ini';
     $files[] = __FILE__;
 
     // now walk the files
@@ -152,9 +161,9 @@ function css_cacheok($cache,$files){
  *
  * @author Andreas Gohr <andi@splitbrain.org>
  */
-function css_applystyle($css){
-    if(@file_exists(DOKU_TPLINC.'style.ini')){
-        $ini = parse_ini_file(DOKU_TPLINC.'style.ini',true);
+function css_applystyle($css,$tplinc){
+    if(@file_exists($tplinc.'style.ini')){
+        $ini = parse_ini_file($tplinc.'style.ini',true);
         $css = strtr($css,$ini['replacements']);
     }
     return $css;