diff --git a/inc/fetch.functions.php b/inc/fetch.functions.php
index 70becc01e13b534058f32b3de269abd7ee1f5064..3c5bdfeee82ad122d5870a775c6aa40a0ca4090f 100644
--- a/inc/fetch.functions.php
+++ b/inc/fetch.functions.php
@@ -72,9 +72,9 @@ function sendFile($file, $mime, $dl, $cache, $public = false, $orig = null) {
 
     //download or display?
     if($dl) {
-        header('Content-Disposition: attachment; filename="'.utf8_basename($orig).'";');
+        header('Content-Disposition: attachment;'.rfc2231_encode('filename', utf8_basename($orig)).';');
     } else {
-        header('Content-Disposition: inline; filename="'.utf8_basename($orig).'";');
+        header('Content-Disposition: inline;'.rfc2231_encode('filename', utf8_basename($orig)).';');
     }
 
     //use x-sendfile header to pass the delivery to compatible webservers
@@ -90,6 +90,31 @@ function sendFile($file, $mime, $dl, $cache, $public = false, $orig = null) {
     }
 }
 
+/**
+ * Try an rfc2231 compatible encoding. This ensures correct
+ * interpretation of filenames outside of the ASCII set.
+ * This seems to be needed for file names with e.g. umlauts that
+ * would otherwise decode wrongly in IE.
+ *
+ * There is no additional checking, just the encoding and setting the key=value for usage in headers
+ *
+ * @author Gerry Weissbach <gerry.w@gammaproduction.de>
+ * @param string $name      name of the field to be set in the header() call
+ * @param string $value     value of the field to be set in the header() call
+ * @param string $charset   used charset for the encoding of value
+ * @param string $lang      language used.
+ * @return string           in the format " name=value" for values WITHOUT special characters
+ * @return string           in the format " name*=charset'lang'value" for values WITH special characters
+ */
+function rfc2231_encode($name, $value, $charset='utf-8', $lang='en') {
+    $internal = preg_replace_callback('/[\x00-\x20*\'%()<>@,;:\\\\"\/[\]?=\x80-\xFF]/', function($match) { return rawurlencode($match[0]); }, $value);
+    if ( $value != $internal ) {
+        return ' '.$name.'*='.$charset."'".$lang."'".$internal;
+    } else {
+        return ' '.$name.'="'.$value.'"';
+    }
+}
+
 /**
  * Check for media for preconditions and return correct status code
  *
diff --git a/inc/init.php b/inc/init.php
index d0d9101e687c47f3f3de812cea86e1047eac3163..12bb6f5882994612aaf2ff81c45b043a473937ec 100644
--- a/inc/init.php
+++ b/inc/init.php
@@ -429,7 +429,7 @@ function getBaseURL($abs=null){
     //if canonical url enabled always return absolute
     if(is_null($abs)) $abs = $conf['canonical'];
 
-    if($conf['basedir']){
+    if(!empty($conf['basedir'])){
         $dir = $conf['basedir'];
     }elseif(substr($_SERVER['SCRIPT_NAME'],-4) == '.php'){
         $dir = dirname($_SERVER['SCRIPT_NAME']);
@@ -456,7 +456,7 @@ function getBaseURL($abs=null){
     if(!$abs) return $dir;
 
     //use config option if available, trim any slash from end of baseurl to avoid multiple consecutive slashes in the path
-    if($conf['baseurl']) return rtrim($conf['baseurl'],'/').$dir;
+    if(!empty($conf['baseurl'])) return rtrim($conf['baseurl'],'/').$dir;
 
     //split hostheader into host and port
     if(isset($_SERVER['HTTP_HOST'])){