diff --git a/inc/template.php b/inc/template.php
index f7a49f002500a792db461bcfa40e5a22b82eed2b..b338d2ce97c88f37dfdb9ffaf86a3ae4073c4cde 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -1459,22 +1459,44 @@ function tpl_flush(){
 }
 
 /**
- * Returns link to media file from data/media root directory if it exists,
- * otherwise the one in the template's image directory.
+ * Tries to find a ressource file in the given locations.
  *
- * @param  string $fileName - file name of icon
- * @param  bool $abs        - if to use absolute URL
- * @author Anika Henke <anika@selfthinker.org>
+ * If a given location starts with a colon it is assumed to be a media
+ * file, otherwise it is assumed to be relative to the current template
+ *
+ * @param  array $search       locations to look at
+ * @param  bool $abs           if to use absolute URL
+ * @param  arrayref $imginfo   filled with getimagesize()
+ * @author Andreas  Gohr <andi@splitbrain.org>
  */
-function tpl_getMediaFile($fileName, $abs=false) {
-    if (file_exists(mediaFN($fileName))) {
-        return ml($fileName, '', true, '', $abs);
+function tpl_getMediaFile($search, $abs=false, &$imginfo=null){
+    // loop through candidates until a match was found:
+    foreach($search as $img){
+        if(substr($img,0,1) == ':'){
+            $file    = mediaFN($img);
+            $ismedia = true;
+        }else{
+            $file = DOKU_TPLINC.$img;
+            $ismedia = false;
+        }
+
+        if(file_exists($file)) break;
     }
 
-    if($abs) {
-        return DOKU_URL.substr(DOKU_TPL.'images/'.$fileName, strlen(DOKU_REL));
+    // fetch image data if requested
+    if(!is_null($imginfo)){
+        $imginfo = getimagesize($file);
     }
-    return DOKU_TPL.'images/'.$fileName;
+
+    // build URL
+    if($ismedia){
+        $url = ml($img, '', true, '', $abs);
+    }else{
+        $url = DOKU_TPL.$img;
+        if($abs) $url = DOKU_URL.substr($url, strlen(DOKU_REL));
+    }
+
+    return $url;
 }
 
 /**
@@ -1485,7 +1507,8 @@ function tpl_getMediaFile($fileName, $abs=false) {
  * @author Anika Henke <anika@selfthinker.org>
  */
 function tpl_getFavicon($abs=false, $fileName='favicon.ico') {
-    return tpl_getMediaFile($fileName, $abs);
+    $look = array(":wiki:$fileName", ":$fileName", "images/$fileName");
+    return tpl_getMediaFile($look, $abs);
 }
 
 /**
@@ -1501,14 +1524,17 @@ function tpl_favicon($types=array('favicon')) {
     foreach ($types as $type) {
         switch($type) {
             case 'favicon':
-                $return .= '<link rel="shortcut icon" href="'.tpl_getMediaFile('favicon.ico').'" />'.NL;
+                $look = array(':wiki:favicon.ico', ':favicon.ico', 'images/favicon.ico');
+                $return .= '<link rel="shortcut icon" href="'.tpl_getMediaFile($look).'" />'.NL;
                 break;
             case 'mobile':
-                $return .= '<link rel="apple-touch-icon" href="'.tpl_getMediaFile('apple-touch-icon.png').'" />'.NL;
+                $look = array(':wiki:apple-touch-icon.png', ':apple-touch-icon.png', 'images/apple-touch-icon.ico');
+                $return .= '<link rel="apple-touch-icon" href="'.tpl_getMediaFile($look).'" />'.NL;
                 break;
             case 'generic':
                 // ideal world solution, which doesn't work in any browser yet
-                $return .= '<link rel="icon" href="'.tpl_getMediaFile('icon.svg').'" type="image/svg+xml" />'.NL;
+                $look = array(':wiki:favicon.svg', ':favicon.svg', 'images/favicon.svg');
+                $return .= '<link rel="icon" href="'.tpl_getMediaFile($look).'" type="image/svg+xml" />'.NL;
                 break;
         }
     }