diff --git a/.htaccess.dist b/.htaccess.dist
index aa2437b957ec2d17d6502214ba2ba5e708ecb476..c90abdc800d1e5954e4700528892880a77ca7cb3 100644
--- a/.htaccess.dist
+++ b/.htaccess.dist
@@ -15,7 +15,16 @@
 ## $conf['userewrite'] = 1 - not needed for rewrite mode 2
 #RewriteEngine on
 #
-## Not all installations will require the following line.  If you do, 
+#RewriteRule ^_media/(.*)              lib/exe/fetch.php?media=$1  [QSA,L]
+#RewriteRule ^_detail/(.*)             lib/exe/detail.php?media=$1  [QSA,L]
+#RewriteRule ^_export/([^/]+)/(.*)     doku.php?do=export_$1&id=$2  [QSA,L]
+#RewriteRule ^$                        doku.php  [L]
+#RewriteCond %{REQUEST_FILENAME}       !-f
+#RewriteCond %{REQUEST_FILENAME}       !-d
+#RewriteRule (.*)                      doku.php?id=$1  [QSA,L]
+#RewriteRule ^index.php$               doku.php
+#
+## Not all installations will require the following line.  If you do,
 ## change "/dokuwiki" to the path to your dokuwiki directory relative
 ## to your document root.
 #RewriteBase /dokuwiki
@@ -25,12 +34,3 @@
 ## rules if your server setup allows HTTPS.
 #RewriteCond %{HTTPS} !=on
 #RewriteRule ^lib/exe/xmlrpc.php$      https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
-#
-#RewriteRule ^_media/(.*)              lib/exe/fetch.php?media=$1  [QSA,L]
-#RewriteRule ^_detail/(.*)             lib/exe/detail.php?media=$1  [QSA,L]
-#RewriteRule ^_export/([^/]+)/(.*)     doku.php?do=export_$1&id=$2  [QSA,L]
-#RewriteRule ^$                        doku.php  [L]
-#RewriteCond %{REQUEST_FILENAME}       !-f
-#RewriteCond %{REQUEST_FILENAME}       !-d
-#RewriteRule (.*)                      doku.php?id=$1  [QSA,L]
-#RewriteRule ^index.php$               doku.php
diff --git a/_test/tests/inc/httpclient_http.test.php b/_test/tests/inc/httpclient_http.test.php
index 9959a1f069d366aecd38e19187e5eb5ed236ebd4..252eb6b65d141b9a05280b12ad2611ba95a0b1fe 100644
--- a/_test/tests/inc/httpclient_http.test.php
+++ b/_test/tests/inc/httpclient_http.test.php
@@ -131,6 +131,19 @@ class httpclient_http_test extends DokuWikiTest {
         $this->assertLessThanOrEqual(251,strlen($data));
     }
 
+    /**
+     * @group internet
+     */
+    function test_maxbodyok(){
+        $http = new HTTPClient();
+        $http->max_bodysize = 500*1024;
+        $data = $http->get($this->server.'/stream/5');
+        $this->assertTrue($data !== false, 'HTTP response');
+        $http->max_bodysize_abort = false;
+        $data = $http->get($this->server.'/stream/5');
+        $this->assertTrue($data !== false, 'HTTP response');
+    }
+
     /**
      * @group internet
      */
diff --git a/_test/tests/inc/media_get_from_url.test.php b/_test/tests/inc/media_get_from_url.test.php
new file mode 100644
index 0000000000000000000000000000000000000000..3903b8a05e0a08e1e9a143843a8fad480b2b0468
--- /dev/null
+++ b/_test/tests/inc/media_get_from_url.test.php
@@ -0,0 +1,80 @@
+<?php
+
+class media_get_from_url_test extends DokuWikiTest {
+
+    /**
+     * @group internet
+     */
+    public function test_cache(){
+        global $conf;
+        $conf['fetchsize'] = 500*1024; //500kb
+
+
+        $local = media_get_from_URL('http://www.google.com/images/srpr/logo3w.png','png',-1);
+        $this->assertTrue($local !== false);
+        $this->assertFileExists($local);
+
+        // remember time stamp
+        $time = filemtime($local);
+        clearstatcache(false, $local);
+        sleep(1);
+
+        // fetch again and make sure we got a cache file
+        $local = media_get_from_URL('http://www.google.com/images/srpr/logo3w.png','png',-1);
+        clearstatcache(false, $local);
+        $this->assertTrue($local !== false);
+        $this->assertFileExists($local);
+        $this->assertEquals($time, filemtime($local));
+
+        unlink($local);
+    }
+
+    /**
+     * @group internet
+     */
+    public function test_nocache(){
+        global $conf;
+        $conf['fetchsize'] = 500*1024; //500kb
+
+        $local = media_get_from_URL('http://www.google.com/images/srpr/logo3w.png','png',0);
+        $this->assertFalse($local);
+    }
+
+    /**
+     * @group internet
+     * @group slow
+     */
+    public function test_recache(){
+        global $conf;
+        $conf['fetchsize'] = 500*1024; //500kb
+
+
+        $local = media_get_from_URL('http://www.google.com/images/srpr/logo3w.png','png',5);
+        $this->assertTrue($local !== false);
+        $this->assertFileExists($local);
+
+        // remember time stamp
+        $time = filemtime($local);
+        clearstatcache(false, $local);
+        sleep(1);
+
+        // fetch again and make sure we got a cache file
+        $local = media_get_from_URL('http://www.google.com/images/srpr/logo3w.png','png',5);
+        clearstatcache(false, $local);
+        $this->assertTrue($local !== false);
+        $this->assertFileExists($local);
+        $this->assertEquals($time, filemtime($local));
+
+        clearstatcache(false, $local);
+        sleep(6);
+
+        // fetch again and make sure we got a new file
+        $local = media_get_from_URL('http://www.google.com/images/srpr/logo3w.png','png',5);
+        clearstatcache(false, $local);
+        $this->assertTrue($local !== false);
+        $this->assertFileExists($local);
+        $this->assertNotEquals($time, filemtime($local));
+
+        unlink($local);
+    }
+}
\ No newline at end of file
diff --git a/data/_dummy b/data/_dummy
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e492265be45ad356e1f64944d147dce9e2f78b81 100644
--- a/data/_dummy
+++ b/data/_dummy
@@ -0,0 +1 @@
+You can safely delete this file.
\ No newline at end of file
diff --git a/data/attic/_dummy b/data/attic/_dummy
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e492265be45ad356e1f64944d147dce9e2f78b81 100644
--- a/data/attic/_dummy
+++ b/data/attic/_dummy
@@ -0,0 +1 @@
+You can safely delete this file.
\ No newline at end of file
diff --git a/data/cache/_dummy b/data/cache/_dummy
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e492265be45ad356e1f64944d147dce9e2f78b81 100644
--- a/data/cache/_dummy
+++ b/data/cache/_dummy
@@ -0,0 +1 @@
+You can safely delete this file.
\ No newline at end of file
diff --git a/data/index/_dummy b/data/index/_dummy
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e492265be45ad356e1f64944d147dce9e2f78b81 100644
--- a/data/index/_dummy
+++ b/data/index/_dummy
@@ -0,0 +1 @@
+You can safely delete this file.
\ No newline at end of file
diff --git a/data/locks/_dummy b/data/locks/_dummy
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e492265be45ad356e1f64944d147dce9e2f78b81 100644
--- a/data/locks/_dummy
+++ b/data/locks/_dummy
@@ -0,0 +1 @@
+You can safely delete this file.
\ No newline at end of file
diff --git a/data/media_attic/_dummy b/data/media_attic/_dummy
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e492265be45ad356e1f64944d147dce9e2f78b81 100644
--- a/data/media_attic/_dummy
+++ b/data/media_attic/_dummy
@@ -0,0 +1 @@
+You can safely delete this file.
\ No newline at end of file
diff --git a/data/media_meta/_dummy b/data/media_meta/_dummy
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e492265be45ad356e1f64944d147dce9e2f78b81 100644
--- a/data/media_meta/_dummy
+++ b/data/media_meta/_dummy
@@ -0,0 +1 @@
+You can safely delete this file.
\ No newline at end of file
diff --git a/data/meta/_dummy b/data/meta/_dummy
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e492265be45ad356e1f64944d147dce9e2f78b81 100644
--- a/data/meta/_dummy
+++ b/data/meta/_dummy
@@ -0,0 +1 @@
+You can safely delete this file.
\ No newline at end of file
diff --git a/data/tmp/_dummy b/data/tmp/_dummy
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e492265be45ad356e1f64944d147dce9e2f78b81 100644
--- a/data/tmp/_dummy
+++ b/data/tmp/_dummy
@@ -0,0 +1 @@
+You can safely delete this file.
\ No newline at end of file
diff --git a/inc/HTTPClient.php b/inc/HTTPClient.php
index 51c1de875f2e253e82a000da4b9d4573a4ccc829..772b580b2f91296ad4f084a0082e70e0ee2ad227 100644
--- a/inc/HTTPClient.php
+++ b/inc/HTTPClient.php
@@ -150,6 +150,7 @@ class HTTPClient {
      *
      * @param  string $url       The URL to fetch
      * @param  bool   $sloppy304 Return body on 304 not modified
+     * @return bool|string  response body, false on error
      * @author Andreas Gohr <andi@splitbrain.org>
      */
     function get($url,$sloppy304=false){
@@ -170,6 +171,7 @@ class HTTPClient {
      * @param  string $url       The URL to fetch
      * @param  array  $data      Associative array of parameters
      * @param  bool   $sloppy304 Return body on 304 not modified
+     * @return bool|string  response body, false on error
      * @author Andreas Gohr <andi@splitbrain.org>
      */
     function dget($url,$data,$sloppy304=false){
@@ -187,6 +189,9 @@ class HTTPClient {
      *
      * Returns the resulting page or false on an error;
      *
+     * @param  string $url       The URL to fetch
+     * @param  array  $data      Associative array of parameters
+     * @return bool|string  response body, false on error
      * @author Andreas Gohr <andi@splitbrain.org>
      */
     function post($url,$data){
@@ -215,6 +220,9 @@ class HTTPClient {
         $this->start  = $this->_time();
         $this->error  = '';
         $this->status = 0;
+        $this->status = 0;
+        $this->resp_body = '';
+        $this->resp_headers = array();
 
         // don't accept gzip if truncated bodies might occur
         if($this->max_bodysize &&
@@ -440,9 +448,31 @@ class HTTPClient {
                         $byte = $this->_readData($socket, 2, 'chunk'); // read trailing \r\n
                     }
                 } while ($chunk_size && !$abort);
-            }elseif($this->max_bodysize){
-                // read just over the max_bodysize
-                $r_body = $this->_readData($socket, $this->max_bodysize+1, 'response', true);
+            }elseif(isset($this->resp_headers['content-length']) && !isset($this->resp_headers['transfer-encoding'])){
+                /* RFC 2616
+                 * If a message is received with both a Transfer-Encoding header field and a Content-Length
+                 * header field, the latter MUST be ignored.
+                 */
+
+                // read up to the content-length or max_bodysize
+                // for keep alive we need to read the whole message to clean up the socket for the next read
+                if(!$this->keep_alive && $this->max_bodysize && $this->max_bodysize < $this->resp_headers['content-length']){
+                    $length = $this->max_bodysize;
+                }else{
+                    $length = $this->resp_headers['content-length'];
+                }
+
+                $r_body = $this->_readData($socket, $length, 'response (content-length limited)', true);
+            }else{
+                // read entire socket
+                $r_size = 0;
+                while (!feof($socket)) {
+                    $r_body .= $this->_readData($socket, 4096, 'response (unlimited)', true);
+                }
+            }
+
+            // recheck body size, we might had to read the whole body, so we abort late or trim here
+            if($this->max_bodysize){
                 if(strlen($r_body) > $this->max_bodysize){
                     if ($this->max_bodysize_abort) {
                         throw new HTTPClientException('Allowed response size exceeded');
@@ -450,16 +480,6 @@ class HTTPClient {
                         $this->error = 'Allowed response size exceeded';
                     }
                 }
-            }elseif(isset($this->resp_headers['content-length']) &&
-                    !isset($this->resp_headers['transfer-encoding'])){
-                // read up to the content-length
-                $r_body = $this->_readData($socket, $this->resp_headers['content-length'], 'response', true);
-            }else{
-                // read entire socket
-                $r_size = 0;
-                while (!feof($socket)) {
-                    $r_body .= $this->_readData($socket, 4096, 'response', true);
-                }
             }
 
         } catch (HTTPClientException $err) {
@@ -502,8 +522,8 @@ class HTTPClient {
      *
      * Protocol, Servername and Port will be stripped from the request URL when a successful CONNECT happened
      *
-     * @param ressource &$socket
-     * @param string &$requesturl
+     * @param resource &$socket
+     * @param string   &$requesturl
      * @return bool true if a tunnel was established
      */
     function _ssltunnel(&$socket, &$requesturl){
@@ -543,9 +563,10 @@ class HTTPClient {
     /**
      * Safely write data to a socket
      *
-     * @param  handle $socket     An open socket handle
-     * @param  string $data       The data to write
-     * @param  string $message    Description of what is being read
+     * @param  resource $socket     An open socket handle
+     * @param  string   $data       The data to write
+     * @param  string   $message    Description of what is being read
+     * @throws HTTPClientException
      * @author Tom N Harris <tnharris@whoopdedo.org>
      */
     function _sendData($socket, $data, $message) {
@@ -585,10 +606,12 @@ class HTTPClient {
      * Reads up to a given number of bytes or throws an exception if the
      * response times out or ends prematurely.
      *
-     * @param  handle $socket     An open socket handle in non-blocking mode
-     * @param  int    $nbytes     Number of bytes to read
-     * @param  string $message    Description of what is being read
-     * @param  bool   $ignore_eof End-of-file is not an error if this is set
+     * @param  resource $socket     An open socket handle in non-blocking mode
+     * @param  int      $nbytes     Number of bytes to read
+     * @param  string   $message    Description of what is being read
+     * @param  bool     $ignore_eof End-of-file is not an error if this is set
+     * @throws HTTPClientException
+     * @return string
      * @author Tom N Harris <tnharris@whoopdedo.org>
      */
     function _readData($socket, $nbytes, $message, $ignore_eof = false) {
@@ -605,8 +628,8 @@ class HTTPClient {
             $time_used = $this->_time() - $this->start;
             if ($time_used > $this->timeout)
                 throw new HTTPClientException(
-                        sprintf('Timeout while reading %s (%.3fs)', $message, $time_used),
-                        -100);
+                        sprintf('Timeout while reading %s after %d bytes (%.3fs)', $message,
+                                strlen($r_data), $time_used), -100);
             if(feof($socket)) {
                 if(!$ignore_eof)
                     throw new HTTPClientException("Premature End of File (socket) while reading $message");
@@ -635,8 +658,10 @@ class HTTPClient {
      *
      * Always returns a complete line, including the terminating \n.
      *
-     * @param  handle $socket     An open socket handle in non-blocking mode
-     * @param  string $message    Description of what is being read
+     * @param  resource $socket     An open socket handle in non-blocking mode
+     * @param  string   $message    Description of what is being read
+     * @throws HTTPClientException
+     * @return string
      * @author Tom N Harris <tnharris@whoopdedo.org>
      */
     function _readLine($socket, $message) {
@@ -669,10 +694,26 @@ class HTTPClient {
     /**
      * print debug info
      *
+     * Uses _debug_text or _debug_html depending on the SAPI name
+     *
      * @author Andreas Gohr <andi@splitbrain.org>
      */
     function _debug($info,$var=null){
         if(!$this->debug) return;
+        if(php_sapi_name() == 'cli'){
+            $this->_debug_text($info, $var);
+        }else{
+            $this->_debug_html($info, $var);
+        }
+    }
+
+    /**
+     * print debug info as HTML
+     *
+     * @param      $info
+     * @param null $var
+     */
+    function _debug_html($info, $var=null){
         print '<b>'.$info.'</b> '.($this->_time() - $this->start).'s<br />';
         if(!is_null($var)){
             ob_start();
@@ -683,6 +724,18 @@ class HTTPClient {
         }
     }
 
+    /**
+     * prints debug info as plain text
+     *
+     * @param      $info
+     * @param null $var
+     */
+    function _debug_text($info, $var=null){
+        print '*'.$info.'* '.($this->_time() - $this->start)."s\n";
+        if(!is_null($var)) print_r($var);
+        print "\n-----------------------------------------------\n";
+    }
+
     /**
      * Return current timestamp in microsecond resolution
      */
@@ -797,6 +850,8 @@ class HTTPClient {
     /**
      * Generates a unique identifier for a connection.
      *
+     * @param  string $server
+     * @param  string $port
      * @return string unique identifier
      */
     function _uniqueConnectionId($server, $port) {
diff --git a/inc/Mailer.class.php b/inc/Mailer.class.php
index f1492be9bc6b09522ae0f49ec694166b40965a8b..f87d7dd84b38842c75e20d92486842717ad63a50 100644
--- a/inc/Mailer.class.php
+++ b/inc/Mailer.class.php
@@ -51,7 +51,7 @@ class Mailer {
         $this->allowhtml = (bool)$conf['htmlmail'];
 
         // add some default headers for mailfiltering FS#2247
-        $this->setHeader('X-Mailer', 'DokuWiki '.getVersion());
+        $this->setHeader('X-Mailer', 'DokuWiki');
         $this->setHeader('X-DokuWiki-User', $_SERVER['REMOTE_USER']);
         $this->setHeader('X-DokuWiki-Title', $conf['title']);
         $this->setHeader('X-DokuWiki-Server', $server);
diff --git a/inc/actions.php b/inc/actions.php
index e0ad908b74c39472ca274f3ec8f23f317fcae760..da3414eb203dd9c939029bd5592bb831ae1385d4 100644
--- a/inc/actions.php
+++ b/inc/actions.php
@@ -172,7 +172,7 @@ function act_dispatch(){
     $evt->advise_after();
     // Make sure plugs can handle 'denied'
     if($conf['send404'] && $ACT == 'denied') {
-        header('HTTP/1.0 403 Forbidden');
+        http_status(403);
     }
     unset($evt);
 
@@ -658,7 +658,7 @@ function act_sitemap($act) {
     global $conf;
 
     if ($conf['sitemap'] < 1 || !is_numeric($conf['sitemap'])) {
-        header("HTTP/1.0 404 Not Found");
+        http_status(404);
         print "Sitemap generation is disabled.";
         exit;
     }
@@ -690,7 +690,7 @@ function act_sitemap($act) {
         exit;
     }
 
-    header("HTTP/1.0 500 Internal Server Error");
+    http_status(500);
     print "Could not read the sitemap file - bad permissions?";
     exit;
 }
diff --git a/inc/auth.php b/inc/auth.php
index 7f427bd8d14f5390b245344608a79c59f96f0b82..9566a26157e71ddd07948555bdb1c76587e72fe5 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -267,7 +267,7 @@ function auth_login($user, $pass, $sticky = false, $silent = false) {
 function auth_validateToken($token) {
     if(!$token || $token != $_SESSION[DOKU_COOKIE]['auth']['token']) {
         // bad token
-        header("HTTP/1.0 401 Unauthorized");
+        http_status(401);
         print 'Invalid auth token - maybe the session timed out';
         unset($_SESSION[DOKU_COOKIE]['auth']['token']); // no second chance
         exit;
diff --git a/inc/html.php b/inc/html.php
index a48f18bff89a17dff863ceb9f2d9efd649798a9e..c2723bcebda5db93d873f7e42fea83cb97eb1600 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -1473,7 +1473,7 @@ function html_edit(){
     } ?>
     <div class="editBox">
 
-    <div class="toolbar">
+    <div class="toolbar group">
         <div id="draft__status"><?php if(!empty($INFO['draft'])) echo $lang['draftdate'].' '.dformat();?></div>
         <div id="tool__bar"><?php if ($wr && $data['media_manager']){?><a href="<?php echo DOKU_BASE?>lib/exe/mediamanager.php?ns=<?php echo $INFO['namespace']?>"
             target="_blank"><?php echo $lang['mediaselect'] ?></a><?php }?></div>
@@ -1636,11 +1636,16 @@ function html_admin(){
     }
 
     // data security check
-    // @todo: could be checked and only displayed if $conf['savedir'] is under the web root
-    echo '<a style="border:none; float:right;"
-            href="http://www.dokuwiki.org/security#web_access_security">
-            <img src="data/security.png" alt="Your data directory seems to be protected properly."
-             onerror="this.parentNode.style.display=\'none\'" /></a>';
+    // simple check if the 'savedir' is relative and accessible when appended to DOKU_URL
+    // it verifies either:
+    //   'savedir' has been moved elsewhere, or
+    //   has protection to prevent the webserver serving files from it
+    if (substr($conf['savedir'],0,2) == './'){
+        echo '<a style="border:none; float:right;"
+                href="http://www.dokuwiki.org/security#web_access_security">
+                <img src="'.DOKU_URL.$conf['savedir'].'/security.png" alt="Your data directory seems to be protected properly."
+                onerror="this.parentNode.style.display=\'none\'" /></a>';
+    }
 
     print p_locale_xhtml('admin');
 
diff --git a/inc/httputils.php b/inc/httputils.php
index 4ba287eb50d513764cdfd6f20e87e6da061e21df..d3f3cdde279e731d7e570679167f8f0baa6e225e 100644
--- a/inc/httputils.php
+++ b/inc/httputils.php
@@ -250,6 +250,11 @@ function http_cached_finish($file, $content) {
     }
 }
 
+/**
+ * Fetches raw, unparsed POST data
+ *
+ * @return string
+ */
 function http_get_raw_post_data() {
     static $postData = null;
     if ($postData === null) {
@@ -257,3 +262,69 @@ function http_get_raw_post_data() {
     }
     return $postData;
 }
+
+/**
+ * Set the HTTP response status and takes care of the used PHP SAPI
+ *
+ * Inspired by CodeIgniter's set_status_header function
+ *
+ * @param int    $code
+ * @param string $text
+ */
+function http_status($code = 200, $text = '') {
+    static $stati = array(
+        200 => 'OK',
+        201 => 'Created',
+        202 => 'Accepted',
+        203 => 'Non-Authoritative Information',
+        204 => 'No Content',
+        205 => 'Reset Content',
+        206 => 'Partial Content',
+
+        300 => 'Multiple Choices',
+        301 => 'Moved Permanently',
+        302 => 'Found',
+        304 => 'Not Modified',
+        305 => 'Use Proxy',
+        307 => 'Temporary Redirect',
+
+        400 => 'Bad Request',
+        401 => 'Unauthorized',
+        403 => 'Forbidden',
+        404 => 'Not Found',
+        405 => 'Method Not Allowed',
+        406 => 'Not Acceptable',
+        407 => 'Proxy Authentication Required',
+        408 => 'Request Timeout',
+        409 => 'Conflict',
+        410 => 'Gone',
+        411 => 'Length Required',
+        412 => 'Precondition Failed',
+        413 => 'Request Entity Too Large',
+        414 => 'Request-URI Too Long',
+        415 => 'Unsupported Media Type',
+        416 => 'Requested Range Not Satisfiable',
+        417 => 'Expectation Failed',
+
+        500 => 'Internal Server Error',
+        501 => 'Not Implemented',
+        502 => 'Bad Gateway',
+        503 => 'Service Unavailable',
+        504 => 'Gateway Timeout',
+        505 => 'HTTP Version Not Supported'
+    );
+
+    if($text == '' && isset($stati[$code])) {
+        $text = $stati[$code];
+    }
+
+    $server_protocol = (isset($_SERVER['SERVER_PROTOCOL'])) ? $_SERVER['SERVER_PROTOCOL'] : false;
+
+    if(substr(php_sapi_name(), 0, 3) == 'cgi') {
+        header("Status: {$code} {$text}", true);
+    } elseif($server_protocol == 'HTTP/1.1' OR $server_protocol == 'HTTP/1.0') {
+        header($server_protocol." {$code} {$text}", true, $code);
+    } else {
+        header("HTTP/1.1 {$code} {$text}", true, $code);
+    }
+}
diff --git a/inc/io.php b/inc/io.php
index b4da7d635ce4f0a1592d06827d0be6f6045cc665..5ecc79703a2d352dfc7c9d551eedfdcc756bd5c6 100644
--- a/inc/io.php
+++ b/inc/io.php
@@ -474,6 +474,7 @@ function io_download($url,$file,$useAttachment=false,$defaultName='',$maxSize=20
     $http = new DokuHTTPClient();
     $http->max_bodysize = $maxSize;
     $http->timeout = 25; //max. 25 sec
+    $http->keep_alive = false; // we do single ops here, no need for keep-alive
 
     $data = $http->get($url);
     if(!$data) return false;
diff --git a/inc/lang/af/lang.php b/inc/lang/af/lang.php
index 6de891a63da6f6079c610aff5613ede2bed877eb..ab8e5177b2781592f9057eeb0165d0ae3a0aa0ae 100644
--- a/inc/lang/af/lang.php
+++ b/inc/lang/af/lang.php
@@ -55,7 +55,7 @@ $lang['current']               = 'huidige';
 $lang['line']                  = 'Streak';
 $lang['youarehere']            = 'Jy is hier';
 $lang['by']                    = 'by';
-$lang['restored']              = 'Het terug gegaan na vroeëre weergawe';
+$lang['restored']              = 'Het terug gegaan na vroeëre weergawe (%s)';
 $lang['summary']               = 'Voorskou';
 $lang['qb_bold']               = 'Vetdruk';
 $lang['qb_italic']             = 'Skuinsdruk';
diff --git a/inc/lang/ar/lang.php b/inc/lang/ar/lang.php
index 4928b3dbdf925e8b85bc4358179a68b93ff1b452..5b72e0a51aed6204b033252064b5dd0b317fa6c9 100644
--- a/inc/lang/ar/lang.php
+++ b/inc/lang/ar/lang.php
@@ -181,7 +181,7 @@ $lang['lastmod']               = 'آخر تعديل';
 $lang['by']                    = 'بواسطة';
 $lang['deleted']               = 'حذفت';
 $lang['created']               = 'اُنشئت';
-$lang['restored']              = 'استعيدت نسخة قديمة';
+$lang['restored']              = 'استعيدت نسخة قديمة (%s)';
 $lang['external_edit']         = 'تحرير خارجي';
 $lang['summary']               = 'ملخص التحرير';
 $lang['noflash']               = 'تحتاج إلى<a href="http://www.adobe.com/products/flashplayer/">ملحق فلاش أدوبي</a> لعرض هذا المحتوى.';
@@ -258,8 +258,6 @@ $lang['subscr_m_unsubscribe']  = 'ألغ الاشتراك';
 $lang['subscr_m_subscribe']    = 'اشترك';
 $lang['subscr_m_receive']      = 'استقبال';
 $lang['subscr_style_every']    = 'بريدا على كل تغيير';
-$lang['subscr_style_digest']   = 'بريد ملخص عن تغييرات كل صفحة';
-$lang['subscr_style_list']     = 'قائمة بالصفحات المتغيرة منذ آخر بريد';
 $lang['authmodfailed']         = 'إعدادات تصريح فاسدة، يرجى مراسلة المدير.';
 $lang['authtempfail']          = 'تصريح المشترك غير متوفر مؤقتاً، إن استمرت هذه الحالة يرجى مراسلة المدير';
 $lang['authpwdexpire']         = 'ستنتهي صلاحية كلمة السر في %d . عليك بتغييرها سريعا.';
diff --git a/inc/lang/az/lang.php b/inc/lang/az/lang.php
index 6df15a83ec4820651bbcc7df3ea0da24ef85a0b9..5084d9f604a8b9959fde905247697ab0e1587415 100644
--- a/inc/lang/az/lang.php
+++ b/inc/lang/az/lang.php
@@ -136,7 +136,7 @@ $lang['lastmod']               = 'Son dəyişiklər';
 $lang['by']                    = ' Kimdən';
 $lang['deleted']               = 'silinib';
 $lang['created']               = 'yaranıb';
-$lang['restored']              = 'köhnə versiya qaytarıldı';
+$lang['restored']              = 'köhnə versiya qaytarıldı (%s)';
 $lang['external_edit']         = 'bayırdan dəyişik';
 $lang['summary']               = 'Dəyişiklər xülasəsi';
 $lang['noflash']               = 'Bu məzmuna baxmaq üçün <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> tələb olunur.';
diff --git a/inc/lang/bg/lang.php b/inc/lang/bg/lang.php
index 47d83c62f6af452846a6c2b94fabeacbf57c9da4..3c0a17a720e1773b013d725cd6e00fbac193561d 100644
--- a/inc/lang/bg/lang.php
+++ b/inc/lang/bg/lang.php
@@ -190,7 +190,7 @@ $lang['lastmod']               = 'Последна промяна';
 $lang['by']                    = 'от';
 $lang['deleted']               = 'изтрита';
 $lang['created']               = 'създадена';
-$lang['restored']              = 'възстановена предишна версия';
+$lang['restored']              = 'възстановена предишна версия (%s)';
 $lang['external_edit']         = 'външна редакция';
 $lang['summary']               = 'Обобщение';
 $lang['noflash']               = 'Необходим е <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> за изобразяване на съдържанието.';
diff --git a/inc/lang/ca-valencia/lang.php b/inc/lang/ca-valencia/lang.php
index 532f6c73d925f1c5f804469698cbfed0731c6f2b..6e7438f532bb2b3c5a8b3adaf2f03a15579ce6c8 100644
--- a/inc/lang/ca-valencia/lang.php
+++ b/inc/lang/ca-valencia/lang.php
@@ -137,7 +137,7 @@ $lang['lastmod']               = 'Última modificació el';
 $lang['by']                    = 'per';
 $lang['deleted']               = 'borrat';
 $lang['created']               = 'creat';
-$lang['restored']              = 'restaurada l\'última versió';
+$lang['restored']              = 'restaurada l\'última versió (%s)';
 $lang['external_edit']         = 'edició externa';
 $lang['summary']               = 'Editar sumari';
 $lang['noflash']               = 'Necessita el <a href="http://www.adobe.com/products/flashplayer/">plúgin d\'Adobe Flash</a> per a vore este contingut.';
diff --git a/inc/lang/ca/lang.php b/inc/lang/ca/lang.php
index cb2b64686bb0c7912cd9887f62be02927a0ae156..a429dc06af403144b8df36e8ef7acb2b2354d5e0 100644
--- a/inc/lang/ca/lang.php
+++ b/inc/lang/ca/lang.php
@@ -180,7 +180,7 @@ $lang['lastmod']               = 'Darrera modificació';
 $lang['by']                    = 'per';
 $lang['deleted']               = 'suprimit';
 $lang['created']               = 'creat';
-$lang['restored']              = 's\'ha restaurat una versió anterior';
+$lang['restored']              = 's\'ha restaurat una versió anterior %s';
 $lang['external_edit']         = 'edició externa';
 $lang['summary']               = 'Resum d\'edició';
 $lang['noflash']               = 'Per a visualitzar aquest contingut necessiteu el <a href="http://www.adobe.com/products/flashplayer/">connector d\'Adobe Flash</a>.';
diff --git a/inc/lang/cs/lang.php b/inc/lang/cs/lang.php
index af94424ac69d923d7db0773b59d6dacf73e60471..f0b8f3ba41fd8bab1ce572c4c4c56bc1dd4c8061 100644
--- a/inc/lang/cs/lang.php
+++ b/inc/lang/cs/lang.php
@@ -188,7 +188,7 @@ $lang['lastmod']               = 'Poslední úprava';
 $lang['by']                    = 'autor:';
 $lang['deleted']               = 'odstraněno';
 $lang['created']               = 'vytvořeno';
-$lang['restored']              = 'stará verze byla obnovena';
+$lang['restored']              = 'stará verze byla obnovena (%s)';
 $lang['external_edit']         = 'upraveno mimo DokuWiki';
 $lang['summary']               = 'Komentář k úpravám';
 $lang['noflash']               = 'Pro přehrání obsahu potřebujete <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
diff --git a/inc/lang/da/lang.php b/inc/lang/da/lang.php
index f132c133b7a2206e305e65554fab83ed4e61fc20..022de81272c22a4d06dff78a9b29b9146d55d2b6 100644
--- a/inc/lang/da/lang.php
+++ b/inc/lang/da/lang.php
@@ -188,7 +188,7 @@ $lang['lastmod']               = 'Sidst ændret';
 $lang['by']                    = 'af';
 $lang['deleted']               = 'slettet';
 $lang['created']               = 'oprettet';
-$lang['restored']              = 'gammel udgave reetableret';
+$lang['restored']              = 'gammel udgave reetableret (%s)';
 $lang['external_edit']         = 'ekstern redigering';
 $lang['summary']               = 'Redigerings resumé';
 $lang['noflash']               = 'Den <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> er nødvendig til at vise denne indehold.';
diff --git a/inc/lang/el/lang.php b/inc/lang/el/lang.php
index 55b70074fcf5ba51f0763b1213be82b72c839cdd..0fe343026e40c76e3decb7b5d6831bc13111794b 100644
--- a/inc/lang/el/lang.php
+++ b/inc/lang/el/lang.php
@@ -148,7 +148,6 @@ $lang['uploadsucc']            = 'Επιτυχής φόρτωση';
 $lang['uploadfail']            = 'Η μεταφόρτωση απέτυχε. Πιθανόν αυτό να οφείλεται στις ρυθμίσεις πρόσβασης του αρχείου.';
 $lang['uploadwrong']           = 'Η μεταφόρτωση δεν έγινε δεκτή. Δεν επιτρέπονται αρχεία αυτού του τύπου!';
 $lang['uploadexist']           = 'Το αρχείο ήδη υπάρχει. Δεν έγινε καμία αλλαγή.';
-$lang['uploadbadcontent']      = 'Το περιεχόμενο του αρχείου δεν ταιριάζει με την επέκτασή του.';
 $lang['uploadspam']            = 'Η μεταφόρτωση ακυρώθηκε από το φίλτρο spam.';
 $lang['uploadxss']             = 'Η μεταφόρτωση ακυρώθηκε λόγω πιθανού επικίνδυνου περιεχομένου.';
 $lang['uploadsize']            = 'Το αρχείο ήταν πολύ μεγάλο. (μέγιστο %s)';
@@ -184,7 +183,7 @@ $lang['lastmod']               = 'Τελευταία τροποποίηση';
 $lang['by']                    = 'από';
 $lang['deleted']               = 'διαγράφηκε';
 $lang['created']               = 'δημιουργήθηκε';
-$lang['restored']              = 'παλαιότερη έκδοση επαναφέρθηκε';
+$lang['restored']              = 'παλαιότερη έκδοση επαναφέρθηκε (%s)';
 $lang['external_edit']         = 'εξωτερική τροποποίηση';
 $lang['summary']               = 'Επεξεργασία σύνοψης';
 $lang['noflash']               = 'Το <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> απαιτείται για την προβολή αυτού του στοιχείου.';
@@ -314,8 +313,7 @@ $lang['media_upload']          = 'Φόρτωση στο <strong>%s</strong> φά
 $lang['media_search']          = 'Αναζήτηση στο <strong>%s</strong> φάκελο.';
 $lang['media_view']            = '%s';
 $lang['media_viewold']         = '%s στα %s';
-$lang['media_edit']            = 'Επεξεργασία';
-$lang['media_history']         = 'Αυτές είναι οι παλαιότερες αναθεωρήσεις του αρχείου.';
+$lang['media_edit']            = 'Επεξεργασία %s';
 $lang['media_meta_edited']     = 'τα μεταδεδομένα επεξεργάστηκαν';
 $lang['media_perm_read']       = 'Συγνώμη, δεν έχετε επαρκή διακαιώματα για να διαβάσετε αυτά τα αρχεία.';
 $lang['media_perm_upload']     = 'Συγνώμη, δεν έχετε επαρκή διακαιώματα για να φορτώσετε αυτά τα αρχεία.';
diff --git a/inc/lang/eo/lang.php b/inc/lang/eo/lang.php
index 1c3b6f519686e9652a25e32ff74b8d5a472cc0a1..2d9b03148443fae49f69cda4bd443bbcd31c91ea 100644
--- a/inc/lang/eo/lang.php
+++ b/inc/lang/eo/lang.php
@@ -184,7 +184,7 @@ $lang['lastmod']               = 'Lastaj ŝanĝoj';
 $lang['by']                    = 'de';
 $lang['deleted']               = 'forigita';
 $lang['created']               = 'kreita';
-$lang['restored']              = 'malnova revizio restarigita';
+$lang['restored']              = 'malnova revizio restarigita (%s)';
 $lang['external_edit']         = 'ekstera redakto';
 $lang['summary']               = 'Bulteno de ŝanĝoj';
 $lang['noflash']               = 'La <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> necesas por montri tiun ĉi enhavon.';
diff --git a/inc/lang/es/lang.php b/inc/lang/es/lang.php
index 20d0284bce5568e6482e3ad93625247bae9f8047..193ec9a7dd895a61eb735be0d0ee4e63c6b194d4 100644
--- a/inc/lang/es/lang.php
+++ b/inc/lang/es/lang.php
@@ -203,7 +203,7 @@ $lang['lastmod']               = 'Última modificación';
 $lang['by']                    = 'por';
 $lang['deleted']               = 'borrado';
 $lang['created']               = 'creado';
-$lang['restored']              = 'se ha restaurado la vieja versión';
+$lang['restored']              = 'se ha restaurado la vieja versión (%s)';
 $lang['external_edit']         = 'editor externo';
 $lang['summary']               = 'Resumen de la edición';
 $lang['noflash']               = 'Para mostrar este contenido es necesario el <a href="http://www.adobe.com/products/flashplayer/">Plugin Adobe Flash</a>.';
@@ -280,8 +280,6 @@ $lang['subscr_m_unsubscribe']  = 'Darse de baja';
 $lang['subscr_m_subscribe']    = 'Suscribirse';
 $lang['subscr_m_receive']      = 'Recibir';
 $lang['subscr_style_every']    = 'enviar correo en cada cambio';
-$lang['subscr_style_digest']   = 'recopilar correo de cambios por cada página';
-$lang['subscr_style_list']     = 'lista de páginas con cambios desde el último correo';
 $lang['authmodfailed']         = 'Está mal configurada la autenticación de usuarios. Por favor, avisa al administrador del wiki.';
 $lang['authtempfail']          = 'La autenticación de usuarios no está disponible temporalmente. Si esta situación persiste, por favor avisa al administrador del wiki.';
 $lang['authpwdexpire']         = 'Su contraseña caducara en %d días, debería cambiarla lo antes posible';
diff --git a/inc/lang/et/lang.php b/inc/lang/et/lang.php
index 8ae61558ad3076711d2c2784701442ffd63cdc94..0a0310832d2f6c3c56e935a5c78b803bff30a03b 100644
--- a/inc/lang/et/lang.php
+++ b/inc/lang/et/lang.php
@@ -163,7 +163,7 @@ $lang['lastmod']               = 'Viimati muutnud';
 $lang['by']                    = 'persoon';
 $lang['deleted']               = 'eemaldatud';
 $lang['created']               = 'tekitatud';
-$lang['restored']              = 'vana versioon taastatud';
+$lang['restored']              = 'vana versioon taastatud (%s)';
 $lang['external_edit']         = 'väline muutmine';
 $lang['summary']               = 'kokkuvõte muudatustest';
 $lang['mail_newpage']          = 'leht lisatud:';
diff --git a/inc/lang/eu/lang.php b/inc/lang/eu/lang.php
index 5b03dcb97361ef0f04f60c00ca8ab1de65dd1ffe..7aab8b44cdcaa2ecc63c86abd2f292843c030f19 100644
--- a/inc/lang/eu/lang.php
+++ b/inc/lang/eu/lang.php
@@ -178,7 +178,7 @@ $lang['lastmod']               = 'Azken aldaketa';
 $lang['by']                    = 'egilea:';
 $lang['deleted']               = 'ezabatua';
 $lang['created']               = 'sortua';
-$lang['restored']              = 'bertsio zaharra berrezarria';
+$lang['restored']              = 'bertsio zaharra berrezarria (%s)';
 $lang['external_edit']         = 'kanpoko aldaketa';
 $lang['summary']               = 'Aldatu laburpena';
 $lang['noflash']               = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> beharrezkoa da eduki hau bistaratzeko.';
diff --git a/inc/lang/fa/lang.php b/inc/lang/fa/lang.php
index 026d6499ae6145c716a31d9993a8f2c5978be414..eb828a472e6cff948b0c37dd5896f66f03520f77 100644
--- a/inc/lang/fa/lang.php
+++ b/inc/lang/fa/lang.php
@@ -189,7 +189,7 @@ $lang['lastmod']               = 'آخرین ویرایش';
 $lang['by']                    = 'توسط';
 $lang['deleted']               = 'حذف شد';
 $lang['created']               = 'ایجاد شد';
-$lang['restored']              = 'یک نگارش پیشین واگردانی شد.';
+$lang['restored']              = 'یک نگارش پیشین واگردانی شد. (%s)';
 $lang['external_edit']         = 'ویرایش خارجی';
 $lang['summary']               = 'پیش‌نمایش';
 $lang['noflash']               = 'برای نمایش محتویات <a href="http://www.adobe.com/products/flashplayer/">افزونه‌ی فلش</a> مورد نیاز است.';
@@ -266,8 +266,6 @@ $lang['subscr_m_unsubscribe']  = 'لغو آبونه';
 $lang['subscr_m_subscribe']    = 'آبونه شدن';
 $lang['subscr_m_receive']      = 'دریافت کردن';
 $lang['subscr_style_every']    = 'ارسال رای‌نامه در تمامی تغییرات';
-$lang['subscr_style_digest']   = 'ارسال ایمیل‌های فشرده برای تغییرات هر صفحه';
-$lang['subscr_style_list']     = 'لیست صفحات تغییر داده شده از آخرین رای‌نامه';
 $lang['authmodfailed']         = 'اشکال در نوع معتبرسازی کاربران، مدیر ویکی را باخبر سازید.';
 $lang['authtempfail']          = 'معتبرسازی کابران موقتن مسدود می‌باشد. اگر این حالت پایدار بود، مدیر ویکی را باخبر سازید.';
 $lang['authpwdexpire']         = 'کلمه عبور شما در %d روز منقضی خواهد شد ، شما باید آن را زود تغییر دهید';
diff --git a/inc/lang/fi/lang.php b/inc/lang/fi/lang.php
index 73eb3d4cca32423cd56e43859f6d4c66214b0b90..59e4dc6cbf107222f2c6f26fb374a88da0ebcfa7 100644
--- a/inc/lang/fi/lang.php
+++ b/inc/lang/fi/lang.php
@@ -183,7 +183,7 @@ $lang['lastmod']               = 'Viimeksi muutettu';
 $lang['by']                    = '/';
 $lang['deleted']               = 'poistettu';
 $lang['created']               = 'luotu';
-$lang['restored']              = 'vanha versio palautettu';
+$lang['restored']              = 'vanha versio palautettu (%s)';
 $lang['external_edit']         = 'ulkoinen muokkaus';
 $lang['summary']               = 'Yhteenveto muokkauksesta';
 $lang['noflash']               = 'Tarvitset <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash-liitännäisen</a> nähdäksesi tämän sisällön.';
diff --git a/inc/lang/fo/lang.php b/inc/lang/fo/lang.php
index 14ec8c56bfd9b972f8391712d3f6b3ad3297bbd5..9f51824db4409c10a2c24c67453cb17a2f105866 100644
--- a/inc/lang/fo/lang.php
+++ b/inc/lang/fo/lang.php
@@ -130,7 +130,7 @@ $lang['lastmod']               = 'Seinast broytt';
 $lang['by']                    = 'av';
 $lang['deleted']               = 'strika';
 $lang['created']               = 'stovna';
-$lang['restored']              = 'gomul útgáva endurstovna';
+$lang['restored']              = 'gomul útgáva endurstovna (%s)';
 $lang['summary']               = 'Samandráttur';
 $lang['mail_newpage']          = 'skjal skoyta uppí:';
 $lang['mail_changed']          = 'skjal broytt:';
diff --git a/inc/lang/gl/lang.php b/inc/lang/gl/lang.php
index 7cc06a83302a8c7c2d5614bae562f6ed5170f295..fa49c1121546350ecc2982d59c321d6fda6ee5fe 100644
--- a/inc/lang/gl/lang.php
+++ b/inc/lang/gl/lang.php
@@ -181,7 +181,7 @@ $lang['lastmod']               = 'Última modificación';
 $lang['by']                    = 'por';
 $lang['deleted']               = 'eliminado';
 $lang['created']               = 'creado';
-$lang['restored']              = 'revisión antiga restaurada';
+$lang['restored']              = 'revisión antiga restaurada (%s)';
 $lang['external_edit']         = 'edición externa';
 $lang['summary']               = 'Resumo da edición';
 $lang['noflash']               = 'Precísase o <a href="http://www.adobe.com/products/flashplayer/">Extensión Adobe Flash</a> para amosar este contido.';
@@ -258,8 +258,6 @@ $lang['subscr_m_unsubscribe']  = 'Desubscribir';
 $lang['subscr_m_subscribe']    = 'Subscribir';
 $lang['subscr_m_receive']      = 'Recibir';
 $lang['subscr_style_every']    = 'correo-e en cada troco';
-$lang['subscr_style_digest']   = 'correo-e con resumo de trocos para cada páxina';
-$lang['subscr_style_list']     = 'lista de páxinas mudadas dende o último correo-e';
 $lang['authmodfailed']         = 'Configuración de autenticación de usuario incorrecta. Por favor, informa ao Administrador do teu Wiki.';
 $lang['authtempfail']          = 'A autenticación de usuario non está dispoñible de xeito temporal. De persistir esta situación, por favor, informa ao Administrador do teu Wiki.';
 $lang['authpwdexpire']         = 'A túa contrasinal expirará en %d días, deberías cambiala pronto.';
diff --git a/inc/lang/he/lang.php b/inc/lang/he/lang.php
index e474501ae0c7d5bb7c136968fd30571e7a9e94ed..4853a0e2b7c54f6b1a0b02007f6066c2d6ca0ff6 100644
--- a/inc/lang/he/lang.php
+++ b/inc/lang/he/lang.php
@@ -165,7 +165,7 @@ $lang['lastmod']               = 'מועד השינוי האחרון';
 $lang['by']                    = 'על ידי';
 $lang['deleted']               = 'נמחק';
 $lang['created']               = 'נוצר';
-$lang['restored']              = 'שוחזר';
+$lang['restored']              = 'שוחזר (%s)';
 $lang['external_edit']         = 'עריכה חיצונית';
 $lang['summary']               = 'תקציר העריכה';
 $lang['noflash']               = '<a href="http://www.adobe.com/products/flashplayer/">תוסף פלאש לדפדפן</a> נדרש כדי להציג תוכן זה.';
@@ -243,7 +243,6 @@ $lang['i_modified']            = 'משיקולי אבטחה סקריפט זה י
                          עליך לחלץ שנית את הקבצים מהחבילה שהורדה או להיעזר בדף
                          <a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>';
 $lang['i_funcna']              = 'פונקציית ה-PHP&rlm; <code>%s</code> אינה זמינה. יתכן כי מארח האתר חסם אותה מסיבה כלשהי?';
-$lang['i_phpver']              = 'גרסת ה־PHP שלך <code>%s</code> נמוכה מהדרוש. עליך לשדרג את התקנת ה־PHP שלך.';
 $lang['i_permfail']            = '<code>%s</code> אינה ניתנת לכתיבה על ידי DokuWiki. עליך לשנות הרשאות תיקייה זו!';
 $lang['i_confexists']          = '<code>%s</code> כבר קיים';
 $lang['i_writeerr']            = 'אין אפשרות ליצור את <code>%s</code>. נא לבדוק את הרשאות הקובץ/תיקייה וליצור את הקובץ ידנית.';
diff --git a/inc/lang/hi/lang.php b/inc/lang/hi/lang.php
index 893457066f5eaa569724335ca1553ec2ab1a305d..d2021fcaee843c8d711174178a441cf1d80c47e4 100644
--- a/inc/lang/hi/lang.php
+++ b/inc/lang/hi/lang.php
@@ -84,7 +84,6 @@ $lang['lastmod']               = 'अंतिम बार संशोधि
 $lang['by']                    = 'के द्वारा';
 $lang['deleted']               = 'हटाया';
 $lang['created']               = 'निर्मित';
-$lang['restored']              = 'पुराने संशोधन बहाल';
 $lang['external_edit']         = 'बाह्य सम्पादित';
 $lang['summary']               = 'सारांश संपादित करें';
 $lang['mail_newpage']          = 'पृष्ठ जोड़ा:';
diff --git a/inc/lang/hr/lang.php b/inc/lang/hr/lang.php
index 97f4cf0c283fafb2cf8c5412dff7842143c74efc..a607210d7883f11ccd2ce1cb9ebcc2a2c3351d46 100644
--- a/inc/lang/hr/lang.php
+++ b/inc/lang/hr/lang.php
@@ -165,7 +165,7 @@ $lang['lastmod']               = 'Zadnja izmjena';
 $lang['by']                    = 'od';
 $lang['deleted']               = 'obrisano';
 $lang['created']               = 'stvoreno';
-$lang['restored']              = 'vraćena prijašnja inačica';
+$lang['restored']              = 'vraćena prijašnja inačica (%s)';
 $lang['external_edit']         = 'vanjsko uređivanje';
 $lang['summary']               = 'Sažetak izmjena';
 $lang['noflash']               = 'Za prikazivanje ovog sadržaja potreban je <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>';
diff --git a/inc/lang/hu/lang.php b/inc/lang/hu/lang.php
index c59cace779cb30e0fce8a839ec41a0f67fbf346f..275fb15d55032cf7ee24ed6930b03c61fe6fa559 100644
--- a/inc/lang/hu/lang.php
+++ b/inc/lang/hu/lang.php
@@ -169,7 +169,7 @@ $lang['lastmod']               = 'Utolsó módosítás';
 $lang['by']                    = 'szerkesztette:';
 $lang['deleted']               = 'eltávolítva';
 $lang['created']               = 'létrehozva';
-$lang['restored']              = 'az előző változat helyreállítva';
+$lang['restored']              = 'az előző változat helyreállítva (%s)';
 $lang['external_edit']         = 'külső szerkesztés';
 $lang['summary']               = 'A változások összefoglalása';
 $lang['noflash']               = 'Ennek a tartalomnak a megtekintéséhez <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> szükséges.';
diff --git a/inc/lang/ia/lang.php b/inc/lang/ia/lang.php
index a9d5c376c8ec553edde8f7b23a54b10ba32a26c1..fd63fb5effc7b6c979d67b4d4dc241bd2d0ff952 100644
--- a/inc/lang/ia/lang.php
+++ b/inc/lang/ia/lang.php
@@ -163,7 +163,7 @@ $lang['lastmod']               = 'Ultime modification';
 $lang['by']                    = 'per';
 $lang['deleted']               = 'removite';
 $lang['created']               = 'create';
-$lang['restored']              = 'ancian version restaurate';
+$lang['restored']              = 'ancian version restaurate (%s)';
 $lang['external_edit']         = 'modification externe';
 $lang['summary']               = 'Modificar summario';
 $lang['noflash']               = 'Le <a href="http://www.adobe.com/products/flashplayer/">plug-in Flash de Adobe</a> es necessari pro monstrar iste contento.';
@@ -227,8 +227,6 @@ $lang['subscr_m_unsubscribe']  = 'Cancellar subscription';
 $lang['subscr_m_subscribe']    = 'Subscriber';
 $lang['subscr_m_receive']      = 'Reciper';
 $lang['subscr_style_every']    = 'un message pro cata modification';
-$lang['subscr_style_digest']   = 'un digesto de modificationes pro cata pagina';
-$lang['subscr_style_list']     = 'lista de paginas modificate depost le ultime e-mail';
 $lang['authmodfailed']         = 'Configuration incorrecte de authentication de usator. Per favor informa le administrator de tu wiki.';
 $lang['authtempfail']          = 'Le authentication de usator temporarimente non es disponibile. Si iste situation persiste, per favor informa le administrator de tu wiki.';
 $lang['i_chooselang']          = 'Selige tu lingua';
diff --git a/inc/lang/id/lang.php b/inc/lang/id/lang.php
index 91ed38e3129d77088d1642dea44a0a8605c58693..e14b9d9f5729708554cd4403a661634046a0eb38 100644
--- a/inc/lang/id/lang.php
+++ b/inc/lang/id/lang.php
@@ -125,7 +125,7 @@ $lang['lastmod']               = 'Terakhir diubah';
 $lang['by']                    = 'oleh';
 $lang['deleted']               = 'terhapus';
 $lang['created']               = 'dibuat';
-$lang['restored']              = 'revisi lama ditampilkan kembali';
+$lang['restored']              = 'revisi lama ditampilkan kembali (%s)';
 $lang['external_edit']         = 'Perubahan eksternal';
 $lang['summary']               = 'Edit summary';
 $lang['mail_newpage']          = 'Halaman ditambahkan:';
diff --git a/inc/lang/is/lang.php b/inc/lang/is/lang.php
index be20da6b3b34477ed7390b5c68c12223a1c4dfec..78ae7e249bac05d822fd1b1c0a4d1d6f4d2f9a46 100644
--- a/inc/lang/is/lang.php
+++ b/inc/lang/is/lang.php
@@ -134,7 +134,7 @@ $lang['lastmod']               = 'Síðast breytt';
 $lang['by']                    = 'af';
 $lang['deleted']               = 'eytt';
 $lang['created']               = 'myndað';
-$lang['restored']              = 'Breytt aftur til fyrri útgáfu';
+$lang['restored']              = 'Breytt aftur til fyrri útgáfu (%s)';
 $lang['external_edit']         = 'utanaðkomandi breyta';
 $lang['summary']               = 'Forskoða';
 $lang['noflash']               = 'Það þarf <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash viðbót</a> til að sýna sumt efnið á þessari síðu';
diff --git a/inc/lang/it/lang.php b/inc/lang/it/lang.php
index 1ad5ae1bb5bf7fdd8cb249bbf423c59320061a79..307e7292fdba180f826fc6fe148366bb8b732610 100644
--- a/inc/lang/it/lang.php
+++ b/inc/lang/it/lang.php
@@ -187,7 +187,7 @@ $lang['lastmod']               = 'Ultima modifica';
 $lang['by']                    = 'da';
 $lang['deleted']               = 'eliminata';
 $lang['created']               = 'creata';
-$lang['restored']              = 'versione precedente ripristinata';
+$lang['restored']              = 'versione precedente ripristinata (%s)';
 $lang['external_edit']         = 'modifica esterna';
 $lang['summary']               = 'Oggetto della modifica';
 $lang['noflash']               = 'E\' necessario <a href="http://www.adobe.com/products/flashplayer/">il plugin Adobe Flash</a> per visualizzare questo contenuto.';
@@ -263,8 +263,6 @@ $lang['subscr_m_unsubscribe']  = 'Rimuovi sottoscrizione';
 $lang['subscr_m_subscribe']    = 'Sottoscrivi';
 $lang['subscr_m_receive']      = 'Ricevi';
 $lang['subscr_style_every']    = 'email per ogni modifica';
-$lang['subscr_style_digest']   = 'email riassuntiva delle modifiche di ogni pagina';
-$lang['subscr_style_list']     = 'elenco delle pagine modificate dall\'ultima email';
 $lang['authmodfailed']         = 'La configurazione dell\'autenticazione non è corretta. Informa l\'amministratore di questo wiki.';
 $lang['authtempfail']          = 'L\'autenticazione è temporaneamente non disponibile. Se questa situazione persiste, informa l\'amministratore di questo wiki.';
 $lang['authpwdexpire']         = 'La tua password scadrà in %d giorni, dovresti cambiarla quanto prima.';
diff --git a/inc/lang/ja/lang.php b/inc/lang/ja/lang.php
index 66de0dab520b35c470438eb272d008fdd03eba91..7997889e46df418c8dc4cc87f9f3e1b3201e42ea 100644
--- a/inc/lang/ja/lang.php
+++ b/inc/lang/ja/lang.php
@@ -181,7 +181,7 @@ $lang['lastmod']               = '最終更新';
 $lang['by']                    = 'by';
 $lang['deleted']               = '削除';
 $lang['created']               = '作成';
-$lang['restored']              = '以前のバージョンを復元';
+$lang['restored']              = '以前のバージョンを復元 (%s)';
 $lang['external_edit']         = '外部編集';
 $lang['summary']               = '編集の概要';
 $lang['noflash']               = 'この内容を表示するためには <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> が必要です。';
diff --git a/inc/lang/km/lang.php b/inc/lang/km/lang.php
index 6a5fa223ff6c5f05d7af7ba6a86f1be256ec4900..85bb6afbad2af1a16500f461b84e9f0a47686b14 100644
--- a/inc/lang/km/lang.php
+++ b/inc/lang/km/lang.php
@@ -132,7 +132,6 @@ $lang['lastmod']    = 'ពេលកែចុងក្រោយ';
 $lang['by']         = 'និពន្ឋដោយ';
 $lang['deleted']    = 'យកចេញ';
 $lang['created']    = 'បង្កើត';
-$lang['restored']   = 'ស្ដារបុនរាព្រឹតចាស់';
 $lang['external_edit'] = 'កំរេពីក្រៅ';
 $lang['summary']    = 'កែតម្រា';
 
@@ -207,7 +206,6 @@ $lang['i_superuser']  = 'អ្នកកំពូល';
 $lang['i_problems']   = 'កម្មវិធី​ដំឡើងបានប៉ះឧបសគ្គ។ អ្នកមិនអាចបន្តទៅទៀត ដល់អ្នកជួសជុលវា។';
 $lang['i_modified']   = '';
 $lang['i_funcna']     = '<code>%s</code> ';
-$lang['i_phpver']     = 'PHP ប្រវត់លេខ<code>%s</code> ជា';
 $lang['i_permfail']   = '<code>%s</code> មិនអាចសាស';
 $lang['i_confexists'] = '<code>%s</code> មានហាយ';
 $lang['i_writeerr']   = 'មិនអាចបណ្កើ<code>%s</code>។ អ្នកត្រវការពិនិត្យអធិក្រឹតិរបស់ថតនឹងឯកសារ។';
diff --git a/inc/lang/ku/lang.php b/inc/lang/ku/lang.php
index 63ccafa3502b454529ca0b687745efc349d2e017..c9d658c6dec1fa04c614a27bffc7f6e7f26a84c5 100644
--- a/inc/lang/ku/lang.php
+++ b/inc/lang/ku/lang.php
@@ -95,7 +95,7 @@ $lang['lastmod']    = 'Guherandina dawî';
 $lang['by']         = 'by';
 $lang['deleted']    = 'hat jê birin';
 $lang['created']    = 'hat afirandin';
-$lang['restored']   = 'old revision restored';
+$lang['restored']   = 'old revision restored (%s)';
 $lang['summary']    = 'Kurteya guhartinê';
 
 $lang['mail_newpage'] = 'page added:';
diff --git a/inc/lang/la/lang.php b/inc/lang/la/lang.php
index 77fec8362230f00b8883e972e6ab5c1fdd3ff25a..bea921abc4484498175017f3e6d7ba5af367bc59 100644
--- a/inc/lang/la/lang.php
+++ b/inc/lang/la/lang.php
@@ -131,7 +131,6 @@ $lang['uploadsucc']            = 'Oneratum perfectum';
 $lang['uploadfail']            = 'Error onerandi.';
 $lang['uploadwrong']           = 'Onerare non potest. Genus documenti non legitimum!';
 $lang['uploadexist']           = 'Documentum iam est.';
-$lang['uploadbadcontent']      = 'Documentum oneratum cum genere documenti non congruit.';
 $lang['uploadspam']            = 'Onerare non potest: nam in indice perscriptionis documentum est.';
 $lang['uploadxss']             = 'Onerare non potest: nam forsitan malum scriptum in documento est.';
 $lang['uploadsize']            = 'Documentum onerandum ponderosius est. (Maxime "%s")';
@@ -164,7 +163,7 @@ $lang['lastmod']               = 'Extrema mutatio';
 $lang['by']                    = 'a(b)';
 $lang['deleted']               = 'deletur';
 $lang['created']               = 'creatur';
-$lang['restored']              = 'Recensio uetus restituta';
+$lang['restored']              = 'Recensio uetus restituta (%s)';
 $lang['external_edit']         = 'Externe recensere';
 $lang['summary']               = 'Indicem recensere';
 $lang['noflash']               = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> necessarium est.';
@@ -254,7 +253,6 @@ $lang['i_pol1']                = 'Publicus uicis (omnes legere, Sodales scribere
 $lang['i_pol2']                = 'Clausus uicis (Soli Sodales legere scribere et onerare poccunt)';
 $lang['i_retry']               = 'Rursum temptas';
 $lang['i_license']             = 'Elige facultatem sub qua tuus uicis est:';
-$lang['recent_global']         = 'Mutatione in hoc genere uides. Recentiores mutationes quoque uidere <a href="%s">potes</a>';
 $lang['years']                 = 'ab annis %d';
 $lang['months']                = 'a mensibus %d';
 $lang['weeks']                 = 'a septimanis %d';
diff --git a/inc/lang/lb/lang.php b/inc/lang/lb/lang.php
index e6409b7ff7f6c213ad619768d026314a732ce1fa..bced5a50a573805126ad34f1a7bf4f0dc90da404 100644
--- a/inc/lang/lb/lang.php
+++ b/inc/lang/lb/lang.php
@@ -124,7 +124,7 @@ $lang['lastmod']               = 'Fir d\'lescht g\'ännert';
 $lang['by']                    = 'vun';
 $lang['deleted']               = 'geläscht';
 $lang['created']               = 'erstallt';
-$lang['restored']              = 'al Versioun zeréckgeholl';
+$lang['restored']              = 'al Versioun zeréckgeholl (%s)';
 $lang['external_edit']         = 'extern Ännerung';
 $lang['summary']               = 'Resumé vun den Ännerungen';
 $lang['noflash']               = 'Den <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> get gebraucht fir dësen Inhalt unzeweisen.';
diff --git a/inc/lang/lt/lang.php b/inc/lang/lt/lang.php
index 13ff8c3054211b3aa85a01e1b30538d710c393e9..8a4c4e6a544ef0f7415f2a7ce6aaf40ea37919d6 100644
--- a/inc/lang/lt/lang.php
+++ b/inc/lang/lt/lang.php
@@ -132,7 +132,7 @@ $lang['lastmod']               = 'Keista';
 $lang['by']                    = 'vartotojo';
 $lang['deleted']               = 'ištrintas';
 $lang['created']               = 'sukurtas';
-$lang['restored']              = 'atstatyta sena versija';
+$lang['restored']              = 'atstatyta sena versija (%s)';
 $lang['external_edit']         = 'redaguoti papildomomis priemonÄ—mis';
 $lang['summary']               = 'Redaguoti santraukÄ…';
 $lang['noflash']               = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> reikalingas šios medžiagos peržiūrai.';
diff --git a/inc/lang/lv/lang.php b/inc/lang/lv/lang.php
index 671e5f52abe318517baf4b7aad3c1b2d3752e554..2027b87ba3f3a446fcc8f4c6fe1e3d8c9b896640 100644
--- a/inc/lang/lv/lang.php
+++ b/inc/lang/lv/lang.php
@@ -178,7 +178,7 @@ $lang['lastmod']               = 'Labota';
 $lang['by']                    = ', labojis';
 $lang['deleted']               = 'dzēsts';
 $lang['created']               = 'izveidots';
-$lang['restored']              = 'vecā versija atjaunota';
+$lang['restored']              = 'vecā versija atjaunota (%s)';
 $lang['external_edit']         = 'ārpussistēmas labojums';
 $lang['summary']               = 'Anotācija';
 $lang['noflash']               = 'Lai attēlotu lapas saturu, vajag <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
diff --git a/inc/lang/mg/lang.php b/inc/lang/mg/lang.php
index 4142f00d0391577ab36d4952fdd5cfc5daa81a3c..95589ab21900758a9c2ea467e08a8ba80613fb0d 100644
--- a/inc/lang/mg/lang.php
+++ b/inc/lang/mg/lang.php
@@ -88,7 +88,7 @@ $lang['lastmod']    = 'Novaina farany:';
 $lang['by']         = '/';
 $lang['deleted']    = 'voafafa';
 $lang['created']    = 'Voamboatra';
-$lang['restored']   = 'Naverina tamin\'ny kinova taloha';
+$lang['restored']   = 'Naverina tamin\'ny kinova taloha (%s)';
 $lang['summary']    = 'Fanovana teo';
 
 $lang['mail_newpage'] = 'pejy niampy:';
diff --git a/inc/lang/mk/lang.php b/inc/lang/mk/lang.php
index 7482f2512475da19c8ee296ea48d964259a2a417..44bd489b718623d1e42a7166b4a0148b42b7a13c 100644
--- a/inc/lang/mk/lang.php
+++ b/inc/lang/mk/lang.php
@@ -136,7 +136,7 @@ $lang['lastmod']               = 'Последно изменета';
 $lang['by']                    = 'од';
 $lang['deleted']               = 'отстранета';
 $lang['created']               = 'креирана';
-$lang['restored']              = 'обновена е стара ревизија';
+$lang['restored']              = 'обновена е стара ревизија (%s)';
 $lang['external_edit']         = 'надворешно уредување';
 $lang['summary']               = 'Уреди го изводот';
 $lang['noflash']               = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash приклучокот</a> е потребен за да се прикаже оваа содржина.';
@@ -196,8 +196,6 @@ $lang['subscr_m_unsubscribe']  = 'Отплатување';
 $lang['subscr_m_subscribe']    = 'Претплата';
 $lang['subscr_m_receive']      = 'Прими';
 $lang['subscr_style_every']    = 'е-пошта за секоја промена';
-$lang['subscr_style_digest']   = 'е-пошта со преглед од промените за секоја страница';
-$lang['subscr_style_list']     = 'листа на променети страници од последната е-пошта';
 $lang['authmodfailed']         = 'Лоша конфигурација за автентикација на корисник. Ве молам информирајте го вики администратор.';
 $lang['authtempfail']          = 'Автентикација на корисник е привремено недостапна. Ако оваа ситуација истрајува, ве молам известете го вики администратор.';
 $lang['i_chooselang']          = 'Избере јазик';
diff --git a/inc/lang/mr/lang.php b/inc/lang/mr/lang.php
index b754a3f1cad968c905ba4f1f3ef994ee3e2c9cec..d95813efab68d1ccfb086b42f476e6138e7c101a 100644
--- a/inc/lang/mr/lang.php
+++ b/inc/lang/mr/lang.php
@@ -180,7 +180,6 @@ $lang['lastmod']               = 'सर्वात शेवटचा बद
 $lang['by']                    = 'द्वारा';
 $lang['deleted']               = 'काढून टाकले';
 $lang['created']               = 'निर्माण केले';
-$lang['restored']              = 'जुनी आवृत्ति पुनर्स्थापित केली';
 $lang['external_edit']         = 'बाहेरून संपादित';
 $lang['summary']               = 'सारांश बदला';
 $lang['noflash']               = 'ही माहिती दाखवण्यासाठी <a href="http://www.adobe.com/products/flashplayer/">अडोब फ्लॅश प्लेअर</a> ची गरज आहे.';
diff --git a/inc/lang/ms/lang.php b/inc/lang/ms/lang.php
index 92dc86b5ae7fa6a369ce2839f288429748f9c36e..02c0e2c91f6cf5c77dc4440a0921eee29492fb02 100644
--- a/inc/lang/ms/lang.php
+++ b/inc/lang/ms/lang.php
@@ -93,5 +93,5 @@ $lang['uploadfail']            = 'Ralat muat naik';
 $lang['uploadxss']             = 'Fail ini mengandungi kod HTML atau kod skrip yang mungkin boleh disalah tafsir oleh pelayar web.';
 $lang['toc']                   = 'Jadual Kandungan';
 $lang['current']               = 'kini';
-$lang['restored']              = 'Telah dikembalikan ke semakan sebelumnya';
+$lang['restored']              = 'Telah dikembalikan ke semakan sebelumnya (%s)';
 $lang['summary']               = 'Paparan';
diff --git a/inc/lang/ne/lang.php b/inc/lang/ne/lang.php
index fa6d2f7052e9f249d67dc9d5f43c64c26d77f32d..b7ca14b0a7b7fe862849817b68a9eb5c35851c02 100644
--- a/inc/lang/ne/lang.php
+++ b/inc/lang/ne/lang.php
@@ -128,7 +128,6 @@ $lang['lastmod']               = 'अन्तिम पटक सच्या
 $lang['by']                    = 'द्वारा ';
 $lang['deleted']               = 'हटाइएको';
 $lang['created']               = 'निर्माण गरिएको';
-$lang['restored']              = 'पुरानो संस्करण पुनर्‌प्रयोग गरिएको';
 $lang['external_edit']         = 'बाह्य सम्पादन';
 $lang['summary']               = 'सम्पादनको बारेमा';
 $lang['mail_newpage']          = 'थपिएको पृष्ठ';
diff --git a/inc/lang/nl/lang.php b/inc/lang/nl/lang.php
index 0241eab2ff37fbc2f470ec68b0935482095e80e2..f6192a99bf7c8e7ed871ec8979665e4719d27717 100644
--- a/inc/lang/nl/lang.php
+++ b/inc/lang/nl/lang.php
@@ -192,7 +192,7 @@ $lang['lastmod']               = 'Laatst gewijzigd';
 $lang['by']                    = 'door';
 $lang['deleted']               = 'verwijderd';
 $lang['created']               = 'aangemaakt';
-$lang['restored']              = 'oude revisie hersteld';
+$lang['restored']              = 'oude revisie hersteld (%s)';
 $lang['external_edit']         = 'Externe bewerking';
 $lang['summary']               = 'Samenvatting wijziging';
 $lang['noflash']               = 'De <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> is vereist om de pagina te kunnen weergeven.';
diff --git a/inc/lang/no/lang.php b/inc/lang/no/lang.php
index 9aa11ac87202ca9c229ed44422ef44f668aeeed4..8235bfb913b21bfd1c6fb30b0c37a0851c356e63 100644
--- a/inc/lang/no/lang.php
+++ b/inc/lang/no/lang.php
@@ -190,7 +190,7 @@ $lang['lastmod']               = 'Sist endret';
 $lang['by']                    = 'av';
 $lang['deleted']               = 'fjernet';
 $lang['created']               = 'opprettet';
-$lang['restored']              = 'gjenopprettet til en tidligere versjon';
+$lang['restored']              = 'gjenopprettet til en tidligere versjon (%s)';
 $lang['external_edit']         = 'ekstern redigering';
 $lang['summary']               = 'Redigeringskommentar';
 $lang['noflash']               = 'For at dette innholdet skal vises må du ha <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
@@ -316,8 +316,7 @@ $lang['media_upload']          = 'Last opp til navnerommet <strong>%s</strong>.'
 $lang['media_search']          = 'Søk i navnerommet <strong>%s</strong>.';
 $lang['media_view']            = '%s';
 $lang['media_viewold']         = '%s på %s';
-$lang['media_edit']            = 'Rediger';
-$lang['media_history']         = 'Dette er de tidligere versjonene av filen.';
+$lang['media_edit']            = 'Rediger %s';
 $lang['media_meta_edited']     = 'metadata er endra';
 $lang['media_perm_read']       = 'Beklager, du har ikke tilgang til å lese filer.';
 $lang['media_perm_upload']     = 'Beklager, du har ikke tilgang til å laste opp filer.';
diff --git a/inc/lang/pl/lang.php b/inc/lang/pl/lang.php
index cf9fc6a16aa85ffd24648091efd1b6f4fda27a80..51149e88f29df5e7778b31ea6c65bbda93221637 100644
--- a/inc/lang/pl/lang.php
+++ b/inc/lang/pl/lang.php
@@ -189,7 +189,7 @@ $lang['lastmod']               = 'ostatnio zmienione';
 $lang['by']                    = 'przez';
 $lang['deleted']               = 'usunięto';
 $lang['created']               = 'utworzono';
-$lang['restored']              = 'przywrócono poprzednią wersję';
+$lang['restored']              = 'przywrócono poprzednią wersję (%s)';
 $lang['external_edit']         = 'edycja zewnętrzna';
 $lang['summary']               = 'Opis zmian';
 $lang['noflash']               = 'Plugin <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> jest niezbędny do obejrzenia tej zawartości.';
@@ -265,8 +265,6 @@ $lang['subscr_m_unsubscribe']  = 'Zrezygnuj z subskrypcji';
 $lang['subscr_m_subscribe']    = 'Subskrybuj';
 $lang['subscr_m_receive']      = 'Otrzymuj';
 $lang['subscr_style_every']    = 'email przy każdej zmianie';
-$lang['subscr_style_digest']   = 'email ze streszczeniem zmian dla każdej ze stron';
-$lang['subscr_style_list']     = 'lista zmienionych stron od czasu ostatniego emaila';
 $lang['authmodfailed']         = 'Błąd uwierzytelnienia. Powiadom administratora tego wiki.';
 $lang['authtempfail']          = 'Uwierzytelnienie użytkownika jest w tej chwili niemożliwe. Jeśli ta sytuacja się powtórzy, powiadom administratora tego wiki.';
 $lang['authpwdexpire']         = 'Twoje hasło wygaśnie za %d dni. Należy je zmienić w krótkim czasie.';
diff --git a/inc/lang/pt/lang.php b/inc/lang/pt/lang.php
index 1555889f6ccddea5c5b7bd424cb05207c1d1972a..ac9c59c3ef1dc76cf192cb640e8fcfb3bf61a374 100644
--- a/inc/lang/pt/lang.php
+++ b/inc/lang/pt/lang.php
@@ -179,7 +179,7 @@ $lang['lastmod']               = 'Esta página foi modificada pela última vez e
 $lang['by']                    = 'por';
 $lang['deleted']               = 'Documento automaticamente removido.';
 $lang['created']               = 'Criação deste novo documento.';
-$lang['restored']              = 'Versão anterior restaurada.';
+$lang['restored']              = 'Versão anterior restaurada (%s)';
 $lang['external_edit']         = 'Edição externa';
 $lang['summary']               = 'Sumário da Edição';
 $lang['noflash']               = 'O <a href="http://www.adobe.com/products/flashplayer/">Plugin Adobe Flash</a> é necessário para exibir este conteúdo.';
diff --git a/inc/lang/ro/lang.php b/inc/lang/ro/lang.php
index d6bfcad3aa21dc2df935dbf79137f484e472ffd1..8b2483dafa771c91c1d1fefdc43722816ace80f4 100644
--- a/inc/lang/ro/lang.php
+++ b/inc/lang/ro/lang.php
@@ -184,7 +184,7 @@ $lang['lastmod']               = 'Ultima modificare';
 $lang['by']                    = 'de către';
 $lang['deleted']               = 'ÅŸters';
 $lang['created']               = 'creat';
-$lang['restored']              = 'versiune veche restaurată';
+$lang['restored']              = 'versiune veche restaurată (%s)';
 $lang['external_edit']         = 'editare externă';
 $lang['summary']               = 'Editează sumarul';
 $lang['noflash']               = 'Plugin-ul <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> este necesar pentru afişarea corectă a conţinutului.';
diff --git a/inc/lang/ru/lang.php b/inc/lang/ru/lang.php
index c391bc6a5e8adc1b7d40b37a95181a16660f325d..52e0ef3d625722d3a9702ceb59406f8f90033530 100644
--- a/inc/lang/ru/lang.php
+++ b/inc/lang/ru/lang.php
@@ -193,7 +193,7 @@ $lang['lastmod']               = 'Последние изменения';
 $lang['by']                    = ' —';
 $lang['deleted']               = 'удалено';
 $lang['created']               = 'создано';
-$lang['restored']              = 'старая ревизия восстановлена';
+$lang['restored']              = 'старая ревизия восстановлена (%s)';
 $lang['external_edit']         = 'внешнее изменение';
 $lang['summary']               = 'Сводка изменений';
 $lang['noflash']               = 'Для просмотра этого содержимого требуется <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
@@ -270,8 +270,6 @@ $lang['subscr_m_unsubscribe']  = 'Отменить подписку';
 $lang['subscr_m_subscribe']    = 'Подписаться';
 $lang['subscr_m_receive']      = 'Получить';
 $lang['subscr_style_every']    = 'уведомлять о каждом изменении';
-$lang['subscr_style_digest']   = 'сводка изменений по каждой странице';
-$lang['subscr_style_list']     = 'перечислять изменившиеся страницы с прошлого уведомления';
 $lang['authmodfailed']         = 'Неправильная конфигурация аутентификации пользователя. Пожалуйста, сообщите об этом своему администратору вики.';
 $lang['authtempfail']          = 'Аутентификация пользователей временно недоступна. Если проблема продолжается какое-то время, пожалуйста, сообщите об этом своему администратору вики.';
 $lang['authpwdexpire']         = 'Действие вашего пароля истекает через %d дней. Вы должны изменить его как можно скорее';
diff --git a/inc/lang/sl/lang.php b/inc/lang/sl/lang.php
index 81220b8a2707a72f46ee93da91336dde9a762b62..5c4316b014cc565d70eaedba9b91cdfe6cc03163 100644
--- a/inc/lang/sl/lang.php
+++ b/inc/lang/sl/lang.php
@@ -177,7 +177,7 @@ $lang['lastmod']               = 'Zadnja sprememba';
 $lang['by']                    = 'uporabnika';
 $lang['deleted']               = 'odstranjena';
 $lang['created']               = 'ustvarjena';
-$lang['restored']              = 'povrnjena stara različica';
+$lang['restored']              = 'povrnjena stara različica (%s)';
 $lang['external_edit']         = 'urejanje v zunanjem urejevalniku';
 $lang['summary']               = 'Povzetek urejanja';
 $lang['noflash']               = 'Za prikaz vsebine je treba namestiti <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>';
diff --git a/inc/lang/sq/lang.php b/inc/lang/sq/lang.php
index e190d8404cc66dce658902e239a3e22e05d4e7b2..212f10607eb09c569ca37689129cd249434b9184 100644
--- a/inc/lang/sq/lang.php
+++ b/inc/lang/sq/lang.php
@@ -140,7 +140,7 @@ $lang['lastmod']               = 'Redaktuar për herë të fundit';
 $lang['by']                    = 'nga';
 $lang['deleted']               = 'u fshi';
 $lang['created']               = 'u krijua';
-$lang['restored']              = 'Kthehu tek një version i vjetër';
+$lang['restored']              = 'Kthehu tek një version i vjetër (%s)';
 $lang['external_edit']         = 'redaktim i jashtëm';
 $lang['summary']               = 'Përmbledhja redaktimit';
 $lang['noflash']               = 'Nevojitet <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> për të paraqitur këtë përmbajtje.';
@@ -204,8 +204,6 @@ $lang['subscr_m_unsubscribe']  = 'Fshi Abonimin';
 $lang['subscr_m_subscribe']    = 'Abonohu';
 $lang['subscr_m_receive']      = 'Mer';
 $lang['subscr_style_every']    = 'email mbi çdo ndryshim';
-$lang['subscr_style_digest']   = 'pasqyro email-e ndryshimi pér çdo faqe';
-$lang['subscr_style_list']     = 'listë e faqeve të ndryshuara që nga emaili i fundit';
 $lang['authmodfailed']         = 'Konfigurim i gabuar i autentikimit të përdoruesit. Ju lutem informoni Administratorin tuaj të Wiki-it.';
 $lang['authtempfail']          = 'Autentikimi i përdoruesve është përkohësisht i padisponueshëm. Nëse kjo gjendje vazhdon, ju lutemi të informoni Administratorin tuaj të Wiki-it.';
 $lang['i_chooselang']          = 'Zgjidhni gjuhën tuaj';
diff --git a/inc/lang/sr/lang.php b/inc/lang/sr/lang.php
index d7f594511edb75e7b2bee527ea34901484b2af14..7fbdf198546e7e9e73575ab03e00b73ad6441e67 100644
--- a/inc/lang/sr/lang.php
+++ b/inc/lang/sr/lang.php
@@ -162,7 +162,7 @@ $lang['lastmod']               = 'Последњи пут мењано';
 $lang['by']                    = 'од';
 $lang['deleted']               = 'избрисано';
 $lang['created']               = 'направљено';
-$lang['restored']              = 'стара верзија повраћена';
+$lang['restored']              = 'стара верзија повраћена (%s)';
 $lang['external_edit']         = 'спољна измена';
 $lang['summary']               = 'Сажетак измене';
 $lang['noflash']               = 'За приказивање ове врсте материјала потребан вам је <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
diff --git a/inc/lang/th/lang.php b/inc/lang/th/lang.php
index c9d52643629da1ed0f0f44c88771e385f3baecc3..627484eab6d6d5eabe616619ebb621acc6f66714 100644
--- a/inc/lang/th/lang.php
+++ b/inc/lang/th/lang.php
@@ -144,7 +144,7 @@ $lang['lastmod']               = 'แก้ไขครั้งล่าสุ
 $lang['by']                    = 'โดย';
 $lang['deleted']               = 'ถูกถอดออก';
 $lang['created']               = 'ถูกสร้าง';
-$lang['restored']              = 'ย้อนไปรุ่นก่อนหน้า';
+$lang['restored']              = 'ย้อนไปรุ่นก่อนหน้า (%s)';
 $lang['external_edit']         = 'แก้ไขภายนอก';
 $lang['summary']               = 'สรุป(หมายเหตุ)การแก้ไขนี้';
 $lang['noflash']               = 'ต้องการตัวเล่นแฟลช <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> เพื่อแสดงผลเนื้อหานี้';
diff --git a/inc/lang/tr/lang.php b/inc/lang/tr/lang.php
index 5430905b1b94e5010d00fa8ba5127f6c7ef408d6..c6edf74c6367eb3a8cf17e32a2d958b2648b8437 100644
--- a/inc/lang/tr/lang.php
+++ b/inc/lang/tr/lang.php
@@ -176,7 +176,7 @@ $lang['lastmod']               = 'Son deÄŸiÅŸtirilme';
 $lang['by']                    = 'DeÄŸiÅŸtiren:';
 $lang['deleted']               = 'silindi';
 $lang['created']               = 'oluÅŸturuldu';
-$lang['restored']              = 'eski sürüme dönüldü';
+$lang['restored']              = 'eski sürüme dönüldü (%s)';
 $lang['external_edit']         = 'Dışarıdan düzenle';
 $lang['summary']               = 'Özeti düzenle';
 $lang['noflash']               = 'Bu içeriği göstermek için <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Eklentisi</a> gerekmektedir.';
diff --git a/inc/lang/uk/lang.php b/inc/lang/uk/lang.php
index 5274a421029fe0c5fd41bf5460214c626c767695..6aa468c509ae3224729ec236a0a5dd70225330c4 100644
--- a/inc/lang/uk/lang.php
+++ b/inc/lang/uk/lang.php
@@ -169,7 +169,7 @@ $lang['lastmod']               = 'В останнє змінено';
 $lang['by']                    = ' ';
 $lang['deleted']               = 'знищено';
 $lang['created']               = 'створено';
-$lang['restored']              = 'відновлено стару ревізію';
+$lang['restored']              = 'відновлено стару ревізію (%s)';
 $lang['external_edit']         = 'зовнішнє редагування';
 $lang['summary']               = 'Підсумок змін';
 $lang['noflash']               = 'Для перегляду цієї сторінки необхідно встановити <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
diff --git a/inc/lang/vi/lang.php b/inc/lang/vi/lang.php
index 99c4d47e440e9f8d860222c3c9360b0b504a7882..c439ca5349df27ec21c3579b5ca0054e2b7cd5eb 100644
--- a/inc/lang/vi/lang.php
+++ b/inc/lang/vi/lang.php
@@ -176,7 +176,7 @@ $lang['lastmod']    = 'Thời điểm thay đổi';
 $lang['by']         = 'do';
 $lang['deleted']    = 'bị xoá';
 $lang['created']    = 'được tạo ra';
-$lang['restored']   = 'phiên bản cũ đã được khôi phục';
+$lang['restored']   = 'phiên bản cũ đã được khôi phục (%s)';
 $lang['external_edit']         = 'external edit';
 $lang['summary']    = 'Tóm tắt biên soạn';
 $lang['noflash']               = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> cần được cài để có thể xem nội dung này.';
diff --git a/inc/lang/zh-tw/lang.php b/inc/lang/zh-tw/lang.php
index ddb35617e825df9c53b434c903809860339d60db..536266971bce9bb4f8cb39c6bb9dfb7d4e46d445 100644
--- a/inc/lang/zh-tw/lang.php
+++ b/inc/lang/zh-tw/lang.php
@@ -186,7 +186,7 @@ $lang['lastmod']               = '上一次變更';
 $lang['by']                    = 'ç”±';
 $lang['deleted']               = '移除';
 $lang['created']               = '建立';
-$lang['restored']              = '恢復為舊版';
+$lang['restored']              = '恢復為舊版 (%s)';
 $lang['external_edit']         = '外部編輯';
 $lang['summary']               = '編輯摘要';
 $lang['noflash']               = '顯示此內容需要 <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash 附加元件</a>。';
diff --git a/inc/media.php b/inc/media.php
index 572b1177c4cd1737b012fd416e6700fcaf72f5e4..db1ca0d5786fcbc6290a91b46851cc140cc367d9 100644
--- a/inc/media.php
+++ b/inc/media.php
@@ -237,8 +237,7 @@ function media_upload_xhr($ns,$auth){
     $realSize = stream_copy_to_stream($input, $target);
     fclose($target);
     fclose($input);
-    if ($realSize != (int)$_SERVER["CONTENT_LENGTH"]){
-        unlink($target);
+    if (isset($_SERVER["CONTENT_LENGTH"]) && ($realSize != (int)$_SERVER["CONTENT_LENGTH"])){
         unlink($path);
         return false;
     }
@@ -1687,18 +1686,36 @@ function media_nstree($ns){
     $ns  = cleanID($ns);
     if(empty($ns)){
         global $ID;
-        $ns = dirname(str_replace(':','/',$ID));
-        if($ns == '.') $ns ='';
+        $ns = (string)getNS($ID);
     }
-    $ns  = utf8_encodeFN(str_replace(':','/',$ns));
+
+    $ns_dir  = utf8_encodeFN(str_replace(':','/',$ns));
 
     $data = array();
-    search($data,$conf['mediadir'],'search_index',array('ns' => $ns, 'nofiles' => true));
+    search($data,$conf['mediadir'],'search_index',array('ns' => $ns_dir, 'nofiles' => true));
 
     // wrap a list with the root level around the other namespaces
     array_unshift($data, array('level' => 0, 'id' => '', 'open' =>'true',
                                'label' => '['.$lang['mediaroot'].']'));
 
+    // insert the current ns into the hierarchy if it isn't already part of it
+    $ns_parts = explode(':', $ns);
+    $tmp_ns = '';
+    $pos = 0;
+    foreach ($ns_parts as $level => $part) {
+        if ($tmp_ns) $tmp_ns .= ':'.$part;
+        else $tmp_ns = $part;
+
+        // find the namespace parts or insert them
+        while ($data[$pos]['id'] != $tmp_ns) {
+            if ($pos >= count($data) || ($data[$pos]['level'] <= $level+1 && strnatcmp(utf8_encodeFN($data[$pos]['id']), utf8_encodeFN($tmp_ns)) > 0)) {
+                array_splice($data, $pos, 0, array(array('level' => $level+1, 'id' => $tmp_ns, 'open' => 'true')));
+                break;
+            }
+            ++$pos;
+        }
+    }
+
     echo html_buildlist($data,'idx','media_nstree_item','media_nstree_li');
 }
 
@@ -1878,6 +1895,8 @@ function media_get_from_URL($url,$ext,$cache){
 function media_image_download($url,$file){
     global $conf;
     $http = new DokuHTTPClient();
+    $http->keep_alive = false; // we do single ops here, no need for keep-alive
+
     $http->max_bodysize = $conf['fetchsize'];
     $http->timeout = 25; //max. 25 sec
     $http->header_regexp = '!\r\nContent-Type: image/(jpe?g|gif|png)!i';
diff --git a/inc/parser/code.php b/inc/parser/code.php
index 21fb0dc3c25d1423330bc0f162f97a866a14a6a9..43d8d703fe90b76e40a18883cff884b94e8efc4b 100644
--- a/inc/parser/code.php
+++ b/inc/parser/code.php
@@ -43,7 +43,7 @@ class Doku_Renderer_code extends Doku_Renderer {
      * This should never be reached, if it is send a 404
      */
     function document_end() {
-        header("HTTP/1.0 404 Not Found");
+        http_status(404);
         echo '404 - Not found';
         exit;
     }
diff --git a/install.php b/install.php
index f54c252073a181b14c274486ea06bf92528edf7a..2db25bd2fcf35be7de0de6074852afb0840f3f45 100644
--- a/install.php
+++ b/install.php
@@ -54,7 +54,8 @@ $dokuwiki_hash = array(
     '2011-05-25'   => '4241865472edb6fa14a1227721008072',
     '2011-11-10'   => 'b46ff19a7587966ac4df61cbab1b8b31',
     '2012-01-25'   => '72c083c73608fc43c586901fd5dabb74',
-    '2012-09-10'   => 'eb0b3fc90056fbc12bac6f49f7764df3'
+    '2012-09-10'   => 'eb0b3fc90056fbc12bac6f49f7764df3',
+    'devel'        => '7b62b75245f57f122d3e0f8ed7989623',
 );
 
 
@@ -391,6 +392,24 @@ EOT;
         @touch(DOKU_INC.'data/cache/autosubmit.txt');
     }
 
+    // disable auth plugins til needed
+    $output = <<<EOT
+<?php
+/*
+ * Local plugin enable/disable settings
+ *
+ * Auto-generated by install script
+ * Date: $now
+ */
+
+\$plugins['authad']    = 0;
+\$plugins['authldap']  = 0;
+\$plugins['authmysql'] = 0;
+\$plugins['authpgsql'] = 0;
+
+EOT;
+    $ok = $ok && fileWrite(DOKU_LOCAL.'plugins.local.php', $output);
+
     return $ok;
 }
 
diff --git a/lib/exe/detail.php b/lib/exe/detail.php
index e597db3a29911ae8aba0aae5f8e0c1f823c4336c..db635c016180bbb8f31d997f57967b190197db18 100644
--- a/lib/exe/detail.php
+++ b/lib/exe/detail.php
@@ -31,7 +31,7 @@ if($AUTH >= AUTH_READ){
     $SRC = mediaFN($IMG);
     if(!@file_exists($SRC)){
         //doesn't exist!
-        header("HTTP/1.0 404 File not Found");
+        http_status(404);
         $ERROR = 'File not found';
     }
 }else{
diff --git a/lib/exe/fetch.php b/lib/exe/fetch.php
index 52e7ebe1e10e807f82fc6b76eded65d2963600f5..9bac4d272abd26b6dcff454457f10095681a929a 100644
--- a/lib/exe/fetch.php
+++ b/lib/exe/fetch.php
@@ -6,84 +6,87 @@
  * @author     Andreas Gohr <andi@splitbrain.org>
  */
 
-  if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
-  define('DOKU_DISABLE_GZIP_OUTPUT', 1);
-  require_once(DOKU_INC.'inc/init.php');
-
-  //close session
-  session_write_close();
-
-  $mimetypes = getMimeTypes();
-
-  //get input
-  $MEDIA  = stripctl(getID('media',false)); // no cleaning except control chars - maybe external
-  $CACHE  = calc_cache($INPUT->str('cache'));
-  $WIDTH  = $INPUT->int('w');
-  $HEIGHT = $INPUT->int('h');
-  $REV    = &$INPUT->ref('rev');
-  //sanitize revision
-  $REV = preg_replace('/[^0-9]/','',$REV);
-
-  list($EXT,$MIME,$DL) = mimetype($MEDIA,false);
-  if($EXT === false){
-    $EXT  = 'unknown';
-    $MIME = 'application/octet-stream';
-    $DL   = true;
-  }
-
-  // check for permissions, preconditions and cache external files
-  list($STATUS, $STATUSMESSAGE) = checkFileStatus($MEDIA, $FILE, $REV);
-
-  // prepare data for plugin events
-  $data = array('media'           => $MEDIA,
-                'file'            => $FILE,
-                'orig'            => $FILE,
-                'mime'            => $MIME,
-                'download'        => $DL,
-                'cache'           => $CACHE,
-                'ext'             => $EXT,
-                'width'           => $WIDTH,
-                'height'          => $HEIGHT,
-                'status'          => $STATUS,
-                'statusmessage'   => $STATUSMESSAGE,
-  );
-
-  // handle the file status
-  $evt = new Doku_Event('FETCH_MEDIA_STATUS', $data);
-  if ( $evt->advise_before() ) {
-    // redirects
-    if($data['status'] > 300 && $data['status'] <= 304){
-      send_redirect($data['statusmessage']);
+if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__).'/../../');
+define('DOKU_DISABLE_GZIP_OUTPUT', 1);
+require_once(DOKU_INC.'inc/init.php');
+session_write_close(); //close session
+
+// BEGIN main (if not testing)
+if(!defined('SIMPLE_TEST')) {
+    $mimetypes = getMimeTypes();
+
+    //get input
+    $MEDIA  = stripctl(getID('media', false)); // no cleaning except control chars - maybe external
+    $CACHE  = calc_cache($INPUT->str('cache'));
+    $WIDTH  = $INPUT->int('w');
+    $HEIGHT = $INPUT->int('h');
+    $REV    = & $INPUT->ref('rev');
+    //sanitize revision
+    $REV = preg_replace('/[^0-9]/', '', $REV);
+
+    list($EXT, $MIME, $DL) = mimetype($MEDIA, false);
+    if($EXT === false) {
+        $EXT  = 'unknown';
+        $MIME = 'application/octet-stream';
+        $DL   = true;
     }
-    // send any non 200 status
-    if($data['status'] != 200){
-      header('HTTP/1.0 ' . $data['status'] . ' ' . $data['statusmessage']);
+
+    // check for permissions, preconditions and cache external files
+    list($STATUS, $STATUSMESSAGE) = checkFileStatus($MEDIA, $FILE, $REV);
+
+    // prepare data for plugin events
+    $data = array(
+        'media'         => $MEDIA,
+        'file'          => $FILE,
+        'orig'          => $FILE,
+        'mime'          => $MIME,
+        'download'      => $DL,
+        'cache'         => $CACHE,
+        'ext'           => $EXT,
+        'width'         => $WIDTH,
+        'height'        => $HEIGHT,
+        'status'        => $STATUS,
+        'statusmessage' => $STATUSMESSAGE,
+    );
+
+    // handle the file status
+    $evt = new Doku_Event('FETCH_MEDIA_STATUS', $data);
+    if($evt->advise_before()) {
+        // redirects
+        if($data['status'] > 300 && $data['status'] <= 304) {
+            send_redirect($data['statusmessage']);
+        }
+        // send any non 200 status
+        if($data['status'] != 200) {
+            http_status($data['status'], $data['statusmessage']);
+        }
+        // die on errors
+        if($data['status'] > 203) {
+            print $data['statusmessage'];
+            exit;
+        }
     }
-    // die on errors
-    if($data['status'] > 203){
-      print $data['statusmessage'];
-      exit;
+    $evt->advise_after();
+    unset($evt);
+
+    //handle image resizing/cropping
+    if((substr($MIME, 0, 5) == 'image') && $WIDTH) {
+        if($HEIGHT) {
+            $data['file'] = $FILE = media_crop_image($data['file'], $EXT, $WIDTH, $HEIGHT);
+        } else {
+            $data['file'] = $FILE = media_resize_image($data['file'], $EXT, $WIDTH, $HEIGHT);
+        }
     }
-  }
-  $evt->advise_after();
-  unset($evt);
-
-  //handle image resizing/cropping
-  if((substr($MIME,0,5) == 'image') && $WIDTH){
-    if($HEIGHT){
-        $data['file'] = $FILE = media_crop_image($data['file'],$EXT,$WIDTH,$HEIGHT);
-    }else{
-        $data['file'] = $FILE  = media_resize_image($data['file'],$EXT,$WIDTH,$HEIGHT);
+
+    // finally send the file to the client
+    $evt = new Doku_Event('MEDIA_SENDFILE', $data);
+    if($evt->advise_before()) {
+        sendFile($data['file'], $data['mime'], $data['download'], $data['cache']);
     }
-  }
+    // Do something after the download finished.
+    $evt->advise_after();
 
-  // finally send the file to the client
-  $evt = new Doku_Event('MEDIA_SENDFILE', $data);
-  if ($evt->advise_before()) {
-    sendFile($data['file'],$data['mime'],$data['download'],$data['cache']);
-  }
-  // Do something after the download finished.
-  $evt->advise_after();
+}// END DO main
 
 /* ------------------------------------------------------------------------ */
 
@@ -93,51 +96,50 @@
  * @author Andreas Gohr <andi@splitbrain.org>
  * @author Ben Coburn <btcoburn@silicodon.net>
  */
-function sendFile($file,$mime,$dl,$cache){
-  global $conf;
-  $fmtime = @filemtime($file);
-  // send headers
-  header("Content-Type: $mime");
-  // smart http caching headers
-  if ($cache==-1) {
-    // cache
-    // cachetime or one hour
-    header('Expires: '.gmdate("D, d M Y H:i:s", time()+max($conf['cachetime'], 3600)).' GMT');
-    header('Cache-Control: public, proxy-revalidate, no-transform, max-age='.max($conf['cachetime'], 3600));
-    header('Pragma: public');
-  } else if ($cache>0) {
-    // recache
-    // remaining cachetime + 10 seconds so the newly recached media is used
-    header('Expires: '.gmdate("D, d M Y H:i:s", $fmtime+$conf['cachetime']+10).' GMT');
-    header('Cache-Control: public, proxy-revalidate, no-transform, max-age='.max($fmtime-time()+$conf['cachetime']+10, 0));
-    header('Pragma: public');
-  } else if ($cache==0) {
-    // nocache
-    header('Cache-Control: must-revalidate, no-transform, post-check=0, pre-check=0');
-    header('Pragma: public');
-  }
-  //send important headers first, script stops here if '304 Not Modified' response
-  http_conditionalRequest($fmtime);
-
-
-  //download or display?
-  if($dl){
-    header('Content-Disposition: attachment; filename="'.utf8_basename($file).'";');
-  }else{
-    header('Content-Disposition: inline; filename="'.utf8_basename($file).'";');
-  }
-
-  //use x-sendfile header to pass the delivery to compatible webservers
-  if (http_sendfile($file)) exit;
-
-  // send file contents
-  $fp = @fopen($file,"rb");
-  if($fp){
-    http_rangeRequest($fp,filesize($file),$mime);
-  }else{
-    header("HTTP/1.0 500 Internal Server Error");
-    print "Could not read $file - bad permissions?";
-  }
+function sendFile($file, $mime, $dl, $cache) {
+    global $conf;
+    $fmtime = @filemtime($file);
+    // send headers
+    header("Content-Type: $mime");
+    // smart http caching headers
+    if($cache == -1) {
+        // cache
+        // cachetime or one hour
+        header('Expires: '.gmdate("D, d M Y H:i:s", time() + max($conf['cachetime'], 3600)).' GMT');
+        header('Cache-Control: public, proxy-revalidate, no-transform, max-age='.max($conf['cachetime'], 3600));
+        header('Pragma: public');
+    } else if($cache > 0) {
+        // recache
+        // remaining cachetime + 10 seconds so the newly recached media is used
+        header('Expires: '.gmdate("D, d M Y H:i:s", $fmtime + $conf['cachetime'] + 10).' GMT');
+        header('Cache-Control: public, proxy-revalidate, no-transform, max-age='.max($fmtime - time() + $conf['cachetime'] + 10, 0));
+        header('Pragma: public');
+    } else if($cache == 0) {
+        // nocache
+        header('Cache-Control: must-revalidate, no-transform, post-check=0, pre-check=0');
+        header('Pragma: public');
+    }
+    //send important headers first, script stops here if '304 Not Modified' response
+    http_conditionalRequest($fmtime);
+
+    //download or display?
+    if($dl) {
+        header('Content-Disposition: attachment; filename="'.utf8_basename($file).'";');
+    } else {
+        header('Content-Disposition: inline; filename="'.utf8_basename($file).'";');
+    }
+
+    //use x-sendfile header to pass the delivery to compatible webservers
+    if(http_sendfile($file)) exit;
+
+    // send file contents
+    $fp = @fopen($file, "rb");
+    if($fp) {
+        http_rangeRequest($fp, filesize($file), $mime);
+    } else {
+        http_status(500);
+        print "Could not read $file - bad permissions?";
+    }
 }
 
 /**
@@ -148,43 +150,43 @@ function sendFile($file,$mime,$dl,$cache){
  *
  * @author Gerry Weissbach <gerry.w@gammaproduction.de>
  * @param $media reference to the media id
- * @param $file reference to the file variable
+ * @param $file  reference to the file variable
  * @returns array(STATUS, STATUSMESSAGE)
  */
-function checkFileStatus(&$media, &$file, $rev='') {
-  global $MIME, $EXT, $CACHE, $INPUT;
-
-  //media to local file
-  if(preg_match('#^(https?)://#i',$media)){
-    //check hash
-    if(substr(md5(auth_cookiesalt().$media),0,6) !== $INPUT->str('hash')){
-      return array( 412, 'Precondition Failed');
-    }
-    //handle external images
-    if(strncmp($MIME,'image/',6) == 0) $file = media_get_from_URL($media,$EXT,$CACHE);
-    if(!$file){
-      //download failed - redirect to original URL
-      return array( 302, $media );
-    }
-  }else{
-    $media = cleanID($media);
-    if(empty($media)){
-      return array( 400, 'Bad request' );
+function checkFileStatus(&$media, &$file, $rev = '') {
+    global $MIME, $EXT, $CACHE, $INPUT;
+
+    //media to local file
+    if(preg_match('#^(https?)://#i', $media)) {
+        //check hash
+        if(substr(md5(auth_cookiesalt().$media), 0, 6) !== $INPUT->str('hash')) {
+            return array(412, 'Precondition Failed');
+        }
+        //handle external images
+        if(strncmp($MIME, 'image/', 6) == 0) $file = media_get_from_URL($media, $EXT, $CACHE);
+        if(!$file) {
+            //download failed - redirect to original URL
+            return array(302, $media);
+        }
+    } else {
+        $media = cleanID($media);
+        if(empty($media)) {
+            return array(400, 'Bad request');
+        }
+
+        //check permissions (namespace only)
+        if(auth_quickaclcheck(getNS($media).':X') < AUTH_READ) {
+            return array(403, 'Forbidden');
+        }
+        $file = mediaFN($media, $rev);
     }
 
-    //check permissions (namespace only)
-    if(auth_quickaclcheck(getNS($media).':X') < AUTH_READ){
-      return array( 403, 'Forbidden' );
+    //check file existance
+    if(!@file_exists($file)) {
+        return array(404, 'Not Found');
     }
-    $file  = mediaFN($media, $rev);
-  }
-
-  //check file existance
-  if(!@file_exists($file)){
-      return array( 404, 'Not Found' );
-  }
 
-  return array(200, null);
+    return array(200, null);
 }
 
 /**
@@ -194,12 +196,12 @@ function checkFileStatus(&$media, &$file, $rev='') {
  *
  * @author  Andreas Gohr <andi@splitbrain.org>
  */
-function calc_cache($cache){
-  global $conf;
+function calc_cache($cache) {
+    global $conf;
 
-  if(strtolower($cache) == 'nocache') return 0; //never cache
-  if(strtolower($cache) == 'recache') return $conf['cachetime']; //use standard cache
-  return -1; //cache endless
+    if(strtolower($cache) == 'nocache') return 0; //never cache
+    if(strtolower($cache) == 'recache') return $conf['cachetime']; //use standard cache
+    return -1; //cache endless
 }
 
 //Setup VIM: ex: et ts=2 :
diff --git a/lib/exe/js.php b/lib/exe/js.php
index 41d3e735c9a9dbe801d75e282546fbcec707e61e..4ff48133e7d62d1a9d24b23abb778c2877d88d02 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -62,7 +62,7 @@ function js_out(){
                 DOKU_INC.'lib/scripts/locktimer.js',
                 DOKU_INC.'lib/scripts/linkwiz.js',
                 DOKU_INC.'lib/scripts/media.js',
-                DOKU_INC.'lib/scripts/compatibility.js',
+# deprecated                DOKU_INC.'lib/scripts/compatibility.js',
 # disabled for FS#1958                DOKU_INC.'lib/scripts/hotkeys.js',
                 DOKU_INC.'lib/scripts/behaviour.js',
                 DOKU_INC.'lib/scripts/page.js',
diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php
index 04dd178cc82a81ac2c242bf102d53d34f0896424..53d438321288c8d1d1bb7d5e0e8fc5c882ee1e8d 100644
--- a/lib/exe/mediamanager.php
+++ b/lib/exe/mediamanager.php
@@ -36,19 +36,16 @@
 
     // do not display the manager if user does not have read access
     if($AUTH < AUTH_READ && !$fullscreen) {
-        header('HTTP/1.0 403 Forbidden');
+        http_status(403);
         die($lang['accessdenied']);
     }
 
-    // create the given namespace (just for beautification)
-    if($AUTH >= AUTH_UPLOAD) { io_createNamespace("$NS:xxx", 'media'); }
-
     // handle flash upload
     if(isset($_FILES['Filedata'])){
         $_FILES['upload'] =& $_FILES['Filedata'];
         $JUMPTO = media_upload($NS,$AUTH);
         if($JUMPTO == false){
-            header("HTTP/1.0 400 Bad Request");
+            http_status(400);
             echo 'Upload failed';
         }
         echo 'ok';
diff --git a/lib/exe/xmlrpc.php b/lib/exe/xmlrpc.php
index 5e6c197d03769b15723733b133251dffe6c71379..c09daa17c00d76c8e65a4f5c515e30167f48934d 100644
--- a/lib/exe/xmlrpc.php
+++ b/lib/exe/xmlrpc.php
@@ -29,10 +29,10 @@ class dokuwiki_xmlrpc_server extends IXR_Server {
             return $result;
         } catch (RemoteAccessDeniedException $e) {
             if (!isset($_SERVER['REMOTE_USER'])) {
-                header('HTTP/1.1 401 Unauthorized');
+                http_status(401);
                 return new IXR_Error(-32603, "server error. not authorized to call method $methodname");
             } else {
-                header('HTTP/1.1 403 Forbidden');
+                http_status(403);
                 return new IXR_Error(-32604, "server error. forbidden to call the method $methodname");
             }
         } catch (RemoteException $e) {
diff --git a/lib/plugins/acl/script.js b/lib/plugins/acl/script.js
index 0ba91cdc9e8af0d708a10ed7b2a8948478bc73d7..c3763dc8d39f11dc1744c7493e871de642d67190 100644
--- a/lib/plugins/acl/script.js
+++ b/lib/plugins/acl/script.js
@@ -117,11 +117,3 @@ var dw_acl = {
 };
 
 jQuery(dw_acl.init);
-
-var acl = {
-    init: DEPRECATED_WRAP(dw_acl.init, dw_acl),
-    userselhandler: DEPRECATED_WRAP(dw_acl.userselhandler, dw_acl),
-    loadinfo: DEPRECATED_WRAP(dw_acl.loadinfo, dw_acl),
-    parseatt: DEPRECATED_WRAP(dw_acl.parseatt, dw_acl),
-    treehandler: DEPRECATED_WRAP(dw_acl.treehandler, dw_acl)
-};
diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php
index 42dbf1859f56cc949bd30abce2ef8fd806aca37a..c14a04dfba8ee14c00407fac4d2bc93107f0868d 100644
--- a/lib/plugins/auth.php
+++ b/lib/plugins/auth.php
@@ -434,6 +434,7 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin {
         if(isset($conf['auth'][$plugin])) $oldconf = (array) $conf['auth'][$plugin];
 
         $conf['plugin'][$plugin] = array_merge($default, $oldconf, $conf['plugin'][$plugin]);
+	$this->conf =& $conf['plugin'][$plugin];
         $this->configloaded = true;
     }
 }
diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index a3cfae9f8e4d0686708d335240752b752d2e0392..4a84d6dc8e5e616e01146ae091da0c15c0c292b9 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -84,7 +84,7 @@ if (!class_exists('configuration')) {
               array_shift($param);
             } else {
               $class = 'setting_undefined';
-              $param = NULL;
+              $param = null;
             }
 
             if (!in_array($class, $no_default_check) && !isset($default[$key])) {
@@ -358,13 +358,13 @@ if (!class_exists('setting')) {
   class setting {
 
     var $_key = '';
-    var $_default = NULL;
-    var $_local = NULL;
-    var $_protected = NULL;
+    var $_default = null;
+    var $_local = null;
+    var $_protected = null;
 
     var $_pattern = '';
     var $_error = false;            // only used by those classes which error check
-    var $_input = NULL;             // only used by those classes which error check
+    var $_input = null;             // only used by those classes which error check
 
     var $_cautionList = array(
         'basedir' => 'danger', 'baseurl' => 'danger', 'savedir' => 'danger', 'cookiedir' => 'danger', 'useacl' => 'danger', 'authtype' => 'danger', 'superuser' => 'danger', 'userewrite' => 'danger',
@@ -372,7 +372,7 @@ if (!class_exists('setting')) {
         'allowdebug' => 'security', 'htmlok' => 'security', 'phpok' => 'security', 'iexssprotect' => 'security', 'xmlrpc' => 'security', 'fullpath' => 'security'
     );
 
-    function setting($key, $params=NULL) {
+    function setting($key, $params=null) {
         $this->_key = $key;
 
         if (is_array($params)) {
@@ -661,6 +661,7 @@ if (!class_exists('setting_email')) {
   class setting_email extends setting_string {
     var $_pattern = SETTING_EMAIL_PATTERN;       // no longer required, retained for backward compatibility - FIXME, may not be necessary
     var $_multiple = false;
+    var $_placeholders = false;
 
     /**
      *  update setting with user provided value $input
@@ -674,15 +675,36 @@ if (!class_exists('setting_email')) {
 
         $value = is_null($this->_local) ? $this->_default : $this->_local;
         if ($value == $input) return false;
+        if($input === ''){
+            $this->_local = $input;
+            return true;
+        }
+        $mail = $input;
+
+        if($this->_placeholders){
+            // replace variables with pseudo values
+            $mail = str_replace('@USER@','joe',$mail);
+            $mail = str_replace('@NAME@','Joe Schmoe',$mail);
+            $mail = str_replace('@MAIL@','joe@example.com',$mail);
+        }
 
+        // multiple mail addresses?
         if ($this->_multiple) {
-            $mails = array_filter(array_map('trim', explode(',', $input)));
+            $mails = array_filter(array_map('trim', explode(',', $mail)));
         } else {
-            $mails = array($input);
+            $mails = array($mail);
         }
 
+        // check them all
         foreach ($mails as $mail) {
-            if (!mail_isvalid($mail)) {
+            // only check the address part
+            if(preg_match('#(.*?)<(.*?)>#', $mail, $matches)){
+                $addr = $matches[2];
+            }else{
+                $addr = $mail;
+            }
+
+            if (!mail_isvalid($addr)) {
               $this->_error = true;
               $this->_input = $input;
               return false;
@@ -695,46 +717,15 @@ if (!class_exists('setting_email')) {
   }
 }
 
+/**
+ * @deprecated 2013-02-16
+ */
 if (!class_exists('setting_richemail')) {
   class setting_richemail extends setting_email {
-
-    /**
-     *  update setting with user provided value $input
-     *  if value fails error check, save it
-     *
-     *  @return boolean true if changed, false otherwise (incl. on error)
-     */
-    function update($input) {
-        if (is_null($input)) return false;
-        if ($this->is_protected()) return false;
-
-        $value = is_null($this->_local) ? $this->_default : $this->_local;
-        if ($value == $input) return false;
-
-        // replace variables with pseudo values
-        $test = $input;
-        $test = str_replace('@USER@','joe',$test);
-        $test = str_replace('@NAME@','Joe Schmoe',$test);
-        $test = str_replace('@MAIL@','joe@example.com',$test);
-
-        // now only check the address part
-        if(preg_match('#(.*?)<(.*?)>#',$test,$matches)){
-          $text = trim($matches[1]);
-          $addr = $matches[2];
-        }else{
-          $addr = $test;
-        }
-
-        if ($test !== '' && !mail_isvalid($addr)) {
-          $this->_error = true;
-          $this->_input = $input;
-          return false;
-        }
-
-        $this->_local = $input;
-        return true;
-    }
-
+      function update($input) {
+          $this->_placeholders = true;
+          return parent::update($input);
+      }
   }
 }
 
diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php
index 585015085fb1d721e7996d4491e1ac0c86fdbcf5..bdbc4311f407a541f80167c8d5d045cdbc005de5 100644
--- a/lib/plugins/config/settings/config.metadata.php
+++ b/lib/plugins/config/settings/config.metadata.php
@@ -20,9 +20,7 @@
  *   'numericopt'   - like above, but accepts empty values
  *   'onoff'        - checkbox input, setting output  0|1
  *   'multichoice'  - select input (single choice), setting output with quotes, required _choices parameter
- *   'email'        - text input, input must conform to email address format, setting output in quotes
- *   'richemail'    - text input, input must conform to email address format but accepts variables and
- *                    emails with a real name prepended (when email address is given in <>)
+ *   'email'        - text input, input must conform to email address format
  *   'password'     - password input, minimal input validation, setting output text in quotes, maybe encoded
  *                    according to the _code parameter
  *   'dirchoice'    - as multichoice, selection choices based on folders found at location specified in _dir
@@ -129,7 +127,7 @@ $meta['_authentication'] = array('fieldset');
 $meta['useacl']      = array('onoff');
 $meta['autopasswd']  = array('onoff');
 $meta['authtype']    = array('authtype');
-$meta['passcrypt']   = array('multichoice','_choices' => array('smd5','md5','apr1','sha1','ssha','lsmd5','crypt','mysql','my411','kmd5','pmd5','hmd5','mediawiki','bcrypt','sha512'));
+$meta['passcrypt']   = array('multichoice','_choices' => array('smd5','md5','apr1','sha1','ssha','lsmd5','crypt','mysql','my411','kmd5','pmd5','hmd5','mediawiki','bcrypt','djangomd5','djangosha1','sha512'));
 $meta['defaultgroup']= array('string');
 $meta['superuser']   = array('string');
 $meta['manager']     = array('string');
@@ -177,8 +175,8 @@ $meta['_notifications'] = array('fieldset');
 $meta['subscribers']    = array('onoff');
 $meta['subscribe_time'] = array('numeric');
 $meta['notify']         = array('email', '_multiple' => true);
-$meta['registernotify'] = array('email');
-$meta['mailfrom']       = array('richemail');
+$meta['registernotify'] = array('email', '_multiple' => true);
+$meta['mailfrom']       = array('email', '_placeholders' => true);
 $meta['mailprefix']     = array('string');
 $meta['htmlmail']       = array('onoff');
 
diff --git a/lib/plugins/config/style.css b/lib/plugins/config/style.css
index 3973289372bde23e695f4b497dd29405e636536f..054021ed8739a84bb07e47f5d3d620e191ac960c 100644
--- a/lib/plugins/config/style.css
+++ b/lib/plugins/config/style.css
@@ -154,15 +154,6 @@
 }
 
 
-/* IE6 correction */
-* html #config__manager .selection label {
-  padding-top: 2px;
-}
-
-#config__manager .selection input.checkbox {
-  padding-left: 0.7em;
-}
-
 #config__manager .other {
   clear: both;
   padding-top: 0.5em;
diff --git a/lib/plugins/info/plugin.info.txt b/lib/plugins/info/plugin.info.txt
index 5c7d583c0a2d4f9d745156181929c9cf3eae6772..0537436395c7137638391967246b58fb27cdc7e0 100644
--- a/lib/plugins/info/plugin.info.txt
+++ b/lib/plugins/info/plugin.info.txt
@@ -1,7 +1,7 @@
 base info
 author Andreas Gohr
 email andi@splitbrain.org
-date 2012-02-04
+date 2013-02-16
 name Info Plugin
 desc Displays information about various DokuWiki internals
 url http://dokuwiki.org/plugin:info
diff --git a/lib/plugins/info/syntax.php b/lib/plugins/info/syntax.php
index d813aa23a7789343733f434f222bf8d1118ebc3f..97b28076bce24c4554f14323fcd7030b7bdcf083 100644
--- a/lib/plugins/info/syntax.php
+++ b/lib/plugins/info/syntax.php
@@ -60,9 +60,6 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
         if($format == 'xhtml'){
             //handle various info stuff
             switch ($data[0]){
-                case 'version':
-                    $renderer->doc .= getVersion();
-                    break;
                 case 'syntaxmodes':
                     $renderer->doc .= $this->_syntaxmodes_xhtml();
                     break;
diff --git a/lib/plugins/plugin/lang/ar/lang.php b/lib/plugins/plugin/lang/ar/lang.php
index 8327e5ce3d81f9d6683cd050763ebb287b6f7059..a1a778131490483cab1b7953241924a23972b37b 100644
--- a/lib/plugins/plugin/lang/ar/lang.php
+++ b/lib/plugins/plugin/lang/ar/lang.php
@@ -50,4 +50,4 @@ $lang['enabled']               = 'الاضافة %s فُعلت.	';
 $lang['notenabled']            = 'تعذر تفعيل الاضافة %s، تحقق من اذونات الملف.';
 $lang['disabled']              = 'عُطلت الإضافة %s.';
 $lang['notdisabled']           = 'تعذر تعطيل الإضافة %s، تحقق من اذونات الملف.';
-$lang['packageinstalled']      = 'حزمة الإضافة (%d plugin(s): %Xs) ثبتت بنجاج.';
+$lang['packageinstalled']      = 'حزمة الإضافة (%d plugin(s): %s) ثبتت بنجاج.';
diff --git a/lib/plugins/plugin/lang/hi/lang.php b/lib/plugins/plugin/lang/hi/lang.php
index ab29c655007eacc3adada2f664eb651834636923..67b177256df0dc03650f14d92199c383d15a5da5 100644
--- a/lib/plugins/plugin/lang/hi/lang.php
+++ b/lib/plugins/plugin/lang/hi/lang.php
@@ -6,7 +6,6 @@
  * @author yndesai@gmail.com
  */
 $lang['unknown']               = 'अज्ञात';
-$lang['deleted']               = 'मिटाया हुआ';
 $lang['date']                  = 'दिनांक:';
 $lang['author']                = 'लेखक:';
 $lang['error']                 = 'अज्ञात त्रुटि हुइ';
diff --git a/lib/plugins/plugin/lang/pl/lang.php b/lib/plugins/plugin/lang/pl/lang.php
index 1d3bbbc0316fdacf1e249f4930bf29a84f19608f..faaa69630d1e8776e75c56b76aab641ab066df69 100644
--- a/lib/plugins/plugin/lang/pl/lang.php
+++ b/lib/plugins/plugin/lang/pl/lang.php
@@ -60,4 +60,4 @@ $lang['enabled']               = 'Wtyczka %s włączona.';
 $lang['notenabled']            = 'Nie udało się uruchomić wtyczki %s, sprawdź uprawnienia dostępu do plików.';
 $lang['disabled']              = 'Wtyczka %s wyłączona.';
 $lang['notdisabled']           = 'Nie udało się wyłączyć wtyczki %s, sprawdź uprawnienia dostępu do plików.';
-$lang['packageinstalled']      = 'Pakiet wtyczek (%d wtyczki:% s) zainstalowany pomyślnie.';
+$lang['packageinstalled']      = 'Pakiet wtyczek (%d wtyczki: %s) zainstalowany pomyślnie.';
diff --git a/lib/plugins/plugin/lang/zh-tw/lang.php b/lib/plugins/plugin/lang/zh-tw/lang.php
index 7b38a02c8929c79d7103eb30ea19a3a3ac94e3be..56149e79ede8250fc99cc2cc576b6d1afa46bf75 100644
--- a/lib/plugins/plugin/lang/zh-tw/lang.php
+++ b/lib/plugins/plugin/lang/zh-tw/lang.php
@@ -56,4 +56,4 @@ $lang['enabled']               = '附加元件 %s 已啟用。';
 $lang['notenabled']            = '附加元件 %s 無法啟用,請檢查檔案權限。';
 $lang['disabled']              = '附加元件 %s 已停用。';
 $lang['notdisabled']           = '附加元件 %s 無法停用,請檢查檔案權限。';
-$lang['packageinstalled']      = '附加元件 (%d 附加元件%s: %s) 已安裝好。';
+$lang['packageinstalled']      = '附加元件 (%d 附加元件: %s) 已安裝好。';
diff --git a/lib/plugins/usermanager/lang/ca-valencia/lang.php b/lib/plugins/usermanager/lang/ca-valencia/lang.php
index 5b0c628ed34402cca33ae9ae5d9b22dc6f26550e..c39c2f9b3345c8f7e6d7d380e5a8a019e9fd81e6 100644
--- a/lib/plugins/usermanager/lang/ca-valencia/lang.php
+++ b/lib/plugins/usermanager/lang/ca-valencia/lang.php
@@ -33,7 +33,7 @@ $lang['delete_ok']             = '%d usuaris borrats';
 $lang['delete_fail']           = 'Erro borrant %d.';
 $lang['update_ok']             = 'Usuari actualisat correctament';
 $lang['update_fail']           = 'Erro actualisant usuari';
-$lang['update_exists']         = 'Erro canviant el nom de l\'usuari, el nom d\'usuari que ha donat ya existix (els demés canvis s\'aplicaran).';
+$lang['update_exists']         = 'Erro canviant el nom de l\'usuari (%s), el nom d\'usuari que ha donat ya existix (els demés canvis s\'aplicaran).';
 $lang['start']                 = 'primera';
 $lang['prev']                  = 'anterior';
 $lang['next']                  = 'següent';
diff --git a/lib/scripts/linkwiz.js b/lib/scripts/linkwiz.js
index bb04828b4bd57031626019940bbf875b38e283fb..c55650d6856b8e2416cfc17ad4ad792b70fddc5e 100644
--- a/lib/scripts/linkwiz.js
+++ b/lib/scripts/linkwiz.js
@@ -50,6 +50,9 @@ var dw_linkwiz = {
         jQuery(dw_linkwiz.result).css('position', 'relative');
 
         dw_linkwiz.$entry = jQuery('#link__wiz_entry');
+        if(JSINFO.namespace){
+            dw_linkwiz.$entry.val(JSINFO.namespace+':');
+        }
 
         // attach event handlers
         jQuery('#link__wiz .ui-dialog-titlebar-close').click(dw_linkwiz.hide);
@@ -102,7 +105,7 @@ var dw_linkwiz = {
     /**
      * Get one of the results by index
      *
-     * @param int result div to return
+     * @param   num int result div to return
      * @returns DOMObject or null
      */
     getResult: function(num){
@@ -113,7 +116,7 @@ var dw_linkwiz = {
     /**
      * Get one of the results by index
      *
-     * @param int result div to return
+     * @param   num int result div to return
      * @returns jQuery object
      */
     $getResult: function(num) {
diff --git a/lib/scripts/qsearch.js b/lib/scripts/qsearch.js
index 0c3609adaf3a395ffac4ab322d0e54f5ce0f183e..e5cc73b494cb6142fc9f2cce8e6881874d22e268 100644
--- a/lib/scripts/qsearch.js
+++ b/lib/scripts/qsearch.js
@@ -12,6 +12,7 @@ var dw_qsearch = {
     $inObj: null,
     $outObj: null,
     timer: null,
+    curRequest: null,
 
     /**
      * initialize the quick search
@@ -35,12 +36,16 @@ var dw_qsearch = {
 
         // attach eventhandler to search field
         do_qsearch = function () {
+            // abort any previous request
+            if (dw_qsearch.curRequest != null) {
+                dw_qsearch.curRequest.abort();
+            }
             var value = dw_qsearch.$inObj.val();
             if (value === '') {
                 dw_qsearch.clear_results();
                 return;
             }
-            jQuery.post(
+            dw_qsearch.curRequest = jQuery.post(
                 DOKU_BASE + 'lib/exe/ajax.php',
                 {
                     call: 'qsearch',
@@ -84,6 +89,8 @@ var dw_qsearch = {
     onCompletion: function(data) {
         var max, $links, too_big;
 
+        dw_qsearch.curRequest = null;
+
         if (data === '') {
             dw_qsearch.clear_results();
             return;
diff --git a/lib/tpl/dokuwiki/css/_edit.css b/lib/tpl/dokuwiki/css/_edit.css
index 0c66c75b7c45302bf6b59c536579049add3a39dc..92ce621269070ffde1334d777c1101aeaa4c8b06 100644
--- a/lib/tpl/dokuwiki/css/_edit.css
+++ b/lib/tpl/dokuwiki/css/_edit.css
@@ -13,7 +13,6 @@
 
 .dokuwiki div.toolbar {
     margin-bottom: .5em;
-    overflow: hidden;
 }
 #draft__status {
     float: right;
diff --git a/lib/tpl/dokuwiki/script.js b/lib/tpl/dokuwiki/script.js
index 3ed8dbabec1a1fdf552ba8a3a9bbdc0904993a60..375500f7899398b0fd6ca3476c43e44d271bcc13 100644
--- a/lib/tpl/dokuwiki/script.js
+++ b/lib/tpl/dokuwiki/script.js
@@ -1,11 +1,10 @@
 /**
  *  We handle several device classes based on browser width.
- *  see http://twitter.github.com/bootstrap/scaffolding.html#responsive
  *
- *  - desktop:   980+
- *  - mobile:    < 980
- *    - tablet   481 - 979   (ostensibly for tablets in portrait mode)
- *    - phone    <= 480
+ *  - desktop:   > __tablet_width__ (as set in style.ini)
+ *  - mobile:
+ *    - tablet   <= __tablet_width__
+ *    - phone    <= __phone_width__
  */
 var device_class = ''; // not yet known
 var device_classes = 'desktop mobile tablet phone';