diff --git a/inc/media.php b/inc/media.php
index 8a18e8b2e11f0761cfa97c336975266674af9948..ac0629b3f6e73006f110ffc8d78413d00b0705ef 100644
--- a/inc/media.php
+++ b/inc/media.php
@@ -245,7 +245,7 @@ function media_upload($ns,$auth){
     }
 
     // get filename
-    $id   = cleanID($ns.':'.$id);
+    $id   = cleanID($ns.':'.$id,false,true);
     $fn   = mediaFN($id);
 
     // get filetype regexp
diff --git a/inc/pageutils.php b/inc/pageutils.php
index 50e76d44e8f227318bff926d62ff48bb6c95f8c0..abfca08de1d3a8585eaadb7a5499f8a7b9c34f20 100644
--- a/inc/pageutils.php
+++ b/inc/pageutils.php
@@ -86,8 +86,9 @@ function getID($param='id',$clean=true){
  * @author Andreas Gohr <andi@splitbrain.org>
  * @param  string  $raw_id    The pageid to clean
  * @param  boolean $ascii     Force ASCII
+ * @param  boolean $media     Allow leading or trailing _ for media files
  */
-function cleanID($raw_id,$ascii=false){
+function cleanID($raw_id,$ascii=false,$media=false){
   global $conf;
   global $lang;
   static $sepcharpat = null;
@@ -126,7 +127,7 @@ function cleanID($raw_id,$ascii=false){
   //clean up
   $id = preg_replace($sepcharpat,$sepchar,$id);
   $id = preg_replace('#:+#',':',$id);
-  $id = trim($id,':._-');
+  $id = ($media ? trim($id,':.-') : trim($id,':._-'));
   $id = preg_replace('#:[:\._\-]+#',':',$id);
 
   $cache[(string)$raw_id] = $id;