diff --git a/_test/cases/inc/parser/parser_eol.test.php b/_test/cases/inc/parser/parser_eol.test.php
index 8d3a812b2529c8e706e073ec55ac283023fe467b..692882c6c6a95f2e8c2d9600b42ff01a938b9190 100644
--- a/_test/cases/inc/parser/parser_eol.test.php
+++ b/_test/cases/inc/parser/parser_eol.test.php
@@ -13,7 +13,7 @@ class TestOfDoku_Parser_Eol extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("Foo".DOKU_PARSER_EOL."Bar".DOKU_PARSER_EOL)),
+            array('cdata',array("Foo".DOKU_PARSER_EOL."Bar")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -29,7 +29,7 @@ class TestOfDoku_Parser_Eol extends TestOfDoku_Parser {
             array('cdata',array("Foo")),
             array('p_close',array()),
             array('p_open',array()),
-            array('cdata',array("bar".DOKU_PARSER_EOL."Foo".DOKU_PARSER_EOL)),
+            array('cdata',array("bar".DOKU_PARSER_EOL."Foo")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -42,7 +42,7 @@ class TestOfDoku_Parser_Eol extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("Foo".DOKU_PARSER_EOL."Bar".DOKU_PARSER_EOL)),
+            array('cdata',array("Foo".DOKU_PARSER_EOL."Bar")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -57,7 +57,7 @@ class TestOfDoku_Parser_Eol extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\nFoo")),
             array('linebreak',array()),
-            array('cdata',array("Bar\n")),
+            array('cdata',array("Bar")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -76,7 +76,7 @@ class TestOfDoku_Parser_Eol extends TestOfDoku_Parser {
             array('linebreak',array()),
             array('p_close',array()),
             array('p_open',array()),
-            array('cdata',array("Bar".DOKU_PARSER_EOL)),
+            array('cdata',array("Bar")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -89,7 +89,7 @@ class TestOfDoku_Parser_Eol extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\n".'Foo\\\\Bar'."\n")),
+            array('cdata',array("\n".'Foo\\\\Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
diff --git a/_test/cases/inc/parser/parser_footnote.test.php b/_test/cases/inc/parser/parser_footnote.test.php
index a1da2ab06b34841a5cfc87e26c355c0742baed00..e3571d8e7733a5fe663522c80e3171785119e5b2 100644
--- a/_test/cases/inc/parser/parser_footnote.test.php
+++ b/_test/cases/inc/parser/parser_footnote.test.php
@@ -23,7 +23,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
               array('cdata',array(' testing ')),
               array('footnote_close',array()),
             ))),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -35,7 +35,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nFoo (( testing\n Bar\n")),
+            array('cdata',array("\nFoo (( testing\n Bar")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -54,7 +54,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
               array('cdata',array(" testing\ntesting ")),
               array('footnote_close',array()),
             ))),
-            array('cdata',array(' Bar'.DOKU_PARSER_EOL)),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -72,7 +72,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
               array('cdata',array(' x((y')),
               array('footnote_close',array()),
             ))),
-            array('cdata',array('z )) Bar'."\n")),
+            array('cdata',array('z )) Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -91,7 +91,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
               array('cdata',array(" test\ning ")),
               array('footnote_close',array()),
             ))),
-            array('cdata',array('Y'.DOKU_PARSER_EOL.' Bar'.DOKU_PARSER_EOL)),
+            array('cdata',array('Y'.DOKU_PARSER_EOL.' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -114,7 +114,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
               array('cdata',array(' ')),
               array('footnote_close',array()),
             ))),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -135,7 +135,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
               array('cdata',array("\n ")),
               array('footnote_close',array()),
             ))),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -156,7 +156,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
               array('cdata',array(' ')),
               array('footnote_close',array()),
             ))),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -177,7 +177,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
               array('cdata',array(' ')),
               array('footnote_close',array()),
             ))),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -199,7 +199,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
               array('cdata',array(' ')),
               array('footnote_close',array()),
             ))),
-            array('cdata',array(' Bar'.DOKU_PARSER_EOL)),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -221,7 +221,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
               array('cdata',array(' ')),
               array('footnote_close',array()),
             ))),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -240,7 +240,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
               array('cdata',array(" \n====Test====\n ")),
               array('footnote_close',array()),
             ))),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -286,7 +286,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
               array('cdata',array(' ')),
               array('footnote_close',array()),
             ))),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -328,7 +328,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
               array('cdata',array(' ')),
               array('footnote_close',array()),
             ))),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -356,7 +356,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
               array('cdata',array(' ')),
               array('footnote_close',array()),
             ))),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -381,7 +381,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
             ))),
             array('cdata',array(" ")),
             array('strong_close',array()),
-            array('cdata',array(" c ))\n")),
+            array('cdata',array(" c ))")),
             array('p_close',array()),
             array('document_end',array()),
         );
diff --git a/_test/cases/inc/parser/parser_formatting.test.php b/_test/cases/inc/parser/parser_formatting.test.php
index f2eda81b87b300cdcab3cba3746163c655acfcf4..69c57dfb595a89d55a7782dc41857ae5df35c21f 100644
--- a/_test/cases/inc/parser/parser_formatting.test.php
+++ b/_test/cases/inc/parser/parser_formatting.test.php
@@ -17,7 +17,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('strong_open',array()),
             array('cdata',array('bar')),
             array('strong_close',array()),
-            array('cdata',array(' def'."\n")),
+            array('cdata',array(' def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -30,7 +30,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc **bar def\n")),
+            array('cdata',array("\nabc **bar def")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -47,7 +47,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('emphasis_open',array()),
             array('cdata',array('bar')),
             array('emphasis_close',array()),
-            array('cdata',array(' def'."\n")),
+            array('cdata',array(' def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -64,7 +64,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('emphasis_open',array()),
             array('cdata',array('Тест: ')),
             array('emphasis_close',array()),
-            array('cdata',array(' def'."\n")),
+            array('cdata',array(' def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -81,7 +81,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('emphasis_open',array()),
             array('cdata',array('b')),
             array('emphasis_close',array()),
-            array('cdata',array(' def'."\n")),
+            array('cdata',array(' def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -98,7 +98,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('emphasis_open',array()),
             array('cdata',array('foo:')),
             array('emphasis_close',array()),
-            array('cdata',array(' bar// def'."\n")),
+            array('cdata',array(' bar// def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -118,7 +118,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('externallink',array('http://www.google.com', NULL)),
             array('cdata',array(' bar')),
             array('emphasis_close',array()),
-            array('cdata',array(' def'."\n")),
+            array('cdata',array(' def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -131,7 +131,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc //bar def\n")),
+            array('cdata',array("\nabc //bar def")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -148,7 +148,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('emphasis_open',array()),
             array('cdata',array('bar')),
             array('emphasis_close',array()),
-            array('cdata',array(' def'."\n")),
+            array('cdata',array(' def')),
                         array('p_close',array()),
             array('document_end',array()),
         );
@@ -161,7 +161,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc //http:// def\n")),
+            array('cdata',array("\nabc //http:// def")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -185,7 +185,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('emphasis_open',array()),
             array('cdata',array('text:')),
             array('emphasis_close',array()),
-            array('cdata',array(" another Blablabla Blablabla\n")),
+            array('cdata',array(" another Blablabla Blablabla")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -203,7 +203,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('emphasis_open',array()),
             array('cdata',array('Тест:')),
             array('emphasis_close',array()),
-            array('cdata',array("\n")),
+            array('cdata', array('')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -248,7 +248,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('underline_open',array()),
             array('cdata',array('bar')),
             array('underline_close',array()),
-            array('cdata',array(' def'."\n")),
+            array('cdata',array(' def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -261,7 +261,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc __bar def\n")),
+            array('cdata',array("\nabc __bar def")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -278,7 +278,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('monospace_open',array()),
             array('cdata',array('bar')),
             array('monospace_close',array()),
-            array('cdata',array(' def'."\n")),
+            array('cdata',array(' def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -291,7 +291,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc ''bar def\n")),
+            array('cdata',array("\nabc ''bar def")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -308,7 +308,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('subscript_open',array()),
             array('cdata',array('bar')),
             array('subscript_close',array()),
-            array('cdata',array(' def'."\n")),
+            array('cdata',array(' def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -321,7 +321,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc <sub>bar def\n")),
+            array('cdata',array("\nabc <sub>bar def")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -338,7 +338,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('superscript_open',array()),
             array('cdata',array('bar')),
             array('superscript_close',array()),
-            array('cdata',array(' def'."\n")),
+            array('cdata',array(' def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -351,7 +351,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc <sup>bar def\n")),
+            array('cdata',array("\nabc <sup>bar def")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -368,7 +368,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('deleted_open',array()),
             array('cdata',array('bar')),
             array('deleted_close',array()),
-            array('cdata',array(' def'."\n")),
+            array('cdata',array(' def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -381,7 +381,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc <del>bar def\n")),
+            array('cdata',array("\nabc <del>bar def")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -403,7 +403,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('emphasis_close',array()),
             array('cdata',array('c')),
             array('strong_close',array()),
-            array('cdata',array(' def'."\n")),
+            array('cdata',array(' def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -424,7 +424,7 @@ class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
             array('strong_open',array()),
             array('cdata',array('c')),
             array('strong_close',array()),
-            array('cdata',array(' def'."\n")),
+            array('cdata',array(' def')),
             array('p_close',array()),
             array('document_end',array()),
         );
diff --git a/_test/cases/inc/parser/parser_headers.test.php b/_test/cases/inc/parser/parser_headers.test.php
index e1c6783f528d23a45080e29b7ed79b93ac20135c..688bac2ebbf6c26e5c704049c8c66ce3283fdb38 100644
--- a/_test/cases/inc/parser/parser_headers.test.php
+++ b/_test/cases/inc/parser/parser_headers.test.php
@@ -13,12 +13,12 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc \n")),
+            array('cdata',array("\nabc ")),
             array('p_close',array()),
             array('header',array('Header',1,6)),
             array('section_open',array(1)),
             array('p_open',array()),
-            array('cdata',array("\n def\n")),
+            array('cdata',array("\n def")),
             array('p_close',array()),
             array('section_close',array()),
             array('document_end',array()),
@@ -32,12 +32,12 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc \n")),
+            array('cdata',array("\nabc ")),
             array('p_close',array()),
             array('header',array('Header',2,6)),
             array('section_open',array(2)),
             array('p_open',array()),
-            array('cdata',array("\n def\n")),
+            array('cdata',array("\n def")),
             array('p_close',array()),
             array('section_close',array()),
             array('document_end',array()),
@@ -51,12 +51,12 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc \n")),
+            array('cdata',array("\nabc ")),
             array('p_close',array()),
             array('header',array('Header',3,6)),
             array('section_open',array(3)),
             array('p_open',array()),
-            array('cdata',array("\n def\n")),
+            array('cdata',array("\n def")),
             array('p_close',array()),
             array('section_close',array()),
             array('document_end',array()),
@@ -70,12 +70,12 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc \n")),
+            array('cdata',array("\nabc ")),
             array('p_close',array()),
             array('header',array('Header',4,6)),
             array('section_open',array(4)),
             array('p_open',array()),
-            array('cdata',array("\n def\n")),
+            array('cdata',array("\n def")),
             array('p_close',array()),
             array('section_close',array()),
             array('document_end',array()),
@@ -89,12 +89,12 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc \n")),
+            array('cdata',array("\nabc ")),
             array('p_close',array()),
             array('header',array('Header',5,6)),
             array('section_open',array(5)),
             array('p_open',array()),
-            array('cdata',array("\n def\n")),
+            array('cdata',array("\n def")),
             array('p_close',array()),
             array('section_close',array()),
             array('document_end',array()),
@@ -108,12 +108,12 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc \n")),
+            array('cdata',array("\nabc ")),
             array('p_close',array()),
             array('header',array('Header',2,6)),
             array('section_open',array(2)),
             array('p_open',array()),
-            array('cdata',array("\n def\n")),
+            array('cdata',array("\n def")),
             array('p_close',array()),
             array('section_close',array()),
             array('document_end',array()),
@@ -127,12 +127,12 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc \n")),
+            array('cdata',array("\nabc ")),
             array('p_close',array()),
             array('header',array('Header',2,6)),
             array('section_open',array(2)),
             array('p_open',array()),
-            array('cdata',array("\n def\n")),
+            array('cdata',array("\n def")),
             array('p_close',array()),
             array('section_close',array()),
             array('document_end',array()),
@@ -146,12 +146,12 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc \n")),
+            array('cdata',array("\nabc ")),
             array('p_close',array()),
             array('header',array('Header',1,6)),
             array('section_open',array(1)),
             array('p_open',array()),
-            array('cdata',array("\n def\n")),
+            array('cdata',array("\n def")),
             array('p_close',array()),
             array('section_close',array()),
             array('document_end',array()),
@@ -165,7 +165,7 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc \n= Header =\n def\n")),
+            array('cdata',array("\nabc \n= Header =\n def")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -179,12 +179,12 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc \n")),
+            array('cdata',array("\nabc ")),
             array('p_close',array()),
             array('header',array('== Header ==',1,6)),
             array('section_open',array(1)),
             array('p_open',array()),
-            array('cdata',array("\n def\n")),
+            array('cdata',array("\n def")),
             array('p_close',array()),
             array('section_close',array()),
             array('document_end',array()),
@@ -198,12 +198,12 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc \n")),
+            array('cdata',array("\nabc ")),
             array('p_close',array()),
             array('header',array('====== Header ======',5,6)),
             array('section_open',array(5)),
             array('p_open',array()),
-            array('cdata',array("\n def\n")),
+            array('cdata',array("\n def")),
             array('p_close',array()),
             array('section_close',array()),
             array('document_end',array()),
@@ -217,12 +217,12 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc \n== ====== Header\n")),
+            array('cdata',array("\nabc \n== ====== Header")),
             array('p_close',array()),
             array('header',array('',1,23)),
             array('section_open',array(1)),
             array('p_open',array()),
-            array('cdata',array("\n def\n")),
+            array('cdata',array("\n def")),
             array('p_close',array()),
             array('section_close',array()),
             array('document_end',array()),
@@ -243,12 +243,12 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array('abc '.DOKU_PARSER_EOL)),
+            array('cdata',array('abc ')),
             array('p_close',array()),
             array('header',array('Header',1, 6)),
             array('section_open',array(1)),
             array('p_open',array()),
-            array('cdata',array(' def'.DOKU_PARSER_EOL)),
+            array('cdata',array(' def')),
             array('p_close',array()),
             array('section_close',array()),
             array('document_end',array()),
@@ -263,18 +263,18 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc \n")),
+            array('cdata',array("\nabc ")),
             array('p_close',array()),
             array('header',array('Header',1,6)),
             array('section_open',array(1)),
             array('p_open',array()),
-            array('cdata',array("\n def abc \n")),
+            array('cdata',array("\n def abc ")),
             array('p_close',array()),
             array('section_close',array()),
             array('header',array('Header2',2,39)),
             array('section_open',array(2)),
             array('p_open',array()),
-            array('cdata',array("\n def\n")),
+            array('cdata',array("\n def")),
             array('p_close',array()),
             array('section_close',array()),
             array('document_end',array())
diff --git a/_test/cases/inc/parser/parser_i18n.test.php b/_test/cases/inc/parser/parser_i18n.test.php
index f0cceb69e52aec3dde9596e886ec3247b5e6de52..27ec3c78bc66bdf0c50bad71dcec19c3856074c8 100644
--- a/_test/cases/inc/parser/parser_i18n.test.php
+++ b/_test/cases/inc/parser/parser_i18n.test.php
@@ -47,7 +47,7 @@ class TestOfDoku_Parser_i18n extends TestOfDoku_Parser {
             array('deleted_open',array()),
             array('cdata',array('æ')),
             array('deleted_close',array()),
-            array('cdata',array("tiøn\n")),
+            array('cdata',array("tiøn")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -60,12 +60,12 @@ class TestOfDoku_Parser_i18n extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nFoo\n")),
+            array('cdata',array("\nFoo")),
             array('p_close',array()),
             array('header',array('Iñtërnâtiônàlizætiøn',3,5)),
             array('section_open',array(3)),
             array('p_open',array()),
-            array('cdata',array("\n Bar\n")),
+            array('cdata',array("\n Bar")),
             array('p_close',array()),
             array('section_close',array()),
             array('document_end',array()),
@@ -110,7 +110,7 @@ def');
             array('tablerow_close',array()),
             array('table_close',array(153)),
             array('p_open',array()),
-            array('cdata',array('def'."\n")),
+            array('cdata',array('def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -126,7 +126,7 @@ def');
             array('p_open',array()),
             array('cdata',array("\nFoo ")),
             array('acronym',array('Iñtërnâtiônàlizætiøn')),
-            array('cdata',array(" Bar\n")),
+            array('cdata',array(" Bar")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -141,7 +141,7 @@ def');
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('interwikilink',array('wp>Iñtërnâtiônàlizætiøn','Iñtërnâtiônàlizætiøn','wp','Iñtërnâtiônàlizætiøn')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -156,7 +156,7 @@ def');
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internallink',array('x:Iñtërnâtiônàlizætiøn:y:foo_bar:z','Iñtërnâtiônàlizætiøn')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
diff --git a/_test/cases/inc/parser/parser_links.test.php b/_test/cases/inc/parser/parser_links.test.php
index 81186ef5e517bbb27e282287d2d0ca26ef6100f3..a4a8c58266ac1c95498c708226ab6308355c2b26 100644
--- a/_test/cases/inc/parser/parser_links.test.php
+++ b/_test/cases/inc/parser/parser_links.test.php
@@ -16,7 +16,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('externallink',array('http://www.google.com', NULL)),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -31,7 +31,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('externallink',array('HTTP://WWW.GOOGLE.COM', NULL)),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -46,7 +46,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('externallink',array('http://123.123.3.21/foo', NULL)),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -61,7 +61,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('externallink',array('http://[3ffe:2a00:100:7031::1]/foo', NULL)),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -106,7 +106,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
                     array('p_open',array()),
                     array('cdata',array("\n".'Foo ')),
                     array('externallink',array($link, $name)),
-                    array('cdata',array(' Bar'."\n")),
+                    array('cdata',array(' Bar')),
                     array('p_close',array()),
                     array('document_end',array()),
                 );
@@ -124,7 +124,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nFoo javascript:alert('XSS'); Bar\n")),
+            array('cdata',array("\nFoo javascript:alert('XSS'); Bar")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -139,7 +139,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('externallink',array('http://www.google.com', 'www.google.com')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -154,7 +154,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('externallink',array('ftp://ftp.sunsite.com', 'ftp.sunsite.com')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -168,7 +168,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('emaillink',array('bugs@php.net', NULL)),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -183,7 +183,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('emaillink',array("~fix+bug's.for/ev{e}r@php.net", NULL)),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -198,7 +198,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('emaillink',array('bugs@pHp.net', NULL)),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -214,7 +214,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internallink',array('l',NULL)),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -229,7 +229,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internallink',array('foo:bar',NULL)),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -244,7 +244,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internallink',array('x:1:y:foo_bar:z','Test')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -259,7 +259,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internallink',array('wiki:syntax#internal','Syntax')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -274,7 +274,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('externallink',array('http://www.google.com','Google')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -289,7 +289,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('interwikilink',array('iw>somepage','Some Page','iw','somepage')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -304,7 +304,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('interwikilink',array('IW>somepage','Some Page','iw','somepage')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -319,7 +319,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('interwikilink',array('wp>Callback_(computer_science)','callbacks','wp','Callback_(computer_science)')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -334,7 +334,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('camelcaselink',array('FooBar')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -349,7 +349,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('filelink',array('file://temp/file.txt ',NULL)),
-            array('cdata',array('Bar'."\n")),
+            array('cdata',array('Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -364,7 +364,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('externallink',array('file://temp/file.txt','Some File')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -379,7 +379,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('windowssharelink',array('\\\server\share',NULL)),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -394,7 +394,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('windowssharelink',array('\\\server\share','My Documents')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -409,7 +409,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internalmedia',array('img.gif',NULL,NULL,NULL,NULL,'cache','details')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -424,7 +424,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internalmedia',array('img.gif',NULL,NULL,NULL,NULL,'cache','linkonly')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -439,7 +439,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internalmedia',array('foo.txt','Some File',null,10,10,'cache','details')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -454,7 +454,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internalmedia',array('img.gif',NULL,'left',NULL,NULL,'cache','details')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -469,7 +469,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internalmedia',array('img.gif',NULL,'right',NULL,NULL,'cache','details')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -484,7 +484,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internalmedia',array('img.gif',NULL,'center',NULL,NULL,'cache','details')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -499,7 +499,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internalmedia',array('img.gif',NULL,NULL,'50','100','nocache','details')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -514,7 +514,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internalmedia',array('img.gif','Some Image',NULL,'50','100','cache','details')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -529,7 +529,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('externalmedia',array('http://www.google.com/img.gif',NULL,NULL,NULL,NULL,'cache','details')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -544,7 +544,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('externalmedia',array('http://www.google.com/img.gif',NULL,NULL,'50','100','nocache','details')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -560,7 +560,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('cdata',array("\n".'Foo ')),
             array('externalmedia',
             array('http://www.google.com/img.gif','Some Image',NULL,'50','100','cache','details')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -587,7 +587,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internallink',array('x:1:y:foo_bar:z',$image)),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -614,7 +614,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('internallink',array('x:1:y:foo_bar:z',$image)),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -641,7 +641,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('emaillink',array('foo@example.com',$image)),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -657,7 +657,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
             array('cdata',array("\n".'Foo ')),
             array('internalmedia',
             array('img.gif','{{foo.gif|{{bar.gif|Bar',NULL,NULL,NULL,'cache','details')),
-            array('cdata',array('}}}} Bar'."\n")),
+            array('cdata',array('}}}} Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
diff --git a/_test/cases/inc/parser/parser_lists.test.php b/_test/cases/inc/parser/parser_lists.test.php
index 34f0eb7602a8a9ec3846f926310669e454b1b01d..6e61da1a140046669d854664645a8c738a78ab1d 100644
--- a/_test/cases/inc/parser/parser_lists.test.php
+++ b/_test/cases/inc/parser/parser_lists.test.php
@@ -171,7 +171,7 @@ class TestOfDoku_Parser_Lists extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nFoo  -bar  *foo Bar\n")),
+            array('cdata',array("\nFoo  -bar  *foo Bar")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -211,7 +211,7 @@ Bar');
             array('listitem_close',array()),
             array('listu_close',array()),
             array('p_open',array()),
-            array('cdata',array("Bar".DOKU_PARSER_EOL)),
+            array('cdata',array("Bar")),
             array('p_close',array()),
             array('document_end',array()),
         );
diff --git a/_test/cases/inc/parser/parser_preformatted.test.php b/_test/cases/inc/parser/parser_preformatted.test.php
index 8e3bd591b6997422275624bba85feb98ba0ef034..7a00f3599a1709d6f203cda4ad9e9eaed26be495 100644
--- a/_test/cases/inc/parser/parser_preformatted.test.php
+++ b/_test/cases/inc/parser/parser_preformatted.test.php
@@ -17,7 +17,7 @@ class TestOfDoku_Parser_Preformatted extends TestOfDoku_Parser {
             array('p_close',array()),
             array('file',array('testing',null,null)),
             array('p_open',array()),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -35,7 +35,7 @@ class TestOfDoku_Parser_Preformatted extends TestOfDoku_Parser {
             array('p_close',array()),
             array('code',array('testing', null, null)),
             array('p_open',array()),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -52,7 +52,7 @@ class TestOfDoku_Parser_Preformatted extends TestOfDoku_Parser {
             array('p_close',array()),
             array('code',array('testing', null, null)),
             array('p_open',array()),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -69,7 +69,7 @@ class TestOfDoku_Parser_Preformatted extends TestOfDoku_Parser {
             array('p_close',array()),
             array('code',array('testing', 'php', null)),
             array('p_open',array()),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -86,7 +86,7 @@ class TestOfDoku_Parser_Preformatted extends TestOfDoku_Parser {
             array('p_close',array()),
             array('preformatted',array("x  \n  y  ")),
             array('p_open',array()),
-            array('cdata',array('Bar'."\n\n")),
+            array('cdata',array('Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -103,7 +103,7 @@ class TestOfDoku_Parser_Preformatted extends TestOfDoku_Parser {
             array('p_close',array()),
             array('preformatted',array("x  \n  y  ")),
             array('p_open',array()),
-            array('cdata',array('Bar'."\n\n")),
+            array('cdata',array('Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -120,7 +120,7 @@ class TestOfDoku_Parser_Preformatted extends TestOfDoku_Parser {
             array('p_close',array()),
             array('preformatted',array("x\t\n\ty\t")),
             array('p_open',array()),
-            array('cdata',array("Bar\n\n")),
+            array('cdata',array("Bar")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -137,7 +137,7 @@ class TestOfDoku_Parser_Preformatted extends TestOfDoku_Parser {
             array('p_close',array()),
             array('preformatted',array("x\t\n\ty\t")),
             array('p_open',array()),
-            array('cdata',array("Bar\n\n")),
+            array('cdata',array("Bar")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -169,7 +169,7 @@ class TestOfDoku_Parser_Preformatted extends TestOfDoku_Parser {
             array('p_close',array()),
             array('preformatted',array("x  \n  y  \n-X\n*Y")),
             array('p_open',array()),
-            array('cdata',array("Bar\n\n")),
+            array('cdata',array("Bar")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -186,7 +186,7 @@ class TestOfDoku_Parser_Preformatted extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('php',array('testing')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -203,7 +203,7 @@ class TestOfDoku_Parser_Preformatted extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('html',array('testing')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
diff --git a/_test/cases/inc/parser/parser_quote.test.php b/_test/cases/inc/parser/parser_quote.test.php
index 5d5a7e2a55922aa0adb579b778b9f8690dada1fe..ebc5da6044cb9c8f207e78c59b497663bddec0ea 100644
--- a/_test/cases/inc/parser/parser_quote.test.php
+++ b/_test/cases/inc/parser/parser_quote.test.php
@@ -22,7 +22,7 @@ class TestOfDoku_Parser_Quote extends TestOfDoku_Parser {
             array('quote_close',array()),
             array('quote_close',array()),
             array('p_open',array()),
-            array('cdata',array("klm\n")),
+            array('cdata',array("klm")),
             array('p_close',array()),
             array('document_end',array()),
             
@@ -45,7 +45,7 @@ class TestOfDoku_Parser_Quote extends TestOfDoku_Parser {
             array('quote_close',array()),
             array('quote_close',array()),
             array('p_open',array()),
-            array('cdata',array("klm\n")),
+            array('cdata',array("klm")),
             array('p_close',array()),
             array('document_end',array()),
             
@@ -86,7 +86,7 @@ class TestOfDoku_Parser_Quote extends TestOfDoku_Parser {
             array('quote_close',array()),
             array('quote_close',array()),
             array('p_open',array()),
-            array('cdata',array("klm".DOKU_PARSER_EOL)),
+            array('cdata',array("klm")),
             array('p_close',array()),
             array('document_end',array()),
             
diff --git a/_test/cases/inc/parser/parser_quotes.test.php b/_test/cases/inc/parser/parser_quotes.test.php
index 9f191d6b081143c5635e0d2d51d610b8dae9e0e2..77e323799e87874a3bfeb64831b90f574e4c6c1f 100644
--- a/_test/cases/inc/parser/parser_quotes.test.php
+++ b/_test/cases/inc/parser/parser_quotes.test.php
@@ -22,7 +22,7 @@ class TestOfDoku_Parser_Quotes extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('singlequoteopening',array()),
-            array('cdata',array('hello Bar'."\n")),
+            array('cdata',array('hello Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -39,7 +39,7 @@ class TestOfDoku_Parser_Quotes extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo said:')),
             array('singlequoteopening',array()),
-            array('cdata',array('hello Bar'."\n")),
+            array('cdata',array('hello Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -56,7 +56,7 @@ class TestOfDoku_Parser_Quotes extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo hello')),
             array('singlequoteclosing',array()),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -73,7 +73,7 @@ class TestOfDoku_Parser_Quotes extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo hello')),
             array('singlequoteclosing',array()),
-            array('cdata',array(') Bar'."\n")),
+            array('cdata',array(') Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -92,7 +92,7 @@ class TestOfDoku_Parser_Quotes extends TestOfDoku_Parser {
             array('singlequoteopening',array()),
             array('cdata',array('hello')),
             array('singlequoteclosing',array()),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -109,7 +109,7 @@ class TestOfDoku_Parser_Quotes extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'hey it')),
             array('apostrophe',array()),
-            array('cdata',array('s fine weather today'."\n")),
+            array('cdata',array('s fine weather today')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -129,7 +129,7 @@ class TestOfDoku_Parser_Quotes extends TestOfDoku_Parser {
             array('singlequoteopening',array()),
             array('cdata',array('hello')),
             array('singlequoteclosing',array()),
-            array('cdata',array(') Bar'."\n")),
+            array('cdata',array(') Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -146,7 +146,7 @@ class TestOfDoku_Parser_Quotes extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('doublequoteopening',array()),
-            array('cdata',array('hello Bar'."\n")),
+            array('cdata',array('hello Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -163,7 +163,7 @@ class TestOfDoku_Parser_Quotes extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo said:')),
             array('doublequoteopening',array()),
-            array('cdata',array('hello Bar'."\n")),
+            array('cdata',array('hello Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -180,7 +180,7 @@ class TestOfDoku_Parser_Quotes extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo hello')),
             array('doublequoteclosing',array()),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -197,7 +197,7 @@ class TestOfDoku_Parser_Quotes extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo hello')),
             array('doublequoteclosing',array()),
-            array('cdata',array(') Bar'."\n")),
+            array('cdata',array(') Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -216,7 +216,7 @@ class TestOfDoku_Parser_Quotes extends TestOfDoku_Parser {
             array('doublequoteopening',array()),
             array('cdata',array('hello')),
             array('doublequoteclosing',array()),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -235,7 +235,7 @@ class TestOfDoku_Parser_Quotes extends TestOfDoku_Parser {
             array('doublequoteopening',array()),
             array('cdata',array('hello')),
             array('doublequoteclosing',array()),
-            array('cdata',array(') Bar'."\n")),
+            array('cdata',array(') Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -261,7 +261,7 @@ class TestOfDoku_Parser_Quotes extends TestOfDoku_Parser {
             array('cdata',array('s world')),
             array('singlequoteclosing',array()),
             array('doublequoteclosing',array()),
-            array('cdata',array(".\n")),
+            array('cdata',array(".")),
             array('p_close',array()),
             array('document_end',array()),
         );
diff --git a/_test/cases/inc/parser/parser_replacements.test.php b/_test/cases/inc/parser/parser_replacements.test.php
index 6aa9069a175cc5cfc5fd4d8a5fcbca649e8e8615..d277560c742754b94df2232271164ab4e17258a0 100644
--- a/_test/cases/inc/parser/parser_replacements.test.php
+++ b/_test/cases/inc/parser/parser_replacements.test.php
@@ -17,7 +17,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'abc ')),
             array('acronym',array('FOOBAR')),
-            array('cdata',array(' xyz'."\n")),
+            array('cdata',array(' xyz')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -32,7 +32,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\n".'abcFOOBARxyz'."\n")),
+            array('cdata',array("\n".'abcFOOBARxyz')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -49,7 +49,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'FOOBAR ')),
             array('acronym',array('FOO')),
-            array('cdata',array("\n")),
+            array('cdata',array('')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -68,7 +68,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('acronym',array('FOO')),
             array('cdata',array(' def ')),
             array('acronym',array('BAR')),
-            array('cdata',array(' xyz'."\n")),
+            array('cdata',array(' xyz')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -92,7 +92,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('acronym',array('FOO.1')),
             array('cdata',array(" ")),
             array('acronym',array('A.FOO.1')),
-            array('cdata',array("\n")),
+            array('cdata',array('')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -115,7 +115,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('acronym',array('FOO.1')),
             array('cdata',array(" ")),
             array('acronym',array('A.FOO.1')),
-            array('cdata',array("\n")),
+            array('cdata',array('')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -130,7 +130,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc:-)xyz\n")),
+            array('cdata',array("\nabc:-)xyz")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -147,7 +147,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'abc ')),
             array('smiley',array(':-)')),
-            array('cdata',array(' xyz'."\n")),
+            array('cdata',array(' xyz')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -162,7 +162,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc:-)x^_^yz\n")),
+            array('cdata',array("\nabc:-)x^_^yz")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -181,7 +181,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('smiley',array(':-)')),
             array('cdata',array(' x ')),
             array('smiley',array('^_^')),
-            array('cdata',array(' yz'."\n")),
+            array('cdata',array(' yz')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -197,7 +197,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\nabc".':-\\\\'."xyz\n")),
+            array('cdata',array("\nabc".':-\\\\'."xyz")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -215,7 +215,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'abc ')),
             array('smiley',array(':-\\\\')),
-            array('cdata',array(' xyz'."\n")),
+            array('cdata',array(' xyz')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -232,7 +232,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'abc ')),
             array('wordblock',array('CAT')),
-            array('cdata',array(' xyz'."\n")),
+            array('cdata',array(' xyz')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -249,7 +249,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'abc ')),
             array('wordblock',array('cat')),
-            array('cdata',array(' xyz'."\n")),
+            array('cdata',array(' xyz')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -268,7 +268,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('wordblock',array('cat')),
             array('cdata',array(' x ')),
             array('wordblock',array('DOG')),
-            array('cdata',array(' yz'."\n")),
+            array('cdata',array(' yz')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -285,7 +285,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'x ')),
             array('entity',array('->')),
-            array('cdata',array(' y'."\n")),
+            array('cdata',array(' y')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -304,7 +304,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('entity',array('->')),
             array('cdata',array(' y ')),
             array('entity',array('<-')),
-            array('cdata',array(' z'."\n")),
+            array('cdata',array(' z')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -321,7 +321,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('multiplyentity',array(10,20)),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -337,7 +337,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array("\n".'Foo 0x123 Bar'."\n")),
+            array('cdata',array("\n".'Foo 0x123 Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -356,7 +356,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('p_close',array()),
             array('hr',array()),
             array('p_open',array()),
-            array('cdata',array("\n Bar\n")),
+            array('cdata',array("\n Bar")),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -374,7 +374,7 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
             array('p_close',array()),
             array('hr',array()),
             array('p_open',array()),
-            array('cdata',array("\n Bar\n")),
+            array('cdata',array("\n Bar")),
             array('p_close',array()),
             array('document_end',array()),
         );
diff --git a/_test/cases/inc/parser/parser_table.test.php b/_test/cases/inc/parser/parser_table.test.php
index 04bce650a8efbe6669f407f9ebe3f15c0dfbbece..12898860cdbc775c6c287132aaecb622c9947171 100644
--- a/_test/cases/inc/parser/parser_table.test.php
+++ b/_test/cases/inc/parser/parser_table.test.php
@@ -44,7 +44,7 @@ def');
             array('tablerow_close',array()),
             array('table_close',array(121)),
             array('p_open',array()),
-            array('cdata',array('def'."\n")),
+            array('cdata',array('def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -84,7 +84,7 @@ def');
             array('tablerow_close',array()),
             array('table_close',array(121)),
             array('p_open',array()),
-            array('cdata',array('def'."\n")),
+            array('cdata',array('def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -108,7 +108,7 @@ def');
             array('tablerow_close',array()),
             array('table_close',array(7)),
             array('p_open',array()),
-            array('cdata',array('def'."\n")),
+            array('cdata',array('def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -142,7 +142,7 @@ def');
             array('tablerow_close',array()),
             array('table_close',array(19)),
             array('p_open',array()),
-            array('cdata',array('def'."\n")),
+            array('cdata',array('def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -177,7 +177,7 @@ def');
             array('tablerow_close',array()),
             array('table_close',array(23)),
             array('p_open',array()),
-            array('cdata',array('def'."\n")),
+            array('cdata',array('def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -220,7 +220,7 @@ def');
             array('tablerow_close',array()),
             array('table_close',array(31)),
             array('p_open',array()),
-            array('cdata',array('def'."\n")),
+            array('cdata',array('def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -268,7 +268,7 @@ def');
             array('tablerow_close',array()),
             array('table_close',array(51)),
             array('p_open',array()),
-            array('cdata',array('def'."\n")),
+            array('cdata',array('def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -306,7 +306,7 @@ def');
             array('tablerow_close',array()),
             array('table_close',array(27)),
             array('p_open',array()),
-            array('cdata',array('def'."\n")),
+            array('cdata',array('def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -326,7 +326,7 @@ def');
         $calls = array (
             array('document_start',array()),
             array('p_open',array()),
-            array('cdata',array(DOKU_PARSER_EOL."abc")),
+            array('cdata',array("abc")),
             array('p_close',array()),
             array('table_open',array(3, 2, 6)),
             array('tablerow_open',array()),
@@ -353,7 +353,7 @@ def');
             array('tablerow_close',array()),
             array('table_close',array(121)),
             array('p_open',array()),
-            array('cdata',array('def'.DOKU_PARSER_EOL)),
+            array('cdata',array('def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -408,7 +408,7 @@ def');
             array('tablerow_close',array()),
             array('table_close',array(129)),
             array('p_open',array()),
-            array('cdata',array('def'."\n")),
+            array('cdata',array('def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -459,7 +459,7 @@ def');
             array('tablerow_close',array()),
             array('table_close',array(155)),
             array('p_open',array()),
-            array('cdata',array('def'."\n")),
+            array('cdata',array('def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -506,7 +506,7 @@ def');
             array('tablerow_close',array()),
             array('table_close',array(123)),
             array('p_open',array()),
-            array('cdata',array('def'."\n")),
+            array('cdata',array('def')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -566,7 +566,7 @@ def');
             array('tablerow_close',array()),
             array('table_close',array(129)),
             array('p_open',array()),
-            array('cdata',array('def'."\n")),
+            array('cdata',array('def')),
             array('p_close',array()),
             array('document_end',array()),
         );
diff --git a/_test/cases/inc/parser/parser_unformatted.test.php b/_test/cases/inc/parser/parser_unformatted.test.php
index 56820a27a08a35b72bce25522bac8f51319c0771..dd69564b4443b332e0581006e8ea34f29cbcfb43 100644
--- a/_test/cases/inc/parser/parser_unformatted.test.php
+++ b/_test/cases/inc/parser/parser_unformatted.test.php
@@ -15,7 +15,7 @@ class TestOfDoku_Parser_Unformatted extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('unformatted',array('testing')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
@@ -32,7 +32,7 @@ class TestOfDoku_Parser_Unformatted extends TestOfDoku_Parser {
             array('p_open',array()),
             array('cdata',array("\n".'Foo ')),
             array('unformatted',array('testing')),
-            array('cdata',array(' Bar'."\n")),
+            array('cdata',array(' Bar')),
             array('p_close',array()),
             array('document_end',array()),
         );
diff --git a/bin/indexer.php b/bin/indexer.php
index 67254fa882f50b3e52d96401e1d4210373684fd3..6ee0a9e8d946244c6b798d4fb58de01511e76c5d 100755
--- a/bin/indexer.php
+++ b/bin/indexer.php
@@ -13,10 +13,6 @@ require_once(DOKU_INC.'inc/auth.php');
 require_once(DOKU_INC.'inc/cliopts.php');
 session_write_close();
 
-// Version tag used to force rebuild on upgrade
-// Need to keep in sync with lib/exe/indexer.php
-if(!defined('INDEXER_VERSION')) define('INDEXER_VERSION', 2);
-
 // handle options
 $short_opts = 'hcuq';
 $long_opts  = array('help', 'clear', 'update', 'quiet');
@@ -28,6 +24,7 @@ if ( $OPTS->isError() ) {
 }
 $CLEAR = false;
 $QUIET = false;
+$INDEXER = null;
 foreach ($OPTS->options as $key => $val) {
     switch ($key) {
         case 'h':
@@ -70,6 +67,9 @@ function _usage() {
 
 function _update(){
     global $conf;
+    global $INDEXER;
+
+    $INDEXER = idx_get_indexer();
 
     $data = array();
     _quietecho("Searching pages... ");
@@ -82,25 +82,21 @@ function _update(){
 }
 
 function _index($id){
+    global $INDEXER;
     global $CLEAR;
+    global $QUIET;
 
     // if not cleared only update changed and new files
-    if(!$CLEAR){
+    if($CLEAR){
         $idxtag = metaFN($id,'.indexed');
         if(@file_exists($idxtag)){
-            if(io_readFile($idxtag) >= INDEXER_VERSION){
-                $last = @filemtime(metaFN($id,'.indexed'));
-                if($last > @filemtime(wikiFN($id))) return;
-            }
+            @unlink($idxtag);
         }
     }
 
-    _lock();
     _quietecho("$id... ");
-    idx_addPage($id);
-    io_saveFile(metaFN($id,'.indexed'),INDEXER_VERSION);
+    idx_addPage($id, !$QUIET);
     _quietecho("done.\n");
-    _unlock();
 }
 
 /**
@@ -145,7 +141,7 @@ function _clearindex(){
     _lock();
     _quietecho("Clearing index... ");
     io_saveFile($conf['indexdir'].'/page.idx','');
-    io_saveFile($conf['indexdir'].'/title.idx','');
+    //io_saveFile($conf['indexdir'].'/title.idx','');
     $dir = @opendir($conf['indexdir']);
     if($dir!==false){
         while(($f = readdir($dir)) !== false){
@@ -154,6 +150,7 @@ function _clearindex(){
                 @unlink($conf['indexdir']."/$f");
         }
     }
+    @unlink($conf['indexdir'].'/lengths.idx');
     _quietecho("done.\n");
     _unlock();
 }
diff --git a/conf/.htaccess b/conf/.htaccess
index 763ebf2ee20c8424dc348b2095513064c093448d..f5dda608694aefb65d91c78bcad04ebf2aca0d79 100644
--- a/conf/.htaccess
+++ b/conf/.htaccess
@@ -1,3 +1,4 @@
-## no access to the conf directory
-order allow,deny
-deny from all
+## no access to the conf directory
+order allow,deny
+deny from all
+Satisfy All
diff --git a/conf/acronyms.conf b/conf/acronyms.conf
index 172b9974d2956477edf1e34ede60e6a08d326063..058e855509ac95371acf97abe8e53ce00d1ca71e 100644
--- a/conf/acronyms.conf
+++ b/conf/acronyms.conf
@@ -62,6 +62,7 @@ JPEG         Joint Photographics Experts Group
 JPG          Joint Photographics Experts Group
 JS           JavaScript
 KISS         Keep it simple stupid
+LAN          Local Area Network
 LDAP         Lightweight Directory Access Protocol
 LGPL         GNU Lesser General Public License
 LOL          Laughing out loud
diff --git a/conf/interwiki.conf b/conf/interwiki.conf
index b14bfef9fe38c1aebc5a29b6e383da36088e6d55..28d603de26fd73e48ae25f61f0845892b1aa11fe 100644
--- a/conf/interwiki.conf
+++ b/conf/interwiki.conf
@@ -5,7 +5,8 @@
 #        no further encoding is done
 # If no placeholder is defined the urlencoded name is appended to the URL
 
-# You can add more InterWiki shortcuts here.
+# To prevent losing your added InterWiki shortcuts after an upgrade, 
+# you should add new ones to interwiki.local.conf
 
 wp        http://en.wikipedia.org/wiki/{NAME}
 wpfr      http://fr.wikipedia.org/wiki/{NAME}
@@ -26,9 +27,13 @@ phpfn     http://www.php.net/{NAME}
 coral     http://{HOST}.{PORT}.nyud.net:8090/{PATH}?{QUERY}
 freecache http://freecache.org/{NAME}
 sb        http://www.splitbrain.org/go/
+skype     skype:{NAME}
 google.de http://www.google.de/search?q=
 go        http://www.google.com/search?q={URL}&amp;btnI=lucky
 
+# To support VoIP/SIP links
+callto    callto://{NAME}
+
 # Standards from http://usemod.com/intermap.txt follow
 
 AbbeNormal      http://www.ourpla.net/cgi-bin/pikie.cgi?
diff --git a/conf/smileys.conf b/conf/smileys.conf
index 47e4537e2d15dc48ac31a8f24c9cd95fb901ef5d..80daed57ac3ee02c10d4db2fefa92947fcaa8e8b 100644
--- a/conf/smileys.conf
+++ b/conf/smileys.conf
@@ -18,6 +18,7 @@
 :-X         icon_silenced.gif
 :-|         icon_neutral.gif
 ;-)         icon_wink.gif
+m(          facepalm.gif
 ^_^         icon_fun.gif
 :?:         icon_question.gif
 :!:         icon_exclaim.gif
diff --git a/conf/wordblock.conf b/conf/wordblock.conf
index b3822a29c13b841c2a44b39286670c2c3c7e978e..fe451f278a03f625fc631fc66674996521ba6f7a 100644
--- a/conf/wordblock.conf
+++ b/conf/wordblock.conf
@@ -26,4 +26,7 @@ downgradetowindowsxp\.com
 elegantugg\.com
 classicedhardy\.com
 research-service\.com
-https?:\/\/(\S*?)(2-pay-secure|911essay|academia-research|anypapers|applicationessay|bestbuyessay|bestdissertation|bestessay|bestresume|besttermpaper|businessessay|college-paper|customessay|custom-made-paper|custom-writing|dissertationblog|dissertation-service|dissertations?expert|essaybank|essay-?blog|essaycapital|essaylogic|essaymill|essayontime|essaypaper|essays?land|essaytownsucks|essaywrit|essay-writing-service|fastessays|freelancercareers|genuinecontent|genuineessay|genuinepaper|goessay|grandresume|killer-content|ma-dissertation|managementessay|masterpaper|mightystudent|needessay|researchedge|researchpaper-blog|resumecvservice|resumesexperts|resumesplanet|rushessay|samedayessay|superiorcontent|superiorpaper|superiorthesis|term-paper|termpaper-blog|term-paper-research|thesisblog|universalresearch|valwriting|vdwriters|wisetranslation|writersassembly|writers\.com\.ph|writers\.ph)
+https?:\/\/(\S*?)(2-pay-secure|911essay|academia-research|anypapers|applicationessay|bestbuyessay|bestdissertation|bestessay|bestresume|besttermpaper|businessessay|college-paper|customessay|custom-made-paper|custom-writing|degree-?result|dissertationblog|dissertation-service|dissertations?expert|essaybank|essay-?blog|essaycapital|essaylogic|essaymill|essayontime|essaypaper|essays?land|essaytownsucks|essay-?writ|fastessays|freelancercareers|genuinecontent|genuineessay|genuinepaper|goessay|grandresume|killer-content|ma-dissertation|managementessay|masterpaper|mightystudent|needessay|researchedge|researchpaper-blog|resumecvservice|resumesexperts|resumesplanet|rushessay|samedayessay|superiorcontent|superiorpaper|superiorthesis|term-paper|termpaper-blog|term-paper-research|thesisblog|universalresearch|valwriting|vdwriters|wisetranslation|writersassembly|writers\.com\.ph|writers\.ph)
+flatsinmumbai\.co\.in
+https?:\/\/(\S*?)penny-?stock
+mattressreview\.biz
diff --git a/conf/words.aspell.dist b/conf/words.aspell.dist
deleted file mode 100644
index a49138fcb37f866b5b92380a889bc50cd319077b..0000000000000000000000000000000000000000
--- a/conf/words.aspell.dist
+++ /dev/null
@@ -1,5 +0,0 @@
-personal_ws-1.1 en 4 utf-8
-DokuWiki
-Wiki
-WikiWiki
-Gohr
diff --git a/data/.htaccess b/data/.htaccess
index 281d5c33db37cd1cc887dbb2d36897b897835071..2cbb757e77986b86d1da9241b3019c0a073e219a 100644
--- a/data/.htaccess
+++ b/data/.htaccess
@@ -1,2 +1,3 @@
 order allow,deny
 deny from all
+Satisfy All
diff --git a/inc/.htaccess b/inc/.htaccess
index aebb21cd2519d1c9f0c0124c673786faaa1c7492..68ae43e72ba5e5399d23c43c7ebba2000e791da4 100644
--- a/inc/.htaccess
+++ b/inc/.htaccess
@@ -1,3 +1,4 @@
-## no access to the inc directory
-order allow,deny
-deny from all
+## no access to the inc directory
+order allow,deny
+deny from all
+Satisfy All
diff --git a/inc/DifferenceEngine.php b/inc/DifferenceEngine.php
index 906a17b2d34d48915e91aea01f5a009051e82f13..2578d07ee2f8e58c7b72669318eb2100253857e8 100644
--- a/inc/DifferenceEngine.php
+++ b/inc/DifferenceEngine.php
@@ -29,8 +29,8 @@ class _DiffOp {
 
 class _DiffOp_Copy extends _DiffOp {
     var $type = 'copy';
-
-    function _DiffOp_Copy($orig, $closing = false) {
+    
+    function __construct($orig, $closing = false) {
         if (!is_array($closing))
             $closing = $orig;
         $this->orig = $orig;
@@ -44,8 +44,8 @@ class _DiffOp_Copy extends _DiffOp {
 
 class _DiffOp_Delete extends _DiffOp {
     var $type = 'delete';
-
-    function _DiffOp_Delete($lines) {
+    
+    function __construct($lines) {
         $this->orig = $lines;
         $this->closing = false;
     }
@@ -57,8 +57,8 @@ class _DiffOp_Delete extends _DiffOp {
 
 class _DiffOp_Add extends _DiffOp {
     var $type = 'add';
-
-    function _DiffOp_Add($lines) {
+    
+    function __construct($lines) {
         $this->closing = $lines;
         $this->orig = false;
     }
@@ -70,8 +70,8 @@ class _DiffOp_Add extends _DiffOp {
 
 class _DiffOp_Change extends _DiffOp {
     var $type = 'change';
-
-    function _DiffOp_Change($orig, $closing) {
+    
+    function __construct($orig, $closing) {
         $this->orig = $orig;
         $this->closing = $closing;
     }
@@ -499,7 +499,7 @@ class Diff {
      *      (Typically these are lines from a file.)
      * @param $to_lines array An array of strings.
      */
-    function Diff($from_lines, $to_lines) {
+    function __construct($from_lines, $to_lines) {
         $eng = new _DiffEngine;
         $this->edits = $eng->diff($from_lines, $to_lines);
         //$this->_check($from_lines, $to_lines);
@@ -645,12 +645,12 @@ class MappedDiff extends Diff {
      * @param $mapped_to_lines array This array should
      *  have the same number of elements as $to_lines.
      */
-    function MappedDiff($from_lines, $to_lines, $mapped_from_lines, $mapped_to_lines) {
+    function __construct($from_lines, $to_lines, $mapped_from_lines, $mapped_to_lines) {
 
         assert(count($from_lines) == count($mapped_from_lines));
         assert(count($to_lines) == count($mapped_to_lines));
 
-        $this->Diff($mapped_from_lines, $mapped_to_lines);
+        parent::__construct($mapped_from_lines, $mapped_to_lines);
 
         $xi = $yi = 0;
         $ecnt = count($this->edits);
@@ -827,7 +827,8 @@ class DiffFormatter {
 define('NBSP', "\xC2\xA0");     // utf-8 non-breaking space.
 
 class _HWLDF_WordAccumulator {
-    function _HWLDF_WordAccumulator() {
+
+    function __construct() {
         $this->_lines = array();
         $this->_line = '';
         $this->_group = '';
@@ -882,11 +883,11 @@ class _HWLDF_WordAccumulator {
 
 class WordLevelDiff extends MappedDiff {
 
-    function WordLevelDiff($orig_lines, $closing_lines) {
+    function __construct($orig_lines, $closing_lines) {
         list ($orig_words, $orig_stripped) = $this->_split($orig_lines);
         list ($closing_words, $closing_stripped) = $this->_split($closing_lines);
 
-        $this->MappedDiff($orig_words, $closing_words, $orig_stripped, $closing_stripped);
+        parent::__construct($orig_words, $closing_words, $orig_stripped, $closing_stripped);
     }
 
     function _split($lines) {
@@ -923,12 +924,12 @@ class WordLevelDiff extends MappedDiff {
 }
 
 class InlineWordLevelDiff extends MappedDiff {
-
-    function InlineWordLevelDiff($orig_lines, $closing_lines) {
+    
+    function __construct($orig_lines, $closing_lines) {
         list ($orig_words, $orig_stripped) = $this->_split($orig_lines);
         list ($closing_words, $closing_stripped) = $this->_split($closing_lines);
 
-        $this->MappedDiff($orig_words, $closing_words, $orig_stripped, $closing_stripped);
+        parent::__construct($orig_words, $closing_words, $orig_stripped, $closing_stripped);
     }
 
     function _split($lines) {
@@ -965,7 +966,7 @@ class InlineWordLevelDiff extends MappedDiff {
  */
 class UnifiedDiffFormatter extends DiffFormatter {
 
-    function UnifiedDiffFormatter($context_lines = 4) {
+    function __construct($context_lines = 4) {
         $this->leading_context_lines = $context_lines;
         $this->trailing_context_lines = $context_lines;
     }
@@ -996,7 +997,7 @@ class UnifiedDiffFormatter extends DiffFormatter {
  */
 class TableDiffFormatter extends DiffFormatter {
 
-    function TableDiffFormatter() {
+    function __construct() {
         $this->leading_context_lines = 2;
         $this->trailing_context_lines = 2;
     }
@@ -1089,7 +1090,7 @@ class TableDiffFormatter extends DiffFormatter {
 class InlineDiffFormatter extends DiffFormatter {
     var $colspan = 4;
 
-    function InlineDiffFormatter() {
+    function __construct() {
         $this->leading_context_lines = 2;
         $this->trailing_context_lines = 2;
     }
diff --git a/inc/JpegMeta.php b/inc/JpegMeta.php
index fa05f68590606bd83fe75f824a47b07dd609a3d1..afa70168c48eeccc4151c644218cda3d349fdd62 100644
--- a/inc/JpegMeta.php
+++ b/inc/JpegMeta.php
@@ -1466,16 +1466,21 @@ class JpegMeta {
         $parser = xml_parser_create();
         xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
         xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
-        xml_parse_into_struct($parser, $data, $values, $tags);
+        $result = xml_parse_into_struct($parser, $data, $values, $tags);
         xml_parser_free($parser);
 
+        if ($result == 0) {
+            $this->_info['xmp'] = false;
+            return false;
+        }
+
         $this->_info['xmp'] = array();
         $count = count($values);
         for ($i = 0; $i < $count; $i++) {
             if ($values[$i]['tag'] == 'rdf:Description' && $values[$i]['type'] == 'open') {
 
-                while ($values[++$i]['tag'] != 'rdf:Description') {
-                    $this->_parseXmpNode($values, $i, $this->_info['xmp'][$values[$i]['tag']]);
+                while ((++$i < $count) && ($values[$i]['tag'] != 'rdf:Description')) {
+                    $this->_parseXmpNode($values, $i, $this->_info['xmp'][$values[$i]['tag']], $count);
                 }
             }
         }
@@ -1487,7 +1492,7 @@ class JpegMeta {
      *
      * @author  Hakan Sandell <hakan.sandell@mydata.se>
      */
-    function _parseXmpNode($values, &$i, &$meta) {
+    function _parseXmpNode($values, &$i, &$meta, $count) {
         if ($values[$i]['type'] == 'close') return;
 
         if ($values[$i]['type'] == 'complete') {
@@ -1497,11 +1502,13 @@ class JpegMeta {
         }
 
         $i++;
+        if ($i >= $count) return;
+
         if ($values[$i]['tag'] == 'rdf:Bag' || $values[$i]['tag'] == 'rdf:Seq') {
             // Array property
             $meta = array();
             while ($values[++$i]['tag'] == 'rdf:li') {
-                $this->_parseXmpNode($values, $i, $meta[]);
+                $this->_parseXmpNode($values, $i, $meta[], $count);
             }
             $i++; // skip closing Bag/Seq tag
 
@@ -1509,8 +1516,8 @@ class JpegMeta {
             // Language Alternative property, only the first (default) value is used
             if ($values[$i]['type'] == 'open') {
                 $i++;
-                $this->_parseXmpNode($values, $i, $meta);
-                while ($values[++$i]['tag'] != 'rdf:Alt');
+                $this->_parseXmpNode($values, $i, $meta, $count);
+                while ((++$i < $count) && ($values[$i]['tag'] != 'rdf:Alt'));
                 $i++; // skip closing Alt tag
             }
 
@@ -1519,8 +1526,8 @@ class JpegMeta {
             $meta = array();
             $startTag = $values[$i-1]['tag'];
             do {
-                $this->_parseXmpNode($values, $i, $meta[$values[$i]['tag']]);
-            } while ($values[++$i]['tag'] != $startTag);
+                $this->_parseXmpNode($values, $i, $meta[$values[$i]['tag']], $count);
+            } while ((++$i < $count) && ($values[$i]['tag'] != $startTag));
         }
     }
 
diff --git a/inc/Sitemapper.php b/inc/Sitemapper.php
index 47a3fedb5c0697276dbb0f5e98446bae2c2f8907..bbe1caf266334fcb323dc59ab95079bb58570e85 100644
--- a/inc/Sitemapper.php
+++ b/inc/Sitemapper.php
@@ -45,7 +45,7 @@ class Sitemapper {
 
         dbglog("Sitemapper::generate(): using $sitemap"); // FIXME: Only in debug mode
 
-        $pages = idx_getIndex('page', '');
+        $pages = idx_get_indexer()->getPages();
         dbglog('Sitemapper::generate(): creating sitemap using '.count($pages).' pages');
         $items = array();
 
diff --git a/inc/actions.php b/inc/actions.php
index 016af4aea589d3bc37c6200dcd23ded1223cbdd1..fa11bb7f1c0668c41a53d7ddce80a28dda0811d6 100644
--- a/inc/actions.php
+++ b/inc/actions.php
@@ -18,6 +18,7 @@ if(!defined('DOKU_INC')) die('meh.');
 function act_dispatch(){
     global $ACT;
     global $ID;
+    global $INFO;
     global $QUERY;
     global $lang;
     global $conf;
@@ -134,8 +135,15 @@ function act_dispatch(){
                 $pluginlist = plugin_list('admin');
                 if (in_array($_REQUEST['page'], $pluginlist)) {
                     // attempt to load the plugin
-                    if ($plugin =& plugin_load('admin',$_REQUEST['page']) !== null)
-                        $plugin->handle();
+                    if ($plugin =& plugin_load('admin',$_REQUEST['page']) !== null){
+                        if($plugin->forAdminOnly() && !$INFO['isadmin']){
+                            // a manager tried to load a plugin that's for admins only
+                            unset($_REQUEST['page']);
+                            msg('For admins only',-1);
+                        }else{
+                            $plugin->handle();
+                        }
+                    }
                 }
             }
         }
@@ -244,7 +252,6 @@ function act_permcheck($act){
             $permneed = AUTH_CREATE;
         }
     }elseif(in_array($act,array('login','search','recent','profile','index', 'sitemap'))){
-    }elseif(in_array($act,array('login','search','recent','profile','sitemap'))){
         $permneed = AUTH_NONE;
     }elseif($act == 'revert'){
         $permneed = AUTH_ADMIN;
@@ -610,7 +617,7 @@ function act_sitemap($act) {
         print "Sitemap generation is disabled.";
         exit;
     }
-    
+
     $sitemap = Sitemapper::getFilePath();
     if(strrchr($sitemap, '.') === '.gz'){
         $mime = 'application/x-gzip';
diff --git a/inc/auth.php b/inc/auth.php
index 7449fd63557182ffb7be1dbb65654ccbdb501ffd..53376be342a93bfe5bc93927aa20ed623af7bf6f 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -189,7 +189,9 @@ function auth_login($user,$pass,$sticky=false,$silent=false){
         if ($auth->checkPass($user,$pass)){
             // make logininfo globally available
             $_SERVER['REMOTE_USER'] = $user;
-            auth_setCookie($user,PMA_blowfish_encrypt($pass,auth_cookiesalt()),$sticky);
+            $secret = auth_cookiesalt();
+            if(!$sticky) $secret .= session_id; //bind non-sticky to session
+            auth_setCookie($user,PMA_blowfish_encrypt($pass,$secret),$sticky);
             return true;
         }else{
             //invalid credentials - log off
@@ -209,15 +211,18 @@ function auth_login($user,$pass,$sticky=false,$silent=false){
                     $auth->useSessionCache($user) &&
                     ($session['time'] >= time()-$conf['auth_security_timeout']) &&
                     ($session['user'] == $user) &&
-                    ($session['pass'] == $pass) &&  //still crypted
+                    ($session['pass'] == sha1($pass)) &&  //still crypted
                     ($session['buid'] == auth_browseruid()) ){
+
                 // he has session, cookie and browser right - let him in
                 $_SERVER['REMOTE_USER'] = $user;
                 $USERINFO = $session['info']; //FIXME move all references to session
                 return true;
             }
             // no we don't trust it yet - recheck pass but silent
-            $pass = PMA_blowfish_decrypt($pass,auth_cookiesalt());
+            $secret = auth_cookiesalt();
+            if(!$sticky) $secret .= session_id(); //bind non-sticky to session
+            $pass = PMA_blowfish_decrypt($pass,$secret);
             return auth_login($user,$pass,$sticky,true);
         }
     }
@@ -686,9 +691,8 @@ function register(){
     global $conf;
     global $auth;
 
-    if (!$auth) return false;
     if(!$_POST['save']) return false;
-    if(!$auth->canDo('addUser')) return false;
+    if(!actionOK('register')) return false;
 
     //clean username
     $_POST['login'] = trim($auth->cleanUser($_POST['login']));
@@ -764,12 +768,10 @@ function updateprofile() {
     global $lang;
     global $auth;
 
-    if (!$auth) return false;
     if(empty($_POST['save'])) return false;
     if(!checkSecurityToken()) return false;
 
-    // should not be able to get here without Profile being possible...
-    if(!$auth->canDo('Profile')) {
+    if(!actionOK('profile')) {
         msg($lang['profna'],-1);
         return false;
     }
@@ -840,11 +842,7 @@ function act_resendpwd(){
     global $conf;
     global $auth;
 
-    if(!actionOK('resendpwd')) return false;
-    if (!$auth) return false;
-
-    // should not be able to get here without modPass being possible...
-    if(!$auth->canDo('modPass')) {
+    if(!actionOK('resendpwd')) {
         msg($lang['resendna'],-1);
         return false;
     }
@@ -986,7 +984,7 @@ function auth_setCookie($user,$pass,$sticky) {
     }
     // set session
     $_SESSION[DOKU_COOKIE]['auth']['user'] = $user;
-    $_SESSION[DOKU_COOKIE]['auth']['pass'] = $pass;
+    $_SESSION[DOKU_COOKIE]['auth']['pass'] = sha1($pass);
     $_SESSION[DOKU_COOKIE]['auth']['buid'] = auth_browseruid();
     $_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO;
     $_SESSION[DOKU_COOKIE]['auth']['time'] = time();
diff --git a/inc/auth/mysql.class.php b/inc/auth/mysql.class.php
index dbdfe5fdaf04eee211076bb96dbfb17e1d75b5f7..653c725a3664a2f01582006fc9bc9a89e1d1076b 100644
--- a/inc/auth/mysql.class.php
+++ b/inc/auth/mysql.class.php
@@ -46,7 +46,7 @@ class auth_mysql extends auth_basic {
 
       // set capabilities based upon config strings set
       if (empty($this->cnf['server']) || empty($this->cnf['user']) ||
-          empty($this->cnf['password']) || empty($this->cnf['database'])){
+          !isset($this->cnf['password']) || empty($this->cnf['database'])){
         if ($this->cnf['debug'])
           msg("MySQL err: insufficient configuration.",-1,__LINE__,__FILE__);
         $this->success = false;
diff --git a/inc/common.php b/inc/common.php
index 23d9c715557b7c384e125828094a1d0c0a66562e..ac7ddd653c2c5516c4ba8ae2a3b3c6fbee5c3ccf 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -843,7 +843,7 @@ function pageTemplate($id){
                 }
             }
             // load the content
-            $data['tpl'] = io_readFile($data['tpl']);
+            $data['tpl'] = io_readFile($data['tplfile']);
         }
         if($data['doreplace']) parsePageTemplate(&$data);
     }
diff --git a/inc/config_cascade.php b/inc/config_cascade.php
index 3ae68a0004d701fe47462a1de3abb33e50bb2788..48ed5a000b36d77db56dfb2610089ade8b3d1775 100644
--- a/inc/config_cascade.php
+++ b/inc/config_cascade.php
@@ -5,7 +5,8 @@
  * This array configures the default locations of various files in the
  * DokuWiki directory hierarchy. It can be overriden in inc/preload.php
  */
-$config_cascade = array(
+$config_cascade = array_merge(
+    array(
         'main' => array(
             'default'   => array(DOKU_CONF.'dokuwiki.php'),
             'local'     => array(DOKU_CONF.'local.php'),
@@ -48,10 +49,11 @@ $config_cascade = array(
             'local'     => array(DOKU_CONF.'wordblock.local.conf'),
             ),
         'userstyle' => array(
-            'default' => DOKU_CONF.'userstyle.css',
-            'print'   => DOKU_CONF.'printstyle.css',
-            'feed'    => DOKU_CONF.'feedstyle.css',
-            'all'     => DOKU_CONF.'allstyle.css',
+            'screen'  => DOKU_CONF.'userstyle.css',
+            'rtl'     => DOKU_CONF.'userrtl.css',
+            'print'   => DOKU_CONF.'userprint.css',
+            'feed'    => DOKU_CONF.'userfeed.css',
+            'all'     => DOKU_CONF.'userall.css',
             ),
         'userscript' => array(
             'default' => DOKU_CONF.'userscript.js'
@@ -62,5 +64,7 @@ $config_cascade = array(
         'plainauth.users' => array(
             'default' => DOKU_CONF.'users.auth.php',
             ),
+        ),
+        $config_cascade
 );
 
diff --git a/inc/confutils.php b/inc/confutils.php
index 26ed4f08712dfbe5ae12321891e15760aeae220d..29ead1e9f124afff4ce4776f1e69c86f53384910 100644
--- a/inc/confutils.php
+++ b/inc/confutils.php
@@ -241,17 +241,24 @@ function actionOK($action){
         // prepare disabled actions array and handle legacy options
         $disabled = explode(',',$conf['disableactions']);
         $disabled = array_map('trim',$disabled);
-        if(isset($conf['openregister']) && !$conf['openregister']) $disabled[] = 'register';
-        if(isset($conf['resendpasswd']) && !$conf['resendpasswd']) $disabled[] = 'resendpwd';
-        if(isset($conf['subscribers']) && !$conf['subscribers']) {
-            $disabled[] = 'subscribe';
-        }
-        if (is_null($auth) || !$auth->canDo('addUser')) {
+        if((isset($conf['openregister']) && !$conf['openregister']) || is_null($auth) || !$auth->canDo('addUser')) {
             $disabled[] = 'register';
         }
-        if (is_null($auth) || !$auth->canDo('modPass')) {
+        if((isset($conf['resendpasswd']) && !$conf['resendpasswd']) || is_null($auth) || !$auth->canDo('modPass')) {
             $disabled[] = 'resendpwd';
         }
+        if((isset($conf['subscribers']) && !$conf['subscribers']) || is_null($auth)) {
+            $disabled[] = 'subscribe';
+        }
+        if (is_null($auth) || !$auth->canDo('Profile')) {
+            $disabled[] = 'profile';
+        }
+        if (is_null($auth)) {
+            $disabled[] = 'login';
+        }
+        if (is_null($auth) || !$auth->canDo('logout')) {
+            $disabled[] = 'logout';
+        }
         $disabled = array_unique($disabled);
     }
 
diff --git a/inc/fulltext.php b/inc/fulltext.php
index 0f2414213b2e70db580197161558a43bb3886f08..8155325ee7df5b1bda7d6724ef987d768a197ee1 100644
--- a/inc/fulltext.php
+++ b/inc/fulltext.php
@@ -36,19 +36,21 @@ function ft_pageSearch($query,&$highlight){
  * @author Kazutaka Miyasaka <kazmiya@gmail.com>
  */
 function _ft_pageSearch(&$data) {
+    $Indexer = idx_get_indexer();
+
     // parse the given query
-    $q = ft_queryParser($data['query']);
+    $q = ft_queryParser($Indexer, $data['query']);
     $data['highlight'] = $q['highlight'];
 
     if (empty($q['parsed_ary'])) return array();
 
     // lookup all words found in the query
-    $lookup = idx_lookup($q['words']);
+    $lookup = $Indexer->lookup($q['words']);
 
     // get all pages in this dokuwiki site (!: includes nonexistent pages)
     $pages_all = array();
-    foreach (idx_getIndex('page', '') as $id) {
-        $pages_all[trim($id)] = 0; // base: 0 hit
+    foreach ($Indexer->getPages() as $id) {
+        $pages_all[$id] = 0; // base: 0 hit
     }
 
     // process the query
@@ -122,29 +124,12 @@ function _ft_pageSearch(&$data) {
 /**
  * Returns the backlinks for a given page
  *
- * Does a quick lookup with the fulltext index, then
- * evaluates the instructions of the found pages
+ * Uses the metadata index.
  */
 function ft_backlinks($id){
-    global $conf;
-    $swfile   = DOKU_INC.'inc/lang/'.$conf['lang'].'/stopwords.txt';
-    $stopwords = @file_exists($swfile) ? file($swfile) : array();
-
     $result = array();
 
-    // quick lookup of the pagename
-    $page    = noNS($id);
-    $matches = idx_lookup(idx_tokenizer($page,$stopwords));  // pagename may contain specials (_ or .)
-    $docs    = array_keys(ft_resultCombine(array_values($matches)));
-    $docs    = array_filter($docs,'isVisiblePage'); // discard hidden pages
-    if(!count($docs)) return $result;
-
-    // check metadata for matching links
-    foreach($docs as $match){
-        // metadata relation reference links are already resolved
-        $links = p_get_metadata($match,'relation references');
-        if (isset($links[$id])) $result[] = $match;
-    }
+    $result = idx_get_indexer()->lookupKey('relation_references', $id);
 
     if(!count($result)) return $result;
 
@@ -168,17 +153,14 @@ function ft_backlinks($id){
  * Aborts after $max found results
  */
 function ft_mediause($id,$max){
-    global $conf;
-    $swfile   = DOKU_INC.'inc/lang/'.$conf['lang'].'/stopwords.txt';
-    $stopwords = @file_exists($swfile) ? file($swfile) : array();
-
     if(!$max) $max = 1; // need to find at least one
 
     $result = array();
 
     // quick lookup of the mediafile
+    // FIXME use metadata key lookup
     $media   = noNS($id);
-    $matches = idx_lookup(idx_tokenizer($media,$stopwords));
+    $matches = idx_lookup(idx_tokenizer($media));
     $docs    = array_keys(ft_resultCombine(array_values($matches)));
     if(!count($docs)) return $result;
 
@@ -229,7 +211,6 @@ function ft_pageLookup($id, $in_ns=false, $in_title=false){
 }
 
 function _ft_pageLookup(&$data){
-    global $conf;
     // split out original parameters
     $id = $data['id'];
     if (preg_match('/(?:^| )@(\w+)/', $id, $matches)) {
@@ -239,29 +220,32 @@ function _ft_pageLookup(&$data){
 
     $in_ns    = $data['in_ns'];
     $in_title = $data['in_title'];
+    $cleaned = cleanID($id);
 
-    $pages  = array_map('rtrim', idx_getIndex('page', ''));
-    $titles = array_map('rtrim', idx_getIndex('title', ''));
-    // check for corrupt title index #FS2076
-    if(count($pages) != count($titles)){
-        $titles = array_fill(0,count($pages),'');
-        @unlink($conf['indexdir'].'/title.idx'); // will be rebuilt in inc/init.php
-    }
-    $pages = array_combine($pages, $titles);
+    $Indexer = idx_get_indexer();
+    $page_idx = $Indexer->getPages();
 
-    $cleaned = cleanID($id);
+    $pages = array();
     if ($id !== '' && $cleaned !== '') {
-        foreach ($pages as $p_id => $p_title) {
-            if ((strpos($in_ns ? $p_id : noNSorNS($p_id), $cleaned) === false) &&
-                (!$in_title || (stripos($p_title, $id) === false)) ) {
-                unset($pages[$p_id]);
+        foreach ($page_idx as $p_id) {
+            if ((strpos($in_ns ? $p_id : noNSorNS($p_id), $cleaned) !== false)) {
+                if (!isset($pages[$p_id]))
+                    $pages[$p_id] = p_get_first_heading($p_id, false);
+            }
+        }
+        if ($in_title) {
+            $wildcard_id = "*$id*";
+            foreach ($Indexer->lookupKey('title', $wildcard_id) as $p_id) {
+                if (!isset($pages[$p_id]))
+                    $pages[$p_id] = p_get_first_heading($p_id, false);
             }
         }
     }
     if (isset($ns)) {
-        foreach (array_keys($pages) as $p_id) {
-            if (strpos($p_id, $ns) !== 0) {
-                unset($pages[$p_id]);
+        foreach ($page_idx as $p_id) {
+            if (strpos($p_id, $ns) === 0) {
+                if (!isset($pages[$p_id]))
+                    $pages[$p_id] = p_get_first_heading($p_id, false);
             }
         }
     }
@@ -500,11 +484,7 @@ function ft_resultComplement($args) {
  * @author Andreas Gohr <andi@splitbrain.org>
  * @author Kazutaka Miyasaka <kazmiya@gmail.com>
  */
-function ft_queryParser($query){
-    global $conf;
-    $swfile    = DOKU_INC.'inc/lang/'.$conf['lang'].'/stopwords.txt';
-    $stopwords = @file_exists($swfile) ? file($swfile) : array();
-
+function ft_queryParser($Indexer, $query){
     /**
      * parse a search query and transform it into intermediate representation
      *
@@ -550,7 +530,7 @@ function ft_queryParser($query){
         if (preg_match('/^(-?)"(.+)"$/u', $term, $matches)) {
             // phrase-include and phrase-exclude
             $not = $matches[1] ? 'NOT' : '';
-            $parsed = $not.ft_termParser($matches[2], $stopwords, false, true);
+            $parsed = $not.ft_termParser($Indexer, $matches[2], false, true);
         } else {
             // fix incomplete phrase
             $term = str_replace('"', ' ', $term);
@@ -597,10 +577,10 @@ function ft_queryParser($query){
                     $parsed .= '(N+:'.$matches[1].')';
                 } elseif (preg_match('/^-(.+)$/', $token, $matches)) {
                     // word-exclude
-                    $parsed .= 'NOT('.ft_termParser($matches[1], $stopwords).')';
+                    $parsed .= 'NOT('.ft_termParser($Indexer, $matches[1]).')';
                 } else {
                     // word-include
-                    $parsed .= ft_termParser($token, $stopwords);
+                    $parsed .= ft_termParser($Indexer, $token);
                 }
             }
         }
@@ -734,18 +714,18 @@ function ft_queryParser($query){
  *
  * @author Kazutaka Miyasaka <kazmiya@gmail.com>
  */
-function ft_termParser($term, &$stopwords, $consider_asian = true, $phrase_mode = false) {
+function ft_termParser($Indexer, $term, $consider_asian = true, $phrase_mode = false) {
     $parsed = '';
     if ($consider_asian) {
         // successive asian characters need to be searched as a phrase
         $words = preg_split('/('.IDX_ASIAN.'+)/u', $term, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
         foreach ($words as $word) {
             $phrase_mode = $phrase_mode ? true : preg_match('/'.IDX_ASIAN.'/u', $word);
-            $parsed .= ft_termParser($word, $stopwords, false, $phrase_mode);
+            $parsed .= ft_termParser($Indexer, $word, false, $phrase_mode);
         }
     } else {
         $term_noparen = str_replace(array('(', ')'), ' ', $term);
-        $words = idx_tokenizer($term_noparen, $stopwords, true);
+        $words = $Indexer->tokenizer($term_noparen, true);
 
         // W_: no need to highlight
         if (empty($words)) {
diff --git a/inc/html.php b/inc/html.php
index c9188849472ad2dc4627ccbed67b8247522da9bc..fcfa54b6c7f8cd7744453a7875219c1aa1bec69b 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -62,17 +62,11 @@ function html_login(){
     $form->endFieldset();
 
     if(actionOK('register')){
-        $form->addElement('<p>'
-                          . $lang['reghere']
-                          . ': <a href="'.wl($ID,'do=register').'" rel="nofollow" class="wikilink1">'.$lang['register'].'</a>'
-                          . '</p>');
+        $form->addElement('<p>'.$lang['reghere'].': '.tpl_actionlink('register','','','',true).'</p>');
     }
 
     if (actionOK('resendpwd')) {
-        $form->addElement('<p>'
-                          . $lang['pwdforget']
-                          . ': <a href="'.wl($ID,'do=resendpwd').'" rel="nofollow" class="wikilink1">'.$lang['btn_resendpwd'].'</a>'
-                          . '</p>');
+        $form->addElement('<p>'.$lang['pwdforget'].': '.tpl_actionlink('resendpwd','','','',true).'</p>');
     }
 
     html_form('login', $form);
@@ -290,7 +284,8 @@ function html_hilight($html,$phrases){
     $regex = join('|',array_map('ft_snippet_re_preprocess', array_map('preg_quote_cb',$phrases)));
 
     if ($regex === '') return $html;
-    $html = preg_replace_callback("/((<[^>]*)|$regex)/ui",'html_hilight_callback',$html);
+    if (!utf8_check($regex)) return $html;
+    $html = @preg_replace_callback("/((<[^>]*)|$regex)/ui",'html_hilight_callback',$html);
     return $html;
 }
 
@@ -1111,7 +1106,7 @@ function html_register(){
     print p_locale_xhtml('register');
     print '<div class="centeralign">'.NL;
     $form = new Doku_Form(array('id' => 'dw__register'));
-    $form->startFieldset($lang['register']);
+    $form->startFieldset($lang['btn_register']);
     $form->addHidden('do', 'register');
     $form->addHidden('save', '1');
     $form->addElement(form_makeTextField('login', $_POST['login'], $lang['user'], null, 'block', array('size'=>'50')));
@@ -1121,7 +1116,7 @@ function html_register(){
     }
     $form->addElement(form_makeTextField('fullname', $_POST['fullname'], $lang['fullname'], '', 'block', array('size'=>'50')));
     $form->addElement(form_makeTextField('email', $_POST['email'], $lang['email'], '', 'block', array('size'=>'50')));
-    $form->addElement(form_makeButton('submit', '', $lang['register']));
+    $form->addElement(form_makeButton('submit', '', $lang['btn_register']));
     $form->endFieldset();
     html_form('register', $form);
 
diff --git a/inc/indexer.php b/inc/indexer.php
index 526c8db05982fa9973d9598422219b7bac7f8ab7..110901e58fa54f3f694ac705164207423c34e557 100644
--- a/inc/indexer.php
+++ b/inc/indexer.php
@@ -4,10 +4,14 @@
  *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author     Andreas Gohr <andi@splitbrain.org>
+ * @author     Tom N Harris <tnharris@whoopdedo.org>
  */
 
 if(!defined('DOKU_INC')) die('meh.');
 
+// Version tag used to force rebuild on upgrade
+define('INDEXER_VERSION', 4);
+
 // set the minimum token length to use in the index (note, this doesn't apply to numeric tokens)
 if (!defined('IDX_MINWORDLENGTH')) define('IDX_MINWORDLENGTH',2);
 
@@ -46,6 +50,36 @@ define('IDX_ASIAN3','['.                // Hiragana/Katakana (can be two charact
                    ']?');
 define('IDX_ASIAN', '(?:'.IDX_ASIAN1.'|'.IDX_ASIAN2.'|'.IDX_ASIAN3.')');
 
+/**
+ * Version of the indexer taking into consideration the external tokenizer.
+ * The indexer is only compatible with data written by the same version.
+ *
+ * @triggers INDEXER_VERSION_GET
+ * Plugins that modify what gets indexed should hook this event and
+ * add their version info to the event data like so:
+ *     $data[$plugin_name] = $plugin_version;
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ * @author Michael Hamann <michael@content-space.de>
+ */
+function idx_get_version(){
+    static $indexer_version = null;
+    if ($indexer_version == null) {
+        global $conf;
+        $version = INDEXER_VERSION;
+
+        // DokuWiki version is included for the convenience of plugins
+        $data = array('dokuwiki'=>$version);
+        trigger_event('INDEXER_VERSION_GET', $data, null, false);
+        unset($data['dokuwiki']); // this needs to be first
+        ksort($data);
+        foreach ($data as $plugin=>$vers)
+            $version .= '+'.$plugin.'='.$vers;
+        $indexer_version = $version;
+    }
+    return $indexer_version;
+}
+
 /**
  * Measure the length of a string.
  * Differs from strlen in handling of asian characters.
@@ -56,375 +90,1203 @@ function wordlen($w){
     $l = strlen($w);
     // If left alone, all chinese "words" will get put into w3.idx
     // So the "length" of a "word" is faked
-    if(preg_match('/'.IDX_ASIAN2.'/u',$w))
-        $l += ord($w) - 0xE1;  // Lead bytes from 0xE2-0xEF
+    if(preg_match_all('/[\xE2-\xEF]/',$w,$leadbytes)) {
+        foreach($leadbytes[0] as $b)
+            $l += ord($b) - 0xE1;
+    }
     return $l;
 }
 
 /**
- * Write a list of strings to an index file.
+ * Class that encapsulates operations on the indexer database.
  *
  * @author Tom N Harris <tnharris@whoopdedo.org>
  */
-function idx_saveIndex($pre, $wlen, &$idx){
-    global $conf;
-    $fn = $conf['indexdir'].'/'.$pre.$wlen;
-    $fh = @fopen($fn.'.tmp','w');
-    if(!$fh) return false;
-    foreach ($idx as $line) {
-        fwrite($fh,$line);
-    }
-    fclose($fh);
-    if(isset($conf['fperm'])) chmod($fn.'.tmp', $conf['fperm']);
-    io_rename($fn.'.tmp', $fn.'.idx');
-    return true;
-}
+class Doku_Indexer {
 
-/**
- * Append a given line to an index file.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function idx_appendIndex($pre, $wlen, $line){
-    global $conf;
-    $fn = $conf['indexdir'].'/'.$pre.$wlen;
-    $fh = @fopen($fn.'.idx','a');
-    if(!$fh) return false;
-    fwrite($fh,$line);
-    fclose($fh);
-    return true;
-}
+    /**
+     * Adds the contents of a page to the fulltext index
+     *
+     * The added text replaces previous words for the same page.
+     * An empty value erases the page.
+     *
+     * @param string    $page   a page name
+     * @param string    $text   the body of the page
+     * @return boolean          the function completed successfully
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     * @author Andreas Gohr <andi@splitbrain.org>
+     */
+    public function addPageWords($page, $text) {
+        if (!$this->lock())
+            return "locked";
 
-/**
- * Read the list of words in an index (if it exists).
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
-function idx_getIndex($pre, $wlen){
-    global $conf;
-    $fn = $conf['indexdir'].'/'.$pre.$wlen.'.idx';
-    if(!@file_exists($fn)) return array();
-    return file($fn);
-}
+        // load known documents
+        $pid = $this->addIndexKey('page', '', $page);
+        if ($pid === false) {
+            $this->unlock();
+            return false;
+        }
 
-/**
- * Create an empty index file if it doesn't exist yet.
- *
- * FIXME: This function isn't currently used. It will probably be removed soon.
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
-function idx_touchIndex($pre, $wlen){
-    global $conf;
-    $fn = $conf['indexdir'].'/'.$pre.$wlen.'.idx';
-    if(!@file_exists($fn)){
-        touch($fn);
-        if($conf['fperm']) chmod($fn, $conf['fperm']);
+        $pagewords = array();
+        // get word usage in page
+        $words = $this->getPageWords($text);
+        if ($words === false) {
+            $this->unlock();
+            return false;
+        }
+
+        if (!empty($words)) {
+            foreach (array_keys($words) as $wlen) {
+                $index = $this->getIndex('i', $wlen);
+                foreach ($words[$wlen] as $wid => $freq) {
+                    $idx = ($wid<count($index)) ? $index[$wid] : '';
+                    $index[$wid] = $this->updateTuple($idx, $pid, $freq);
+                    $pagewords[] = "$wlen*$wid";
+                }
+                if (!$this->saveIndex('i', $wlen, $index)) {
+                    $this->unlock();
+                    return false;
+                }
+            }
+        }
+
+        // Remove obsolete index entries
+        $pageword_idx = $this->getIndexKey('pageword', '', $pid);
+        if ($pageword_idx !== '') {
+            $oldwords = explode(':',$pageword_idx);
+            $delwords = array_diff($oldwords, $pagewords);
+            $upwords = array();
+            foreach ($delwords as $word) {
+                if ($word != '') {
+                    list($wlen,$wid) = explode('*', $word);
+                    $wid = (int)$wid;
+                    $upwords[$wlen][] = $wid;
+                }
+            }
+            foreach ($upwords as $wlen => $widx) {
+                $index = $this->getIndex('i', $wlen);
+                foreach ($widx as $wid) {
+                    $index[$wid] = $this->updateTuple($index[$wid], $pid, 0);
+                }
+                $this->saveIndex('i', $wlen, $index);
+            }
+        }
+        // Save the reverse index
+        $pageword_idx = join(':', $pagewords);
+        if (!$this->saveIndexKey('pageword', '', $pid, $pageword_idx)) {
+            $this->unlock();
+            return false;
+        }
+
+        $this->unlock();
+        return true;
     }
-}
 
-/**
- * Read a line ending with \n.
- * Returns false on EOF.
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
-function _freadline($fh) {
-    if (feof($fh)) return false;
-    $ln = '';
-    while (($buf = fgets($fh,4096)) !== false) {
-        $ln .= $buf;
-        if (substr($buf,-1) == "\n") break;
-    }
-    if ($ln === '') return false;
-    if (substr($ln,-1) != "\n") $ln .= "\n";
-    return $ln;
-}
+    /**
+     * Split the words in a page and add them to the index.
+     *
+     * @param string    $text   content of the page
+     * @return array            list of word IDs and number of times used
+     * @author Andreas Gohr <andi@splitbrain.org>
+     * @author Christopher Smith <chris@jalakai.co.uk>
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     */
+    protected function getPageWords($text) {
+        global $conf;
 
-/**
- * Write a line to an index file.
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
-function idx_saveIndexLine($pre, $wlen, $idx, $line){
-    global $conf;
-    if(substr($line,-1) != "\n") $line .= "\n";
-    $fn = $conf['indexdir'].'/'.$pre.$wlen;
-    $fh = @fopen($fn.'.tmp','w');
-    if(!$fh) return false;
-    $ih = @fopen($fn.'.idx','r');
-    if ($ih) {
-        $ln = -1;
-        while (($curline = _freadline($ih)) !== false) {
-            if (++$ln == $idx) {
-                fwrite($fh, $line);
-            } else {
-                fwrite($fh, $curline);
+        $tokens = $this->tokenizer($text);
+        $tokens = array_count_values($tokens);  // count the frequency of each token
+
+        $words = array();
+        foreach ($tokens as $w=>$c) {
+            $l = wordlen($w);
+            if (isset($words[$l])){
+                $words[$l][$w] = $c + (isset($words[$l][$w]) ? $words[$l][$w] : 0);
+            }else{
+                $words[$l] = array($w => $c);
             }
         }
-        if ($idx > $ln) {
-            fwrite($fh,$line);
+
+        // arrive here with $words = array(wordlen => array(word => frequency))
+        $word_idx_modified = false;
+        $index = array();   //resulting index
+        foreach (array_keys($words) as $wlen) {
+            $word_idx = $this->getIndex('w', $wlen);
+            foreach ($words[$wlen] as $word => $freq) {
+                $wid = array_search($word, $word_idx);
+                if ($wid === false) {
+                    $wid = count($word_idx);
+                    $word_idx[] = $word;
+                    $word_idx_modified = true;
+                }
+                if (!isset($index[$wlen]))
+                    $index[$wlen] = array();
+                $index[$wlen][$wid] = $freq;
+            }
+            // save back the word index
+            if ($word_idx_modified && !$this->saveIndex('w', $wlen, $word_idx))
+                return false;
         }
-        fclose($ih);
-    } else {
-        fwrite($fh,$line);
+
+        return $index;
     }
-    fclose($fh);
-    if($conf['fperm']) chmod($fn.'.tmp', $conf['fperm']);
-    io_rename($fn.'.tmp', $fn.'.idx');
-    return true;
-}
 
-/**
- * Read a single line from an index (if it exists).
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
-function idx_getIndexLine($pre, $wlen, $idx){
-    global $conf;
-    $fn = $conf['indexdir'].'/'.$pre.$wlen.'.idx';
-    if(!@file_exists($fn)) return '';
-    $fh = @fopen($fn,'r');
-    if(!$fh) return '';
-    $ln = -1;
-    while (($line = _freadline($fh)) !== false) {
-        if (++$ln == $idx) break;
-    }
-    fclose($fh);
-    return "$line";
-}
+    /**
+     * Add/update keys to/of the metadata index.
+     *
+     * Adding new keys does not remove other keys for the page.
+     * An empty value will erase the key.
+     * The $key parameter can be an array to add multiple keys. $value will
+     * not be used if $key is an array.
+     *
+     * @param string    $page   a page name
+     * @param mixed     $key    a key string or array of key=>value pairs
+     * @param mixed     $value  the value or list of values
+     * @return boolean          the function completed successfully
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     * @author Michael Hamann <michael@content-space.de>
+     */
+    public function addMetaKeys($page, $key, $value=null) {
+        if (!is_array($key)) {
+            $key = array($key => $value);
+        } elseif (!is_null($value)) {
+            // $key is array, but $value is not null
+            trigger_error("array passed to addMetaKeys but value is not null", E_USER_WARNING);
+        }
 
-/**
- * Split a page into words
- *
- * Returns an array of word counts, false if an error occurred.
- * Array is keyed on the word length, then the word index.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @author Christopher Smith <chris@jalakai.co.uk>
- */
-function idx_getPageWords($page){
-    global $conf;
-    $swfile   = DOKU_INC.'inc/lang/'.$conf['lang'].'/stopwords.txt';
-    if(@file_exists($swfile)){
-        $stopwords = file($swfile);
-    }else{
-        $stopwords = array();
+        if (!$this->lock())
+            return "locked";
+
+        // load known documents
+        $pid = $this->addIndexKey('page', '', $page);
+        if ($pid === false) {
+            $this->unlock();
+            return false;
+        }
+
+        // Special handling for titles so the index file is simpler
+        if (array_key_exists('title', $key)) {
+            $value = $key['title'];
+            if (is_array($value))
+                $value = $value[0];
+            $this->saveIndexKey('title', '', $pid, $value);
+            unset($key['title']);
+        }
+
+        foreach ($key as $name => $values) {
+            $metaname = idx_cleanName($name);
+            $this->addIndexKey('metadata', '', $metaname);
+            $metaidx = $this->getIndex($metaname.'_i', '');
+            $metawords = $this->getIndex($metaname.'_w', '');
+            $addwords = false;
+
+            if (!is_array($values)) $values = array($values);
+
+            $val_idx = $this->getIndexKey($metaname.'_p', '', $pid);
+            if ($val_idx != '') {
+                $val_idx = explode(':', $val_idx);
+                // -1 means remove, 0 keep, 1 add
+                $val_idx = array_combine($val_idx, array_fill(0, count($val_idx), -1));
+            } else {
+                $val_idx = array();
+            }
+
+
+            foreach ($values as $val) {
+                $val = (string)$val;
+                if ($val !== "") {
+                    $id = array_search($val, $metawords);
+                    if ($id === false) {
+                        $id = count($metawords);
+                        $metawords[$id] = $val;
+                        $addwords = true;
+                    }
+                    // test if value is already in the index
+                    if (isset($val_idx[$id]) && $val_idx[$id] <= 0)
+                        $val_idx[$id] = 0;
+                    else // else add it
+                        $val_idx[$id] = 1;
+                }
+            }
+
+            if ($addwords)
+                $this->saveIndex($metaname.'_w', '', $metawords);
+            $vals_changed = false;
+            foreach ($val_idx as $id => $action) {
+                if ($action == -1) {
+                    $metaidx[$id] = $this->updateTuple($metaidx[$id], $pid, 0);
+                    $vals_changed = true;
+                    unset($val_idx[$id]);
+                } elseif ($action == 1) {
+                    $metaidx[$id] = $this->updateTuple($metaidx[$id], $pid, 1);
+                    $vals_changed = true;
+                }
+            }
+
+            if ($vals_changed) {
+                $this->saveIndex($metaname.'_i', '', $metaidx);
+                $val_idx = implode(':', array_keys($val_idx));
+                $this->saveIndexKey($metaname.'_p', '', $pid, $val_idx);
+            }
+
+            unset($metaidx);
+            unset($metawords);
+        }
+
+        $this->unlock();
+        return true;
     }
 
-    $body = '';
-    $data = array($page, $body);
-    $evt = new Doku_Event('INDEXER_PAGE_ADD', $data);
-    if ($evt->advise_before()) $data[1] .= rawWiki($page);
-    $evt->advise_after();
-    unset($evt);
+    /**
+     * Remove a page from the index
+     *
+     * Erases entries in all known indexes.
+     *
+     * @param string    $page   a page name
+     * @return boolean          the function completed successfully
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     */
+    public function deletePage($page) {
+        if (!$this->lock())
+            return "locked";
 
-    list($page,$body) = $data;
+        // load known documents
+        $pid = $this->getIndexKey('page', '', $page);
+        if ($pid === false) {
+            $this->unlock();
+            return false;
+        }
 
-    $body   = strtr($body,
-                    array(
-                        "\r" => ' ',
-                        "\n" => ' ',
-                        "\t" => ' ',
-                        "\xC2\xAD" => '', //soft-hyphen
-                    )
-                   );
-    $tokens = explode(' ', $body);
-    $tokens = array_count_values($tokens);   // count the frequency of each token
+        // Remove obsolete index entries
+        $pageword_idx = $this->getIndexKey('pageword', '', $pid);
+        if ($pageword_idx !== '') {
+            $delwords = explode(':',$pageword_idx);
+            $upwords = array();
+            foreach ($delwords as $word) {
+                if ($word != '') {
+                    list($wlen,$wid) = explode('*', $word);
+                    $wid = (int)$wid;
+                    $upwords[$wlen][] = $wid;
+                }
+            }
+            foreach ($upwords as $wlen => $widx) {
+                $index = $this->getIndex('i', $wlen);
+                foreach ($widx as $wid) {
+                    $index[$wid] = $this->updateTuple($index[$wid], $pid, 0);
+                }
+                $this->saveIndex('i', $wlen, $index);
+            }
+        }
+        // Save the reverse index
+        if (!$this->saveIndexKey('pageword', '', $pid, "")) {
+            $this->unlock();
+            return false;
+        }
+
+        $this->saveIndexKey('title', '', $pid, "");
+        $keyidx = $this->getIndex('metadata', '');
+        foreach ($keyidx as $metaname) {
+            $val_idx = explode(':', $this->getIndexKey($metaname.'_p', '', $pid));
+            $meta_idx = $this->getIndex($metaname.'_i', '');
+            foreach ($val_idx as $id) {
+                $meta_idx[$id] = $this->updateTuple($meta_idx[$id], $pid, 0);
+            }
+            $this->saveIndex($metaname.'_i', '', $meta_idx);
+            $this->saveIndexKey($metaname.'_p', '', $pid, '');
+        }
 
-    // ensure the deaccented or romanised page names of internal links are added to the token array
-    // (this is necessary for the backlink function -- there maybe a better way!)
-    if ($conf['deaccent']) {
-        $links = p_get_metadata($page,'relation references');
+        $this->unlock();
+        return true;
+    }
 
-        if (!empty($links)) {
-            $tmp = join(' ',array_keys($links));                // make a single string
-            $tmp = strtr($tmp, ':', ' ');                       // replace namespace separator with a space
-            $link_tokens = array_unique(explode(' ', $tmp));    // break into tokens
+    /**
+     * Split the text into words for fulltext search
+     *
+     * TODO: does this also need &$stopwords ?
+     *
+     * @triggers INDEXER_TEXT_PREPARE
+     * This event allows plugins to modify the text before it gets tokenized.
+     * Plugins intercepting this event should also intercept INDEX_VERSION_GET
+     *
+     * @param string    $text   plain text
+     * @param boolean   $wc     are wildcards allowed?
+     * @return array            list of words in the text
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     * @author Andreas Gohr <andi@splitbrain.org>
+     */
+    public function tokenizer($text, $wc=false) {
+        global $conf;
+        $words = array();
+        $wc = ($wc) ? '' : '\*';
+        $stopwords =& idx_get_stopwords();
 
-            foreach ($link_tokens as $link_token) {
-                if (isset($tokens[$link_token])) continue;
-                $tokens[$link_token] = 1;
+        // prepare the text to be tokenized
+        $evt = new Doku_Event('INDEXER_TEXT_PREPARE', $text);
+        if ($evt->advise_before(true)) {
+            if (preg_match('/[^0-9A-Za-z ]/u', $text)) {
+                // handle asian chars as single words (may fail on older PHP version)
+                $asia = @preg_replace('/('.IDX_ASIAN.')/u', ' \1 ', $text);
+                if (!is_null($asia)) $text = $asia; // recover from regexp falure
             }
         }
+        $evt->advise_after();
+        unset($evt);
+
+        $text = strtr($text,
+                       array(
+                           "\r" => ' ',
+                           "\n" => ' ',
+                           "\t" => ' ',
+                           "\xC2\xAD" => '', //soft-hyphen
+                       )
+                     );
+        if (preg_match('/[^0-9A-Za-z ]/u', $text))
+            $text = utf8_stripspecials($text, ' ', '\._\-:'.$wc);
+
+        $wordlist = explode(' ', $text);
+        foreach ($wordlist as $i => &$word) {
+            $word = (preg_match('/[^0-9A-Za-z]/u', $word)) ?
+                utf8_strtolower($word) : strtolower($word);
+            if ((!is_numeric($word) && strlen($word) < IDX_MINWORDLENGTH)
+              || array_search($word, $stopwords) !== false)
+                unset($wordlist[$i]);
+        }
+        return array_values($wordlist);
     }
 
-    $words = array();
-    foreach ($tokens as $word => $count) {
-        $arr = idx_tokenizer($word,$stopwords);
-        $arr = array_count_values($arr);
-        foreach ($arr as $w => $c) {
-            $l = wordlen($w);
-            if(isset($words[$l])){
-                $words[$l][$w] = $c * $count + (isset($words[$l][$w]) ? $words[$l][$w] : 0);
-            }else{
-                $words[$l] = array($w => $c * $count);
+    /**
+     * Find pages in the fulltext index containing the words,
+     *
+     * The search words must be pre-tokenized, meaning only letters and
+     * numbers with an optional wildcard
+     *
+     * The returned array will have the original tokens as key. The values
+     * in the returned list is an array with the page names as keys and the
+     * number of times that token appears on the page as value.
+     *
+     * @param arrayref  $tokens list of words to search for
+     * @return array            list of page names with usage counts
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     * @author Andreas Gohr <andi@splitbrain.org>
+     */
+    public function lookup(&$tokens) {
+        $result = array();
+        $wids = $this->getIndexWords($tokens, $result);
+        if (empty($wids)) return array();
+        // load known words and documents
+        $page_idx = $this->getIndex('page', '');
+        $docs = array();
+        foreach (array_keys($wids) as $wlen) {
+            $wids[$wlen] = array_unique($wids[$wlen]);
+            $index = $this->getIndex('i', $wlen);
+            foreach($wids[$wlen] as $ixid) {
+                if ($ixid < count($index))
+                    $docs["$wlen*$ixid"] = $this->parseTuples($page_idx, $index[$ixid]);
+            }
+        }
+        // merge found pages into final result array
+        $final = array();
+        foreach ($result as $word => $res) {
+            $final[$word] = array();
+            foreach ($res as $wid) {
+                $hits = &$docs[$wid];
+                foreach ($hits as $hitkey => $hitcnt) {
+                    // make sure the document still exists
+                    if (!page_exists($hitkey, '', false)) continue;
+                    if (!isset($final[$word][$hitkey]))
+                        $final[$word][$hitkey] = $hitcnt;
+                    else
+                        $final[$word][$hitkey] += $hitcnt;
+                }
             }
         }
+        return $final;
     }
 
-    // arrive here with $words = array(wordlen => array(word => frequency))
+    /**
+     * Find pages containing a metadata key.
+     *
+     * The metadata values are compared as case-sensitive strings. Pass a
+     * callback function that returns true or false to use a different
+     * comparison function. The function will be called with the $value being
+     * searched for as the first argument, and the word in the index as the
+     * second argument. The function preg_match can be used directly if the
+     * values are regexes.
+     *
+     * @param string    $key    name of the metadata key to look for
+     * @param string    $value  search term to look for, must be a string or array of strings
+     * @param callback  $func   comparison function
+     * @return array            lists with page names, keys are query values if $value is array
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     * @author Michael Hamann <michael@content-space.de>
+     */
+    public function lookupKey($key, &$value, $func=null) {
+        if (!is_array($value))
+            $value_array = array($value);
+        else
+            $value_array =& $value;
+
+        // the matching ids for the provided value(s)
+        $value_ids = array();
+
+        $metaname = idx_cleanName($key);
 
-    $index = array(); //resulting index
-    foreach (array_keys($words) as $wlen){
-        $word_idx = idx_getIndex('w',$wlen);
-        foreach ($words[$wlen] as $word => $freq) {
-            $wid = array_search("$word\n",$word_idx);
-            if(!is_int($wid)){
-                $wid = count($word_idx);
-                $word_idx[] = "$word\n";
+        // get all words in order to search the matching ids
+        if ($key == 'title') {
+            $words = $this->getIndex('title', '');
+        } else {
+            $words = $this->getIndex($metaname.'_w', '');
+        }
+
+        if (!is_null($func)) {
+            foreach ($value_array as $val) {
+                foreach ($words as $i => $word) {
+                    if (call_user_func_array($func, array($val, $word)))
+                        $value_ids[$i][] = $val;
+                }
+            }
+        } else {
+            foreach ($value_array as $val) {
+                $xval = $val;
+                $caret = '^';
+                $dollar = '$';
+                // check for wildcards
+                if (substr($xval, 0, 1) == '*') {
+                    $xval = substr($xval, 1);
+                    $caret = '';
+                }
+                if (substr($xval, -1, 1) == '*') {
+                    $xval = substr($xval, 0, -1);
+                    $dollar = '';
+                }
+                if (!$caret || !$dollar) {
+                    $re = $caret.preg_quote($xval, '/').$dollar;
+                    foreach(array_keys(preg_grep('/'.$re.'/', $words)) as $i)
+                        $value_ids[$i][] = $val;
+                } else {
+                    if (($i = array_search($val, $words)) !== false)
+                        $value_ids[$i][] = $val;
+                }
             }
-            if(!isset($index[$wlen]))
-                $index[$wlen] = array();
-            $index[$wlen][$wid] = $freq;
         }
 
-        // save back word index
-        if(!idx_saveIndex('w',$wlen,$word_idx)){
-            trigger_error("Failed to write word index", E_USER_ERROR);
-            return false;
+        unset($words); // free the used memory
+
+        // initialize the result so it won't be null
+        $result = array();
+        foreach ($value_array as $val) {
+            $result[$val] = array();
         }
+
+        $page_idx = $this->getIndex('page', '');
+
+        // Special handling for titles
+        if ($key == 'title') {
+            foreach ($value_ids as $pid => $val_list) {
+                $page = $page_idx[$pid];
+                foreach ($val_list as $val) {
+                    $result[$val][] = $page;
+                }
+            }
+        } else {
+            // load all lines and pages so the used lines can be taken and matched with the pages
+            $lines = $this->getIndex($metaname.'_i', '');
+
+            foreach ($value_ids as $value_id => $val_list) {
+                // parse the tuples of the form page_id*1:page2_id*1 and so on, return value
+                // is an array with page_id => 1, page2_id => 1 etc. so take the keys only
+                $pages = array_keys($this->parseTuples($page_idx, $lines[$value_id]));
+                foreach ($val_list as $val) {
+                    $result[$val] = array_merge($result[$val], $pages);
+                }
+            }
+        }
+        if (!is_array($value)) $result = $result[$value];
+        return $result;
     }
 
-    return $index;
-}
+    /**
+     * Find the index ID of each search term.
+     *
+     * The query terms should only contain valid characters, with a '*' at
+     * either the beginning or end of the word (or both).
+     * The $result parameter can be used to merge the index locations with
+     * the appropriate query term.
+     *
+     * @param arrayref  $words  The query terms.
+     * @param arrayref  $result Set to word => array("length*id" ...)
+     * @return array            Set to length => array(id ...)
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     */
+    protected function getIndexWords(&$words, &$result) {
+        $tokens = array();
+        $tokenlength = array();
+        $tokenwild = array();
+        foreach ($words as $word) {
+            $result[$word] = array();
+            $caret = '^';
+            $dollar = '$';
+            $xword = $word;
+            $wlen = wordlen($word);
 
-/**
- * Adds/updates the search for the given page
- *
- * This is the core function of the indexer which does most
- * of the work. This function needs to be called with proper
- * locking!
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function idx_addPage($page){
-    global $conf;
+            // check for wildcards
+            if (substr($xword, 0, 1) == '*') {
+                $xword = substr($xword, 1);
+                $caret = '';
+                $wlen -= 1;
+            }
+            if (substr($xword, -1, 1) == '*') {
+                $xword = substr($xword, 0, -1);
+                $dollar = '';
+                $wlen -= 1;
+            }
+            if ($wlen < IDX_MINWORDLENGTH && $caret && $dollar && !is_numeric($xword))
+                continue;
+            if (!isset($tokens[$xword]))
+                $tokenlength[$wlen][] = $xword;
+            if (!$caret || !$dollar) {
+                $re = $caret.preg_quote($xword, '/').$dollar;
+                $tokens[$xword][] = array($word, '/'.$re.'/');
+                if (!isset($tokenwild[$xword]))
+                    $tokenwild[$xword] = $wlen;
+            } else {
+                $tokens[$xword][] = array($word, null);
+            }
+        }
+        asort($tokenwild);
+        // $tokens = array( base word => array( [ query term , regexp ] ... ) ... )
+        // $tokenlength = array( base word length => base word ... )
+        // $tokenwild = array( base word => base word length ... )
+        $length_filter = empty($tokenwild) ? $tokenlength : min(array_keys($tokenlength));
+        $indexes_known = $this->indexLengths($length_filter);
+        if (!empty($tokenwild)) sort($indexes_known);
+        // get word IDs
+        $wids = array();
+        foreach ($indexes_known as $ixlen) {
+            $word_idx = $this->getIndex('w', $ixlen);
+            // handle exact search
+            if (isset($tokenlength[$ixlen])) {
+                foreach ($tokenlength[$ixlen] as $xword) {
+                    $wid = array_search($xword, $word_idx);
+                    if ($wid !== false) {
+                        $wids[$ixlen][] = $wid;
+                        foreach ($tokens[$xword] as $w)
+                            $result[$w[0]][] = "$ixlen*$wid";
+                    }
+                }
+            }
+            // handle wildcard search
+            foreach ($tokenwild as $xword => $wlen) {
+                if ($wlen >= $ixlen) break;
+                foreach ($tokens[$xword] as $w) {
+                    if (is_null($w[1])) continue;
+                    foreach(array_keys(preg_grep($w[1], $word_idx)) as $wid) {
+                        $wids[$ixlen][] = $wid;
+                        $result[$w[0]][] = "$ixlen*$wid";
+                    }
+                }
+            }
+        }
+        return $wids;
+    }
 
-    // load known documents
-    $page_idx = idx_getIndex('page','');
+    /**
+     * Return a list of all pages
+     * Warning: pages may not exist!
+     *
+     * @param string    $key    list only pages containing the metadata key (optional)
+     * @return array            list of page names
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     */
+    public function getPages($key=null) {
+        $page_idx = $this->getIndex('page', '');
+        if (is_null($key)) return $page_idx;
 
-    // get page id (this is the linenumber in page.idx)
-    $pid = array_search("$page\n",$page_idx);
-    if(!is_int($pid)){
-        $pid = count($page_idx);
-        // page was new - write back
-        if (!idx_appendIndex('page','',"$page\n")){
-            trigger_error("Failed to write page index", E_USER_ERROR);
-            return false;
+        $metaname = idx_cleanName($key);
+
+        // Special handling for titles
+        if ($key == 'title') {
+            $title_idx = $this->getIndex('title', '');
+            array_splice($page_idx, count($title_idx));
+            foreach ($title_idx as $i => $title)
+                if ($title === "") unset($page_idx[$i]);
+            return array_values($page_idx);
+        }
+
+        $pages = array();
+        $lines = $this->getIndex($metaname.'_i', '');
+        foreach ($lines as $line) {
+            $pages = array_merge($pages, $this->parseTuples($page_idx, $line));
         }
+        return array_keys($pages);
     }
-    unset($page_idx); // free memory
 
-    idx_saveIndexLine('title', '', $pid, p_get_first_heading($page, true));
+    /**
+     * Return a list of words sorted by number of times used
+     *
+     * @param int       $min    bottom frequency threshold
+     * @param int       $max    upper frequency limit. No limit if $max<$min
+     * @param int       $length minimum length of words to count
+     * @param string    $key    metadata key to list. Uses the fulltext index if not given
+     * @return array            list of words as the keys and frequency as values
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     */
+    public function histogram($min=1, $max=0, $minlen=3, $key=null) {
+        if ($min < 1)
+            $min = 1;
+        if ($max < $min)
+            $max = 0;
 
-    $pagewords = array();
-    // get word usage in page
-    $words = idx_getPageWords($page);
-    if($words === false) return false;
+        $result = array();
 
-    if(!empty($words)) {
-        foreach(array_keys($words) as $wlen){
-            $index = idx_getIndex('i',$wlen);
-            foreach($words[$wlen] as $wid => $freq){
-                if($wid<count($index)){
-                    $index[$wid] = idx_updateIndexLine($index[$wid],$pid,$freq);
-                }else{
-                    // New words **should** have been added in increasing order
-                    // starting with the first unassigned index.
-                    // If someone can show how this isn't true, then I'll need to sort
-                    // or do something special.
-                    $index[$wid] = idx_updateIndexLine('',$pid,$freq);
+        if ($key == 'title') {
+            $index = $this->getIndex('title', '');
+            $index = array_count_values($index);
+            foreach ($index as $val => $cnt) {
+                if ($cnt >= $min && (!$max || $cnt <= $max) && strlen($val) >= $minlen)
+                    $result[$val] = $cnt;
+            }
+        }
+        elseif (!is_null($key)) {
+            $metaname = idx_cleanName($key);
+            $index = $this->getIndex($metaname.'_i', '');
+            $val_idx = array();
+            foreach ($index as $wid => $line) {
+                $freq = $this->countTuples($line);
+                if ($freq >= $min && (!$max || $freq <= $max) && strlen($val) >= $minlen)
+                    $val_idx[$wid] = $freq;
+            }
+            if (!empty($val_idx)) {
+                $words = $this->getIndex($metaname.'_w', '');
+                foreach ($val_idx as $wid => $freq)
+                    $result[$words[$wid]] = $freq;
+            }
+        }
+        else {
+            $lengths = idx_listIndexLengths();
+            foreach ($lengths as $length) {
+                if ($length < $minlen) continue;
+                $index = $this->getIndex('i', $length);
+                $words = null;
+                foreach ($index as $wid => $line) {
+                    $freq = $this->countTuples($line);
+                    if ($freq >= $min && (!$max || $freq <= $max)) {
+                        if ($words === null)
+                            $words = $this->getIndex('w', $length);
+                        $result[$words[$wid]] = $freq;
+                    }
                 }
-                $pagewords[] = "$wlen*$wid";
             }
-            // save back word index
-            if(!idx_saveIndex('i',$wlen,$index)){
-                trigger_error("Failed to write index", E_USER_ERROR);
+        }
+
+        arsort($result);
+        return $result;
+    }
+
+    /**
+     * Lock the indexer.
+     *
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     */
+    protected function lock() {
+        global $conf;
+        $status = true;
+        $run = 0;
+        $lock = $conf['lockdir'].'/_indexer.lock';
+        while (!@mkdir($lock, $conf['dmode'])) {
+            usleep(50);
+            if(is_dir($lock) && time()-@filemtime($lock) > 60*5){
+                // looks like a stale lock - remove it
+                if (!@rmdir($lock)) {
+                    $status = "removing the stale lock failed";
+                    return false;
+                } else {
+                    $status = "stale lock removed";
+                }
+            }elseif($run++ == 1000){
+                // we waited 5 seconds for that lock
                 return false;
             }
         }
+        if ($conf['dperm'])
+            chmod($lock, $conf['dperm']);
+        return $status;
     }
 
-    // Remove obsolete index entries
-    $pageword_idx = trim(idx_getIndexLine('pageword','',$pid));
-    if ($pageword_idx !== '') {
-        $oldwords = explode(':',$pageword_idx);
-        $delwords = array_diff($oldwords, $pagewords);
-        $upwords = array();
-        foreach ($delwords as $word) {
-            if($word=='') continue;
-            list($wlen,$wid) = explode('*',$word);
-            $wid = (int)$wid;
-            $upwords[$wlen][] = $wid;
+    /**
+     * Release the indexer lock.
+     *
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     */
+    protected function unlock() {
+        global $conf;
+        @rmdir($conf['lockdir'].'/_indexer.lock');
+        return true;
+    }
+
+    /**
+     * Retrieve the entire index.
+     *
+     * The $suffix argument is for an index that is split into
+     * multiple parts. Different index files should use different
+     * base names.
+     *
+     * @param string    $idx    name of the index
+     * @param string    $suffix subpart identifier
+     * @return array            list of lines without CR or LF
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     */
+    protected function getIndex($idx, $suffix) {
+        global $conf;
+        $fn = $conf['indexdir'].'/'.$idx.$suffix.'.idx';
+        if (!@file_exists($fn)) return array();
+        return file($fn, FILE_IGNORE_NEW_LINES);
+    }
+
+    /**
+     * Replace the contents of the index with an array.
+     *
+     * @param string    $idx    name of the index
+     * @param string    $suffix subpart identifier
+     * @param arrayref  $linex  list of lines without LF
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     */
+    protected function saveIndex($idx, $suffix, &$lines) {
+        global $conf;
+        $fn = $conf['indexdir'].'/'.$idx.$suffix;
+        $fh = @fopen($fn.'.tmp', 'w');
+        if (!$fh) return false;
+        fwrite($fh, join("\n", $lines));
+        fclose($fh);
+        if (isset($conf['fperm']))
+            chmod($fn.'.tmp', $conf['fperm']);
+        io_rename($fn.'.tmp', $fn.'.idx');
+        if ($suffix !== '')
+            $this->cacheIndexDir($idx, $suffix, empty($lines));
+        return true;
+    }
+
+    /**
+     * Retrieve a line from the index.
+     *
+     * @param string    $idx    name of the index
+     * @param string    $suffix subpart identifier
+     * @param int       $id     the line number
+     * @return string           a line with trailing whitespace removed
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     */
+    protected function getIndexKey($idx, $suffix, $id) {
+        global $conf;
+        $fn = $conf['indexdir'].'/'.$idx.$suffix.'.idx';
+        if (!@file_exists($fn)) return '';
+        $fh = @fopen($fn, 'r');
+        if (!$fh) return '';
+        $ln = -1;
+        while (($line = fgets($fh)) !== false) {
+            if (++$ln == $id) break;
         }
-        foreach ($upwords as $wlen => $widx) {
-            $index = idx_getIndex('i',$wlen);
-            foreach ($widx as $wid) {
-                $index[$wid] = idx_updateIndexLine($index[$wid],$pid,0);
+        fclose($fh);
+        return rtrim((string)$line);
+    }
+
+    /**
+     * Write a line into the index.
+     *
+     * @param string    $idx    name of the index
+     * @param string    $suffix subpart identifier
+     * @param int       $id     the line number
+     * @param string    $line   line to write
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     */
+    protected function saveIndexKey($idx, $suffix, $id, $line) {
+        global $conf;
+        if (substr($line, -1) != "\n")
+            $line .= "\n";
+        $fn = $conf['indexdir'].'/'.$idx.$suffix;
+        $fh = @fopen($fn.'.tmp', 'w');
+        if (!fh) return false;
+        $ih = @fopen($fn.'.idx', 'r');
+        if ($ih) {
+            $ln = -1;
+            while (($curline = fgets($ih)) !== false) {
+                fwrite($fh, (++$ln == $id) ? $line : $curline);
+            }
+            if ($id > $ln) {
+                while ($id > ++$ln)
+                    fwrite($fh, "\n");
+                fwrite($fh, $line);
             }
-            idx_saveIndex('i',$wlen,$index);
+            fclose($ih);
+        } else {
+            $ln = -1;
+            while ($id > ++$ln)
+                fwrite($fh, "\n");
+            fwrite($fh, $line);
         }
+        fclose($fh);
+        if (isset($conf['fperm']))
+            chmod($fn.'.tmp', $conf['fperm']);
+        io_rename($fn.'.tmp', $fn.'.idx');
+        if ($suffix !== '')
+            $this->cacheIndexDir($idx, $suffix);
+        return true;
     }
-    // Save the reverse index
-    $pageword_idx = join(':',$pagewords)."\n";
-    if(!idx_saveIndexLine('pageword','',$pid,$pageword_idx)){
-        trigger_error("Failed to write word index", E_USER_ERROR);
-        return false;
+
+    /**
+     * Retrieve or insert a value in the index.
+     *
+     * @param string    $idx    name of the index
+     * @param string    $suffix subpart identifier
+     * @param string    $value  line to find in the index
+     * @return int              line number of the value in the index
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     */
+    protected function addIndexKey($idx, $suffix, $value) {
+        $index = $this->getIndex($idx, $suffix);
+        $id = array_search($value, $index);
+        if ($id === false) {
+            $id = count($index);
+            $index[$id] = $value;
+            if (!$this->saveIndex($idx, $suffix, $index)) {
+                trigger_error("Failed to write $idx index", E_USER_ERROR);
+                return false;
+            }
+        }
+        return $id;
+    }
+
+    protected function cacheIndexDir($idx, $suffix, $delete=false) {
+        global $conf;
+        if ($idx == 'i')
+            $cachename = $conf['indexdir'].'/lengths';
+        else
+            $cachename = $conf['indexdir'].'/'.$idx.'lengths';
+        $lengths = @file($cachename.'.idx', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
+        if ($lengths === false) $lengths = array();
+        $old = array_search((string)$suffix, $lengths);
+        if (empty($lines)) {
+            if ($old === false) return;
+            unset($lengths[$old]);
+        } else {
+            if ($old !== false) return;
+            $lengths[] = $suffix;
+            sort($lengths);
+        }
+        $fh = @fopen($cachename.'.tmp', 'w');
+        if (!$fh) {
+            trigger_error("Failed to write index cache", E_USER_ERROR);
+            return;
+        }
+        @fwrite($fh, implode("\n", $lengths));
+        @fclose($fh);
+        if (isset($conf['fperm']))
+            chmod($cachename.'.tmp', $conf['fperm']);
+        io_rename($cachename.'.tmp', $cachename.'.idx');
+    }
+
+    /**
+     * Get the list of lengths indexed in the wiki.
+     *
+     * Read the index directory or a cache file and returns
+     * a sorted array of lengths of the words used in the wiki.
+     *
+     * @author YoBoY <yoboy.leguesh@gmail.com>
+     */
+    protected function listIndexLengths() {
+        global $conf;
+        $cachename = $conf['indexdir'].'/lengths';
+        clearstatcache();
+        if (@file_exists($cachename.'.idx')) {
+            $lengths = @file($cachename.'.idx', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
+            if ($lengths !== false) {
+                $idx = array();
+                foreach ($lengths as $length)
+                    $idx[] = (int)$length;
+                return $idx;
+            }
+        }
+
+        $dir = @opendir($conf['indexdir']);
+        if ($dir === false)
+            return array();
+        $lengths[] = array();
+        while (($f = readdir($dir)) !== false) {
+            if (substr($f, 0, 1) == 'i' && substr($f, -4) == '.idx') {
+                $i = substr($f, 1, -4);
+                if (is_numeric($i))
+                    $lengths[] = (int)$i;
+            }
+        }
+        closedir($dir);
+        sort($lengths);
+        // save this in a file
+        $fh = @fopen($cachename.'.tmp', 'w');
+        if (!$fh) {
+            trigger_error("Failed to write index cache", E_USER_ERROR);
+            return;
+        }
+        @fwrite($fh, implode("\n", $lengths));
+        @fclose($fh);
+        if (isset($conf['fperm']))
+            chmod($cachename.'.tmp', $conf['fperm']);
+        io_rename($cachename.'.tmp', $cachename.'.idx');
+
+        return $lengths;
+    }
+
+    /**
+     * Get the word lengths that have been indexed.
+     *
+     * Reads the index directory and returns an array of lengths
+     * that there are indices for.
+     *
+     * @author YoBoY <yoboy.leguesh@gmail.com>
+     */
+    protected function indexLengths($filter) {
+        global $conf;
+        $idx = array();
+        if (is_array($filter)) {
+            // testing if index files exist only
+            $path = $conf['indexdir']."/i";
+            foreach ($filter as $key => $value) {
+                if (@file_exists($path.$key.'.idx'))
+                    $idx[] = $key;
+            }
+        } else {
+            $lengths = idx_listIndexLengths();
+            foreach ($lengths as $key => $length) {
+                // keep all the values equal or superior
+                if ((int)$length >= (int)$filter)
+                    $idx[] = $length;
+            }
+        }
+        return $idx;
     }
 
-    return true;
+    /**
+     * Insert or replace a tuple in a line.
+     *
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     */
+    protected function updateTuple($line, $id, $count) {
+        $newLine = $line;
+        if ($newLine !== '')
+            $newLine = preg_replace('/(^|:)'.preg_quote($id,'/').'\*\d*/', '', $newLine);
+        $newLine = trim($newLine, ':');
+        if ($count) {
+            if (strlen($newLine) > 0)
+                return "$id*$count:".$newLine;
+            else
+                return "$id*$count".$newLine;
+        }
+        return $newLine;
+    }
+
+    /**
+     * Split a line into an array of tuples.
+     *
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     * @author Andreas Gohr <andi@splitbrain.org>
+     */
+    protected function parseTuples(&$keys, $line) {
+        $result = array();
+        if ($line == '') return $result;
+        $parts = explode(':', $line);
+        foreach ($parts as $tuple) {
+            if ($tuple === '') continue;
+            list($key, $cnt) = explode('*', $tuple);
+            if (!$cnt) continue;
+            $key = $keys[$key];
+            if (!$key) continue;
+            $result[$key] = $cnt;
+        }
+        return $result;
+    }
+
+    /**
+     * Sum the counts in a list of tuples.
+     *
+     * @author Tom N Harris <tnharris@whoopdedo.org>
+     */
+    protected function countTuples($line) {
+        $freq = 0;
+        $parts = explode(':', $line);
+        foreach ($parts as $tuple) {
+            if ($tuple === '') continue;
+            list($pid, $cnt) = explode('*', $tuple);
+            $freq += (int)$cnt;
+        }
+        return $freq;
+    }
 }
 
 /**
- * Write a new index line to the filehandle
+ * Create an instance of the indexer.
  *
- * This function writes an line for the index file to the
- * given filehandle. It removes the given document from
- * the given line and readds it when $count is >0.
+ * @return object               a Doku_Indexer
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_get_indexer() {
+    static $Indexer = null;
+    if (is_null($Indexer)) {
+        $Indexer = new Doku_Indexer();
+    }
+    return $Indexer;
+}
+
+/**
+ * Returns words that will be ignored.
  *
- * @deprecated - see idx_updateIndexLine
- * @author Andreas Gohr <andi@splitbrain.org>
+ * @return array                list of stop words
+ * @author Tom N Harris <tnharris@whoopdedo.org>
  */
-function idx_writeIndexLine($fh,$line,$pid,$count){
-    fwrite($fh,idx_updateIndexLine($line,$pid,$count));
+function & idx_get_stopwords() {
+    static $stopwords = null;
+    if (is_null($stopwords)) {
+        global $conf;
+        $swfile = DOKU_INC.'inc/lang/'.$conf['lang'].'/stopwords.txt';
+        if(@file_exists($swfile)){
+            $stopwords = file($swfile, FILE_IGNORE_NEW_LINES);
+        }else{
+            $stopwords = array();
+        }
+    }
+    return $stopwords;
 }
 
 /**
- * Modify an index line with new information
+ * Adds/updates the search index for the given page
  *
- * This returns a line of the index. It removes the
- * given document from the line and readds it if
- * $count is >0.
+ * Locking is handled internally.
  *
+ * @param string        $page   name of the page to index
+ * @param boolean       $verbose    print status messages
+ * @return boolean              the function completed successfully
  * @author Tom N Harris <tnharris@whoopdedo.org>
- * @author Andreas Gohr <andi@splitbrain.org>
  */
-function idx_updateIndexLine($line,$pid,$count){
-    $line = trim($line);
-    $updated = array();
-    if($line != ''){
-        $parts = explode(':',$line);
-        // remove doc from given line
-        foreach($parts as $part){
-            if($part == '') continue;
-            list($doc,$cnt) = explode('*',$part);
-            if($doc != $pid){
-                $updated[] = $part;
+function idx_addPage($page, $verbose=false) {
+    // check if indexing needed
+    $idxtag = metaFN($page,'.indexed');
+    if(@file_exists($idxtag)){
+        if(trim(io_readFile($idxtag)) == idx_get_version()){
+            $last = @filemtime($idxtag);
+            if($last > @filemtime(wikiFN($ID))){
+                if ($verbose) print("Indexer: index for $page up to date".DOKU_LF);
+                return false;
+            }
+        }
+    }
+
+    if (!page_exists($page)) {
+        if (!@file_exists($idxtag)) {
+            if ($verbose) print("Indexer: $page does not exist, ignoring".DOKU_LF);
+            return false;
+        }
+        $Indexer = idx_get_indexer();
+        $result = $Indexer->deletePage($page);
+        if ($result === "locked") {
+            if ($verbose) print("Indexer: locked".DOKU_LF);
+            return false;
+        }
+        @unlink($idxtag);
+        return $result;
+    }
+    $indexenabled = p_get_metadata($page, 'internal index', false);
+    if ($indexenabled === false) {
+        $result = false;
+        if (@file_exists($idxtag)) {
+            $Indexer = idx_get_indexer();
+            $result = $Indexer->deletePage($page);
+            if ($result === "locked") {
+                if ($verbose) print("Indexer: locked".DOKU_LF);
+                return false;
             }
+            @unlink($idxtag);
         }
+        if ($verbose) print("Indexer: index disabled for $page".DOKU_LF);
+        return $result;
     }
 
-    // add doc
-    if ($count){
-        $updated[] = "$pid*$count";
+    $body = '';
+    $metadata = array();
+    $metadata['title'] = p_get_metadata($page, 'title', false);
+    if (($references = p_get_metadata($page, 'relation references', false)) !== null)
+        $metadata['relation_references'] = array_keys($references);
+    else
+        $metadata['relation_references'] = array();
+    $data = compact('page', 'body', 'metadata');
+    $evt = new Doku_Event('INDEXER_PAGE_ADD', $data);
+    if ($evt->advise_before()) $data['body'] = $data['body'] . " " . rawWiki($page);
+    $evt->advise_after();
+    unset($evt);
+    extract($data);
+
+    $Indexer = idx_get_indexer();
+    $result = $Indexer->addPageWords($page, $body);
+    if ($result === "locked") {
+        if ($verbose) print("Indexer: locked".DOKU_LF);
+        return false;
+    }
+
+    if ($result) {
+        $result = $Indexer->addMetaKeys($page, $metadata);
+        if ($result === "locked") {
+            if ($verbose) print("Indexer: locked".DOKU_LF);
+            return false;
+        }
+    }
+
+    if ($result)
+        io_saveFile(metaFN($page,'.indexed'), idx_get_version());
+    if ($verbose) {
+        print("Indexer: finished".DOKU_LF);
+        return true;
     }
+    return $result;
+}
 
-    return join(':',$updated)."\n";
+/**
+ * Find tokens in the fulltext index
+ *
+ * Takes an array of words and will return a list of matching
+ * pages for each one.
+ *
+ * Important: No ACL checking is done here! All results are
+ *            returned, regardless of permissions
+ *
+ * @param arrayref      $words  list of words to search for
+ * @return array                list of pages found, associated with the search terms
+ */
+function idx_lookup(&$words) {
+    $Indexer = idx_get_indexer();
+    return $Indexer->lookup($words);
 }
 
 /**
- * Get the list of lenghts indexed in the wiki
+ * Split a string into tokens
+ *
+ */
+function idx_tokenizer($string, $wc=false) {
+    $Indexer = idx_get_indexer();
+    return $Indexer->tokenizer($string, $wc);
+}
+
+/* For compatibility */
+
+/**
+ * Read the list of words in an index (if it exists).
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_getIndex($idx, $suffix) {
+    global $conf;
+    $fn = $conf['indexdir'].'/'.$idx.$suffix.'.idx';
+    if (!@file_exists($fn)) return array();
+    return file($fn);
+}
+
+/**
+ * Get the list of lengths indexed in the wiki.
  *
  * Read the index directory or a cache file and returns
  * a sorted array of lengths of the words used in the wiki.
@@ -438,10 +1300,11 @@ function idx_listIndexLengths() {
         $docache = false;
     } else {
         clearstatcache();
-        if (@file_exists($conf['indexdir'].'/lengths.idx') and (time() < @filemtime($conf['indexdir'].'/lengths.idx') + $conf['readdircache'])) {
-            if (($lengths = @file($conf['indexdir'].'/lengths.idx', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ) !== false) {
+        if (@file_exists($conf['indexdir'].'/lengths.idx')
+        && (time() < @filemtime($conf['indexdir'].'/lengths.idx') + $conf['readdircache'])) {
+            if (($lengths = @file($conf['indexdir'].'/lengths.idx', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)) !== false) {
                 $idx = array();
-                foreach ( $lengths as $length) {
+                foreach ($lengths as $length) {
                     $idx[] = (int)$length;
                 }
                 return $idx;
@@ -450,24 +1313,24 @@ function idx_listIndexLengths() {
         $docache = true;
     }
 
-    if ($conf['readdircache'] == 0 or $docache ) {
+    if ($conf['readdircache'] == 0 || $docache) {
         $dir = @opendir($conf['indexdir']);
-        if($dir===false)
+        if ($dir === false)
             return array();
         $idx[] = array();
         while (($f = readdir($dir)) !== false) {
-            if (substr($f,0,1) == 'i' && substr($f,-4) == '.idx'){
-                $i = substr($f,1,-4);
+            if (substr($f, 0, 1) == 'i' && substr($f, -4) == '.idx') {
+                $i = substr($f, 1, -4);
                 if (is_numeric($i))
                     $idx[] = (int)$i;
             }
         }
         closedir($dir);
         sort($idx);
-        // we save this in a file.
-        if ($docache === true) {
-            $handle = @fopen($conf['indexdir'].'/lengths.idx','w');
-            @fwrite($handle, implode("\n",$idx));
+        // save this in a file
+        if ($docache) {
+            $handle = @fopen($conf['indexdir'].'/lengths.idx', 'w');
+            @fwrite($handle, implode("\n", $idx));
             @fclose($handle);
         }
         return $idx;
@@ -484,232 +1347,40 @@ function idx_listIndexLengths() {
  *
  * @author YoBoY <yoboy.leguesh@gmail.com>
  */
-function idx_indexLengths(&$filter){
+function idx_indexLengths($filter) {
     global $conf;
     $idx = array();
-    if (is_array($filter)){
-        // testing if index files exists only
+    if (is_array($filter)) {
+        // testing if index files exist only
+        $path = $conf['indexdir']."/i";
         foreach ($filter as $key => $value) {
-            if (@file_exists($conf['indexdir']."/i$key.idx")) {
+            if (@file_exists($path.$key.'.idx'))
                 $idx[] = $key;
-            }
         }
     } else {
         $lengths = idx_listIndexLengths();
-        foreach ( $lengths as $key => $length) {
-            // we keep all the values equal or superior 
-            if ((int)$length >= (int)$filter) {
+        foreach ($lengths as $key => $length) {
+            // keep all the values equal or superior
+            if ((int)$length >= (int)$filter)
                 $idx[] = $length;
-            }
         }
     }
     return $idx;
 }
 
 /**
- * Find the the index number of each search term.
+ * Clean a name of a key for use as a file name.
  *
- * This will group together words that appear in the same index.
- * So it should perform better, because it only opens each index once.
- * Actually, it's not that great. (in my experience) Probably because of the disk cache.
- * And the sorted function does more work, making it slightly slower in some cases.
- *
- * @param array    $words   The query terms. Words should only contain valid characters,
- *                          with a '*' at either the beginning or end of the word (or both)
- * @param arrayref $result  Set to word => array("length*id" ...), use this to merge the
- *                          index locations with the appropriate query term.
- * @return array            Set to length => array(id ...)
+ * Romanizes non-latin characters, then strips away anything that's
+ * not a letter, number, or underscore.
  *
  * @author Tom N Harris <tnharris@whoopdedo.org>
  */
-function idx_getIndexWordsSorted($words,&$result){
-    // parse and sort tokens
-    $tokens = array();
-    $tokenlength = array();
-    $tokenwild = array();
-    foreach($words as $word){
-        $result[$word] = array();
-        $wild = 0;
-        $xword = $word;
-        $wlen = wordlen($word);
-
-        // check for wildcards
-        if(substr($xword,0,1) == '*'){
-            $xword = substr($xword,1);
-            $wild |= 1;
-            $wlen -= 1;
-        }
-        if(substr($xword,-1,1) == '*'){
-            $xword = substr($xword,0,-1);
-            $wild |= 2;
-            $wlen -= 1;
-        }
-        if ($wlen < IDX_MINWORDLENGTH && $wild == 0 && !is_numeric($xword)) continue;
-        if(!isset($tokens[$xword])){
-            $tokenlength[$wlen][] = $xword;
-        }
-        if($wild){
-            $ptn = preg_quote($xword,'/');
-            if(($wild&1) == 0) $ptn = '^'.$ptn;
-            if(($wild&2) == 0) $ptn = $ptn.'$';
-            $tokens[$xword][] = array($word, '/'.$ptn.'/');
-            if(!isset($tokenwild[$xword])) $tokenwild[$xword] = $wlen;
-        }else
-            $tokens[$xword][] = array($word, null);
-    }
-    asort($tokenwild);
-    // $tokens = array( base word => array( [ query word , grep pattern ] ... ) ... )
-    // $tokenlength = array( base word length => base word ... )
-    // $tokenwild = array( base word => base word length ... )
-
-    $length_filter = empty($tokenwild) ? $tokenlength : min(array_keys($tokenlength));
-    $indexes_known = idx_indexLengths($length_filter);
-    if(!empty($tokenwild)) sort($indexes_known);
-    // get word IDs
-    $wids = array();
-    foreach($indexes_known as $ixlen){
-        $word_idx = idx_getIndex('w',$ixlen);
-        // handle exact search
-        if(isset($tokenlength[$ixlen])){
-            foreach($tokenlength[$ixlen] as $xword){
-                $wid = array_search("$xword\n",$word_idx);
-                if(is_int($wid)){
-                    $wids[$ixlen][] = $wid;
-                    foreach($tokens[$xword] as $w)
-                        $result[$w[0]][] = "$ixlen*$wid";
-                }
-            }
-        }
-        // handle wildcard search
-        foreach($tokenwild as $xword => $wlen){
-            if($wlen >= $ixlen) break;
-            foreach($tokens[$xword] as $w){
-                if(is_null($w[1])) continue;
-                foreach(array_keys(preg_grep($w[1],$word_idx)) as $wid){
-                    $wids[$ixlen][] = $wid;
-                    $result[$w[0]][] = "$ixlen*$wid";
-                }
-            }
-        }
-    }
-    return $wids;
-}
-
-/**
- * Lookup words in index
- *
- * Takes an array of word and will return a list of matching
- * documents for each one.
- *
- * Important: No ACL checking is done here! All results are
- *            returned, regardless of permissions
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function idx_lookup($words){
-    global $conf;
-
-    $result = array();
-
-    $wids = idx_getIndexWordsSorted($words, $result);
-    if(empty($wids)) return array();
-
-    // load known words and documents
-    $page_idx = idx_getIndex('page','');
-
-    $docs = array();                          // hold docs found
-    foreach(array_keys($wids) as $wlen){
-        $wids[$wlen] = array_unique($wids[$wlen]);
-        $index = idx_getIndex('i',$wlen);
-        foreach($wids[$wlen] as $ixid){
-            if($ixid < count($index))
-                $docs["$wlen*$ixid"] = idx_parseIndexLine($page_idx,$index[$ixid]);
-        }
-    }
-
-    // merge found pages into final result array
-    $final = array();
-    foreach($result as $word => $res){
-        $final[$word] = array();
-        foreach($res as $wid){
-            $hits = &$docs[$wid];
-            foreach ($hits as $hitkey => $hitcnt) {
-                if (!isset($final[$word][$hitkey])) {
-                    $final[$word][$hitkey] = $hitcnt;
-                } else {
-                    $final[$word][$hitkey] += $hitcnt;
-                }
-            }
-        }
-    }
-    return $final;
-}
-
-/**
- * Returns a list of documents and counts from a index line
- *
- * It omits docs with a count of 0 and pages that no longer
- * exist.
- *
- * @param  array  $page_idx The list of known pages
- * @param  string $line     A line from the main index
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function idx_parseIndexLine(&$page_idx,$line){
-    $result = array();
-
-    $line = trim($line);
-    if($line == '') return $result;
-
-    $parts = explode(':',$line);
-    foreach($parts as $part){
-        if($part == '') continue;
-        list($doc,$cnt) = explode('*',$part);
-        if(!$cnt) continue;
-        $doc = trim($page_idx[$doc]);
-        if(!$doc) continue;
-        // make sure the document still exists
-        if(!page_exists($doc,'',false)) continue;
-
-        $result[$doc] = $cnt;
-    }
-    return $result;
-}
-
-/**
- * Tokenizes a string into an array of search words
- *
- * Uses the same algorithm as idx_getPageWords()
- *
- * @param string   $string     the query as given by the user
- * @param arrayref $stopwords  array of stopwords
- * @param boolean  $wc         are wildcards allowed?
- */
-function idx_tokenizer($string,&$stopwords,$wc=false){
-    $words = array();
-    $wc = ($wc) ? '' : $wc = '\*';
-
-    if(preg_match('/[^0-9A-Za-z]/u', $string)){
-        // handle asian chars as single words (may fail on older PHP version)
-        $asia = @preg_replace('/('.IDX_ASIAN.')/u',' \1 ',$string);
-        if(!is_null($asia)) $string = $asia; //recover from regexp failure
-
-        $arr = explode(' ', utf8_stripspecials($string,' ','\._\-:'.$wc));
-        foreach ($arr as $w) {
-            if (!is_numeric($w) && strlen($w) < IDX_MINWORDLENGTH) continue;
-            $w = utf8_strtolower($w);
-            if($stopwords && is_int(array_search("$w\n",$stopwords))) continue;
-            $words[] = $w;
-        }
-    }else{
-        $w = $string;
-        if (!is_numeric($w) && strlen($w) < IDX_MINWORDLENGTH) return $words;
-        $w = strtolower($w);
-        if(is_int(array_search("$w\n",$stopwords))) return $words;
-        $words[] = $w;
-    }
-
-    return $words;
+function idx_cleanName($name) {
+    $name = utf8_romanize(trim((string)$name));
+    $name = preg_replace('#[ \./\\:-]+#', '_', $name);
+    $name = preg_replace('/[^A-Za-z0-9_]/', '', $name);
+    return strtolower($name);
 }
 
 //Setup VIM: ex: et ts=4 :
diff --git a/inc/init.php b/inc/init.php
index 6f4ba1ca98add93867259ca63ad9af6f7906b628..819d92bdc52e07e8692865cb0540dbdb0ce7f396 100644
--- a/inc/init.php
+++ b/inc/init.php
@@ -5,13 +5,12 @@
 
 // start timing Dokuwiki execution
 function delta_time($start=0) {
-    list($usec, $sec) = explode(" ", microtime());
-    return ((float)$usec+(float)$sec)-((float)$start);
+    return microtime(true)-((float)$start);
 }
 define('DOKU_START_TIME', delta_time());
 
 global $config_cascade;
-$config_cascade = '';
+$config_cascade = array();
 
 // if available load a preload config file
 $preload = fullpath(dirname(__FILE__)).'/preload.php';
@@ -52,10 +51,9 @@ global $cache_authname;
 global $cache_metadata;
        $cache_metadata = array();
 
-//set the configuration cascade - but only if its not already been set in preload.php
-if (empty($config_cascade)) {
-    include(DOKU_INC.'inc/config_cascade.php');
-}
+// always include 'inc/config_cascade.php'
+// previously in preload.php set fields of $config_cascade will be merged with the defaults
+include(DOKU_INC.'inc/config_cascade.php');
 
 //prepare config array()
 global $conf;
@@ -276,6 +274,7 @@ function init_files(){
     }
 
     # create title index (needs to have same length as page.idx)
+    /*
     $file = $conf['indexdir'].'/title.idx';
     if(!@file_exists($file)){
         $pages = file($conf['indexdir'].'/page.idx');
@@ -290,6 +289,7 @@ function init_files(){
             nice_die("$file is not writable. Check your permissions settings!");
         }
     }
+    */
 }
 
 /**
diff --git a/inc/io.php b/inc/io.php
index 559f3febcb66f7e4429bcef83be898be7744861f..034ac650e7b63e70fa94a7ff1fc172aede39cfc2 100644
--- a/inc/io.php
+++ b/inc/io.php
@@ -529,7 +529,7 @@ function io_rename($from,$to){
 
 
 /**
- * Runs an external command and returns it's output as string
+ * Runs an external command and returns its output as string
  *
  * @author Harry Brueckner <harry_b@eml.cc>
  * @author Andreas Gohr <andi@splitbrain.org>
@@ -546,6 +546,27 @@ function io_runcmd($cmd){
     return $ret;
 }
 
+/**
+ * Runs an external command with input and output pipes.
+ * Returns the exit code from the process.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function io_exec($cmd, $input, &$output){
+    $descspec = array(
+            0=>array("pipe","r"),
+            1=>array("pipe","w"),
+            2=>array("pipe","w"));
+    $ph = proc_open($cmd, $descspec, $pipes);
+    if(!$ph) return -1;
+    fclose($pipes[2]); // ignore stderr
+    fwrite($pipes[0], $input);
+    fclose($pipes[0]);
+    $output = stream_get_contents($pipes[1]);
+    fclose($pipes[1]);
+    return proc_close($ph);
+}
+
 /**
  * Search a file for matching lines
  *
diff --git a/inc/lang/.htaccess b/inc/lang/.htaccess
index 2ca129b1236ffd9f114abc2e4894a58bb192b5e9..572f5156ff6416ed577efba7c2ca0f1af1f66b3a 100644
--- a/inc/lang/.htaccess
+++ b/inc/lang/.htaccess
@@ -1,3 +1,4 @@
-## no access to the lang directory
-order allow,deny
-deny from all
+## no access to the lang directory
+order allow,deny
+deny from all
+Satisfy All
diff --git a/inc/lang/af/lang.php b/inc/lang/af/lang.php
index fce59d13e6d670c8d13f968bd592f28149e6f2a6..6665196f41735df34c8e2852b45ace721c7e700e 100644
--- a/inc/lang/af/lang.php
+++ b/inc/lang/af/lang.php
@@ -26,6 +26,7 @@ $lang['btn_backlink']          = 'Wat skakel hierheen';
 $lang['btn_subscribe']         = 'Hou bladsy dop';
 $lang['btn_unsubscribe']       = 'Verwyder van bladsy  dophoulys';
 $lang['btn_resendpwd']         = 'E-pos nuwe wagwoord';
+$lang['btn_register']          = 'Skep gerus \'n rekening';
 $lang['loggedinas']            = 'Ingeteken as';
 $lang['user']                  = 'Gebruikernaam';
 $lang['pass']                  = 'Wagwoord';
@@ -35,7 +36,6 @@ $lang['passchk']               = 'Herhaal wagwoord';
 $lang['remember']              = 'Onthou my wagwoord oor sessies';
 $lang['fullname']              = 'Regte naam';
 $lang['email']                 = 'E-pos';
-$lang['register']              = 'Skep gerus \'n rekening';
 $lang['badlogin']              = 'Intekenfout';
 $lang['minoredit']             = 'Klein wysiging';
 $lang['reguexists']            = 'Die gebruikersnaam wat jy gebruik het, is alreeds gebruik. Kies asseblief \'n ander gebruikersnaam.';
diff --git a/inc/lang/ar/lang.php b/inc/lang/ar/lang.php
index 0a2341b97f494ae258889f5a909cb3a18cbf5a8d..cc2de9e8b06ebe506fef13a5fa44ae614ff65c5e 100644
--- a/inc/lang/ar/lang.php
+++ b/inc/lang/ar/lang.php
@@ -45,8 +45,8 @@ $lang['btn_resendpwd']         = 'ارسل كلمة سر جديدة';
 $lang['btn_draft']             = 'حرر المسودة';
 $lang['btn_recover']           = 'استرجع المسودة';
 $lang['btn_draftdel']          = 'احذف المسوّدة';
-$lang['btn_revert']            = 'استعد
-';
+$lang['btn_revert']            = 'استعد';
+$lang['btn_register']          = 'سجّل';
 $lang['loggedinas']            = 'داخل باسم';
 $lang['user']                  = 'اسم المستخدم';
 $lang['pass']                  = 'كلمة السر';
@@ -56,7 +56,6 @@ $lang['passchk']               = 'مرة أخرى';
 $lang['remember']              = 'تذكرني';
 $lang['fullname']              = 'الاسم الحقيقي';
 $lang['email']                 = 'البريد الإلكتروني';
-$lang['register']              = 'سجّل';
 $lang['profile']               = 'الملف الشخصي';
 $lang['badlogin']              = 'عذرا، اسم المشترك أو كلمة السر غير صحيحة';
 $lang['minoredit']             = 'تعديلات طفيفة';
diff --git a/inc/lang/az/lang.php b/inc/lang/az/lang.php
index ca826c8e0c294cf125522dd407555a6e9942f9ed..35b18d3a76d62ed6a0ceebcd1d4a9f1230548ecd 100644
--- a/inc/lang/az/lang.php
+++ b/inc/lang/az/lang.php
@@ -47,6 +47,7 @@ $lang['btn_draft']             = 'Qaralamada düzəliş etmək';
 $lang['btn_recover']           = 'Qaralamanı qaytar';
 $lang['btn_draftdel']          = 'Qaralamanı sil';
 $lang['btn_revert']            = 'Qaytar';
+$lang['btn_register']          = 'Qeydiyyatdan keç';
 $lang['loggedinas']            = 'İstifadəcinin adı';
 $lang['user']                  = 'istifadəci adı';
 $lang['pass']                  = 'ÅžifrÉ™';
@@ -56,7 +57,6 @@ $lang['passchk']               = 'təkrarlayın';
 $lang['remember']              = 'Məni yadda saxla';
 $lang['fullname']              = 'Tam ad';
 $lang['email']                 = 'E-Mail';
-$lang['register']              = 'Qeydiyyatdan keç';
 $lang['profile']               = 'İstifadəçi profili';
 $lang['badlogin']              = 'Təssüf ki istifadəçi adı və ya şifrə səhvdir.';
 $lang['minoredit']             = 'Az dəyişiklər';
diff --git a/inc/lang/bg/admin.txt b/inc/lang/bg/admin.txt
index 8958997ae850140f412dccbd1846cefc35ed2d76..d3c14a0da5008b10905ea2efea7dac5a94e5813f 100644
--- a/inc/lang/bg/admin.txt
+++ b/inc/lang/bg/admin.txt
@@ -1,3 +1,3 @@
 ====== Администриране ======
 
-Долу ще намерите списъка с администраторски задачи в DokuWiki.
\ No newline at end of file
+Отдолу ще намерите списъка с администраторските задачи в DokuWiki.
\ No newline at end of file
diff --git a/inc/lang/bg/backlinks.txt b/inc/lang/bg/backlinks.txt
index 70cb81dc33c2840a210e22f06f12338016e5959e..dd633d94d7bb83c3c19a4a51f06875a8b65ab6b0 100644
--- a/inc/lang/bg/backlinks.txt
+++ b/inc/lang/bg/backlinks.txt
@@ -1,3 +1,3 @@
 ====== Обратни препратки ======
 
-Това е списък на страници, които препращат обратно към текущата страница.
+Това е списък на страниците, които препращат обратно към текущата страница.
diff --git a/inc/lang/bg/denied.txt b/inc/lang/bg/denied.txt
index 91a576077080a93b9b493069124cdec85950982a..45ce6376971a88df1c8ec1702724d3b7d281dbdb 100644
--- a/inc/lang/bg/denied.txt
+++ b/inc/lang/bg/denied.txt
@@ -1,4 +1,4 @@
 ====== Отказан достъп ======
 
-Нямате достатъчно права да продължите. Може би сте забравили да се впишете?
+Нямате достатъчно права, за да продължите. Може би сте забравили да се впишете?
 
diff --git a/inc/lang/bg/draft.txt b/inc/lang/bg/draft.txt
index 6d269a72f771ea47e58bd04defee27787a9c4719..a59201130bbb439705389d7f2f32a854734d72d2 100644
--- a/inc/lang/bg/draft.txt
+++ b/inc/lang/bg/draft.txt
@@ -1,6 +1,6 @@
 ====== Намерена чернова ======
 
-Последната редакционна сесия на страницата не е завършена правилно. Dokuwiki автоматично запазва чернова по време на редактирането, която може сега да ползвате, за да продължите работата си. Долу може да видите данните, които бяха запазени от последната сесия.
+Последната редакционна сесия на страницата не е завършена правилно. Dokuwiki автоматично запазва чернова по време на редактирането, която можете да ползвате сега, за да продължите работата си. Отдолу може да видите данните, които бяха запазени от последната сесия.
 
 Моля решете, дали искате да //възстановите// последната си редакционна сесия, //изтриете// автоматично запазената чернова или //откажете// редакцията.
 
diff --git a/inc/lang/bg/install.html b/inc/lang/bg/install.html
index 392235ecd942466bce1c216945fa1d3de87c172a..6dde7e4cefc57a62a48136b127c32544b8df21d5 100644
--- a/inc/lang/bg/install.html
+++ b/inc/lang/bg/install.html
@@ -1,19 +1,18 @@
 <p>Страницата помага при първа инсталация и настройване на
 <a href="http://dokuwiki.org">Dokuwiki</a>.  Повече информация 
-за инсталатора е достъпна в неговата собствена 
-<a href="http://dokuwiki.org/installer">документация</a>.</p>
+за инсталатора ще намерите в <a href="http://dokuwiki.org/installer">документацията му</a>.</p>
 
 <p>Dokuwiki ползва обикновени файлове за хранилище на страниците и друга 
 информация свързана с тях (примерно картинки, търсене, стари версии, и др.).
-За да използвате успешно DokuWiki 
-<strong>трябва</strong> да имате право за писане в директориите, които съдържат тези
+За да функционира нормално DokuWiki 
+<strong>трябва</strong> да има право за писане в директориите, които съдържат тези
 файлове. Инсталаторът не може да настройва правата на директориите. 
 Обикновено трябва да направите това директно от командният ред или ако 
 ползвате хостинг - през FTP или контролния панела на хоста (примерно cPanel).</p>
 
 <p>Инсталаторът ще настрои вашата DokuWiki конфигурация на
-<acronym title="списъка за достъп">ACL</acronym>, което ще позволи на администратора да се впише и ползва администраторското меню в DokuWiki за инсталиране на приставки, контролира 
-на потребители, управлява достъпа до страниците и променя останалите настройки. Това не е необходимо за функционирането на DokuWiki, но направи администрирането на DokuWiki по-лесно.</p>
+<acronym title="списъка за достъп">ACL</acronym>, което ще позволи на администратора да се впише и ползва администраторското меню в DokuWiki за инсталиране на приставки, контрол 
+на потребители, управление на достъпа до страниците и промяна на останалите настройки. Това не е необходимо за функционирането на DokuWiki, но направи администрирането на DokuWiki по-лесно.</p>
 
-<p>Опитните потребители или потребителите със специални изисквания към настройките могат да ползват тези връзки за информация относно <a href="http://dokuwiki.org/install"> инсталацията</a>
+<p>Опитните потребители или потребителите със специални изисквания към настройките имат на разположение информация относно <a href="http://dokuwiki.org/install"> инсталацията</a>
 и <a href="http://dokuwiki.org/config">настройките</a>.</p>
diff --git a/inc/lang/bg/lang.php b/inc/lang/bg/lang.php
index d3e86c41db6305e4e3a7ce88cc21c12129cbb7a9..c7c52b70f1cb833a7cd52bde02f3a271e24f941e 100644
--- a/inc/lang/bg/lang.php
+++ b/inc/lang/bg/lang.php
@@ -5,7 +5,7 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
  * @author Viktor Usunov <usun0v@mail.bg>
- * @author Kiril neohidra@gmail.com
+ * @author Kiril <neohidra@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -25,7 +25,7 @@ $lang['btn_top']               = 'Към началото';
 $lang['btn_newer']             = '<< по-нови';
 $lang['btn_older']             = 'по-стари >>';
 $lang['btn_revs']              = 'История';
-$lang['btn_recent']            = 'Последни промени';
+$lang['btn_recent']            = 'Скорошни промени';
 $lang['btn_upload']            = 'Качване';
 $lang['btn_cancel']            = 'Отказ';
 $lang['btn_index']             = 'Индекс';
@@ -33,12 +33,12 @@ $lang['btn_secedit']           = 'Редактиране';
 $lang['btn_login']             = 'Вписване';
 $lang['btn_logout']            = 'Отписване';
 $lang['btn_admin']             = 'Настройки';
-$lang['btn_update']            = 'Обновяване';
+$lang['btn_update']            = 'Актуализиране';
 $lang['btn_delete']            = 'Изтриване';
 $lang['btn_back']              = 'Назад';
 $lang['btn_backlink']          = 'Обратни препратки';
-$lang['btn_backtomedia']       = 'Назад към избор на медиен файл';
-$lang['btn_subscribe']         = 'Абониране за Промени';
+$lang['btn_backtomedia']       = 'Назад към избора на медиен файл';
+$lang['btn_subscribe']         = 'Абонаменти';
 $lang['btn_profile']           = 'Профил';
 $lang['btn_reset']             = 'Изчистване';
 $lang['btn_resendpwd']         = 'Пращане на нова парола';
@@ -46,6 +46,7 @@ $lang['btn_draft']             = 'Редактиране на чернова';
 $lang['btn_recover']           = 'Възстановяване на чернова';
 $lang['btn_draftdel']          = 'Изтриване на чернова';
 $lang['btn_revert']            = 'Възстановяване';
+$lang['btn_register']          = 'Регистриране';
 $lang['loggedinas']            = 'Вписани сте като';
 $lang['user']                  = 'Потребител';
 $lang['pass']                  = 'Парола';
@@ -53,74 +54,87 @@ $lang['newpass']               = 'Нова парола';
 $lang['oldpass']               = 'Потвърждение на текуща парола';
 $lang['passchk']               = 'още веднъж';
 $lang['remember']              = 'Запомни ме';
-$lang['fullname']              = 'Пълно име';
+$lang['fullname']              = 'Истинско име';
 $lang['email']                 = 'Електронна поща';
-$lang['register']              = 'Регистриране';
 $lang['profile']               = 'Потребителски профил';
-$lang['badlogin']              = 'Грешно потребителско име или парола';
+$lang['badlogin']              = 'Грешно потребителско име или парола.';
 $lang['minoredit']             = 'Незначителни промени';
-$lang['draftdate']             = 'Черновата бе автоматично записана на';
+$lang['draftdate']             = 'Черновата е автоматично записана на';
 $lang['nosecedit']             = 'Страницата бе междувременно променена, презареждане на страницата поради неактуална информация.';
 $lang['regmissing']            = 'Моля, попълнете всички полета.';
 $lang['reguexists']            = 'Вече съществува потребител с избраното име.';
-$lang['regsuccess']            = 'Потребителят бе създаден и паролата бе пратена по електронната поща.';
-$lang['regsuccess2']           = 'Потребителят бе създаден.';
+$lang['regsuccess']            = 'Потребителят е създаден, а паролата е пратена по електронната поща.';
+$lang['regsuccess2']           = 'Потребителят е създаден.';
 $lang['regmailfail']           = 'Изглежда, че има проблем с пращането на писмото с паролата. Моля, свържете се с администратора!';
 $lang['regbadmail']            = 'Въведеният адрес изглежда невалиден - ако мислите, че това е грешка, свържете се с администратора.';
 $lang['regbadpass']            = 'Двете въведени пароли не съвпадат, моля опитайте отново.';
-$lang['regpwmail']             = 'Парола за DokuWiki';
+$lang['regpwmail']             = 'Паролата ви за DokuWiki';
 $lang['reghere']               = 'Все още нямате профил? Направете си';
-$lang['profna']                = 'Това Wiki не поддържа промяна на профила';
+$lang['profna']                = 'Wiki-то не поддържа промяна на профила';
 $lang['profnochange']          = 'Няма промени.';
-$lang['profnoempty']           = 'Въвеждането на име и ел. поща. е задължително';
-$lang['profchanged']           = 'Потребителският профил бе успешно обновен.';
+$lang['profnoempty']           = 'Въвеждането на име и ел. поща е задължително';
+$lang['profchanged']           = 'Потребителският профил е обновен успешно.';
 $lang['pwdforget']             = 'Забравили сте паролата си? Получете нова';
-$lang['resendna']              = 'Това Wiki не поддържа повторно пращане на паролата.';
+$lang['resendna']              = 'Wiki-то не поддържа повторно пращане на паролата.';
 $lang['resendpwd']             = 'Изпращане на нова парола за';
 $lang['resendpwdmissing']      = 'Моля, попълнете всички полета.';
-$lang['resendpwdnouser']       = 'Потребителят не бе намерен в базата от данни.';
-$lang['resendpwdbadauth']      = 'Кодът за потвърждение е невалиден. Проверете дали сте използвали целият линк за потвърждение.';
-$lang['resendpwdconfirm']      = 'Линк за потвърждение бе пратен по електронната поща.';
-$lang['resendpwdsuccess']      = 'Паролата ви бе изпратена по електронната поща.';
-$lang['license']               = 'Освен ако не е посочено друго, съдържанието на това Wiki е лицензирано под следния лиценз:';
-$lang['licenseok']             = 'Имайте предвид, че при редактиране на страницата, Вие се съгласявате да лицензирате промените (които сте направили)  под следния лиценз:';
+$lang['resendpwdnouser']       = 'Потребителят не е намерен в базата от данни.';
+$lang['resendpwdbadauth']      = 'Кодът за потвърждение е невалиден. Проверете дали сте използвали целия линк за потвърждение.';
+$lang['resendpwdconfirm']      = 'Линк за потвърждение е пратен по електронната поща.';
+$lang['resendpwdsuccess']      = 'Новата ви паролата е пратена по електронната поща.';
+$lang['license']               = 'Ако не е посочено друго, съдържанието на Wiki-то е лицензирано под следния лиценз:';
+$lang['licenseok']             = 'Бележка: Редактирайки страницата, вие се съгласявате да лицензирате промените (които сте направили) под следния лиценз:';
 $lang['searchmedia']           = 'Търсене на файл: ';
 $lang['searchmedia_in']        = 'Търсене в %s';
 $lang['txt_upload']            = 'Изберете файл за качване';
-$lang['txt_filename']          = 'Качване като (незадължително)';
+$lang['txt_filename']          = 'Качи като (незадължително)';
 $lang['txt_overwrt']           = 'Презапиши съществуващите файлове';
 $lang['lockedby']              = 'В момента е заключена от';
 $lang['lockexpire']            = 'Ще бъде отключена на';
-$lang['willexpire']            = 'Страницата ще бъде отключена за редактиране след минута.\nЗа да избегнете конфликт, ползвайте бутон "Преглед", за рестартиране на брояча за заключване.';
+$lang['willexpire']            = 'Страницата ще бъде отключена за редактиране след минута.\nЗа предотвратяване на конфликти, ползвайте бутона "Преглед", за рестартиране на брояча за заключване.';
 $lang['js']['notsavedyet']     = 'Незаписаните промени ще бъдат загубени. Желаете ли да продължите?';
 $lang['js']['searchmedia']     = 'Търсене на файлове';
 $lang['js']['keepopen']        = 'Без затваряне на прозореца след избор';
 $lang['js']['hidedetails']     = 'Без подробности';
+$lang['js']['mediatitle']      = 'Настройки на препратката';
+$lang['js']['mediadisplay']    = 'Тип на препратката';
+$lang['js']['mediaalign']      = 'Подреждане';
 $lang['js']['mediasize']       = 'Размер на изображението';
+$lang['js']['mediatarget']     = 'Препращане към';
 $lang['js']['mediaclose']      = 'Затваряне';
 $lang['js']['mediainsert']     = 'Вмъкване';
+$lang['js']['mediadisplayimg'] = 'Показвай изображението.';
+$lang['js']['mediadisplaylnk'] = 'Показвай само препратката.';
 $lang['js']['mediasmall']      = 'Малка версия';
 $lang['js']['mediamedium']     = 'Средна версия';
 $lang['js']['medialarge']      = 'Голяма версия';
 $lang['js']['mediaoriginal']   = 'Оригинална версия';
+$lang['js']['medialnk']        = 'Препратка към подробна страница';
+$lang['js']['mediadirect']     = 'Директна препратка към оригинала';
+$lang['js']['medianolnk']      = 'Без препратка';
+$lang['js']['medianolink']     = 'Без препратка към изображението';
+$lang['js']['medialeft']       = 'Подреди изображението отляво.';
+$lang['js']['mediaright']      = 'Подреди изображението отдясно.';
+$lang['js']['mediacenter']     = 'Подреди изображението по средата.';
+$lang['js']['medianoalign']    = 'Без подреждане.';
 $lang['js']['nosmblinks']      = 'Връзките към Windows shares работят само под Internet Explorer.
 Можете да копирате и поставите връзката.';
-$lang['js']['linkwiz']         = 'Съветник за препратки';
+$lang['js']['linkwiz']         = 'Помощник за препратки';
 $lang['js']['linkto']          = 'Препратка към: ';
 $lang['js']['del_confirm']     = 'Да бъдат ли изтрити избраните елементи?';
 $lang['js']['mu_btn']          = 'Качване на няколко файла наведнъж';
-$lang['rssfailed']             = 'Възникна грешка при вземането на този feed: ';
-$lang['nothingfound']          = 'Не е открито нищо.';
+$lang['rssfailed']             = 'Възникна грешка при получаването на емисията: ';
+$lang['nothingfound']          = 'Нищо не е открито.';
 $lang['mediaselect']           = 'Медийни файлове';
 $lang['fileupload']            = 'Качване на медийни файлове';
-$lang['uploadsucc']            = 'Качването бе успешно';
-$lang['uploadfail']            = 'Качването бе неуспешно. Може би поради грешни права?';
-$lang['uploadwrong']           = 'Качването бе отказано. Това файлово разширение е забранено!';
-$lang['uploadexist']           = 'Файлът вече съществува. Нищо не бе направено.';
+$lang['uploadsucc']            = 'Качването е успешно';
+$lang['uploadfail']            = 'Качването се провали. Може би поради грешни права?';
+$lang['uploadwrong']           = 'Качването е отказано. Файлово разширение е забранено!';
+$lang['uploadexist']           = 'Файлът вече съществува. Нищо не е направено.';
 $lang['uploadbadcontent']      = 'Каченото съдържание не съответства на файлово разширение %s .';
-$lang['uploadspam']            = 'Качването бе блокирано от SPAM списъка.';
-$lang['uploadxss']             = 'Качването бе блокирано, заради възможно зловредно съдържание.';
-$lang['uploadsize']            = 'Файльт за качване бе прекалено голям. (макс. %s)';
+$lang['uploadspam']            = 'Качването е блокирано от SPAM списъка.';
+$lang['uploadxss']             = 'Качването е блокирано, поради възможно зловредно съдържание.';
+$lang['uploadsize']            = 'Файльт за качване е прекалено голям. (макс. %s)';
 $lang['deletesucc']            = 'Файлът "%s" бе изтрит.';
 $lang['deletefail']            = '"%s" не може да бъде изтрит - проверете правата.';
 $lang['mediainuse']            = 'Файлът "%s" не бе изтрит - все още се ползва.';
@@ -130,8 +144,8 @@ $lang['accessdenied']          = 'Нямате разрешение да пре
 $lang['mediausage']            = 'Ползвайте следния синтаксис, за да упоменете файла:';
 $lang['mediaview']             = 'Преглед на оригиналния файл';
 $lang['mediaroot']             = 'root';
-$lang['mediaupload']           = 'Качете файл в текущото именно пространство. За създаване на подимено пространство, добавите името му преди това на файла и да ги разделите с двоеточие в полето "Качване като"';
-$lang['mediaextchange']        = 'Разширението на файла бе сменено от .%s на .%s!';
+$lang['mediaupload']           = 'Качете файл в текущото именно пространство. За създаване на подимено пространство, добавете име преди това на файла като ги разделите с двоеточие в полето "Качи като"';
+$lang['mediaextchange']        = 'Разширението на файла е сменено от .%s на .%s!';
 $lang['reference']             = 'Връзки за';
 $lang['ref_inuse']             = 'Файлът не може да бъде изтрит, защото все още се ползва от следните страници:';
 $lang['ref_hidden']            = 'Някои връзки са към страници, които нямате права да четете';
@@ -143,6 +157,9 @@ $lang['yours']                 = 'Вашата версия';
 $lang['diff']                  = 'Преглед на разликите с текущата версия';
 $lang['diff2']                 = 'Показване на разликите между избрани версии';
 $lang['difflink']              = 'Препратка към сравнението на версиите';
+$lang['diff_type']             = 'Преглед на разликите:';
+$lang['diff_inline']           = 'Вграден';
+$lang['diff_side']             = 'Един до друг';
 $lang['line']                  = 'Ред';
 $lang['breadcrumb']            = 'Следа';
 $lang['youarehere']            = 'Намирате се в';
@@ -187,8 +204,8 @@ $lang['qb_chars']              = 'Специални знаци';
 $lang['upperns']               = 'към майчиното именно пространство';
 $lang['admin_register']        = 'Добавяне на нов потребител';
 $lang['metaedit']              = 'Редактиране на метаданни';
-$lang['metasaveerr']           = 'Метаданните не бяха запазени';
-$lang['metasaveok']            = 'Метаданните бяха запазени успешно';
+$lang['metasaveerr']           = 'Записването на метаданните се провали';
+$lang['metasaveok']            = 'Метаданните са запазени успешно';
 $lang['img_backto']            = 'Назад към';
 $lang['img_title']             = 'Заглавие';
 $lang['img_caption']           = 'Надпис';
@@ -200,6 +217,22 @@ $lang['img_copyr']             = 'Авторско право';
 $lang['img_format']            = 'Формат';
 $lang['img_camera']            = 'Фотоапарат';
 $lang['img_keywords']          = 'Ключови думи';
+$lang['subscr_subscribe_success'] = '%s е добавен към списъка с абониралите се за %s';
+$lang['subscr_subscribe_error'] = 'Грешка при добавянето на %s към списъка с абониралите се за %s';
+$lang['subscr_subscribe_noaddress'] = 'Добавянето ви към списъка с абонати не е възможно поради липсата на свързан адрес (на ел. поща) с профила ви.';
+$lang['subscr_unsubscribe_success'] = '%s е премахнат от списъка с абониралите се за %s';
+$lang['subscr_unsubscribe_error'] = 'Грешка при премахването на %s от списъка с абониралите се за %s';
+$lang['subscr_already_subscribed'] = '%s е вече абониран за %s';
+$lang['subscr_not_subscribed'] = '%s не е абониран за %s';
+$lang['subscr_m_not_subscribed'] = 'Не сте абониран за текущата страницата или именно пространство.';
+$lang['subscr_m_new_header']   = 'Добави абонамент';
+$lang['subscr_m_current_header'] = 'Текущи абонаменти';
+$lang['subscr_m_unsubscribe']  = 'Прекратяване на абонамента';
+$lang['subscr_m_subscribe']    = 'Абониране';
+$lang['subscr_m_receive']      = 'Получаване';
+$lang['subscr_style_every']    = 'на ел. писмо при всяка промяна';
+$lang['subscr_style_digest']   = 'на ел. писмо с обобщение на промените във всяка страница (всеки %.2f дни)';
+$lang['subscr_style_list']     = 'на списък с променените страници от последното ел. писмо (всеки %.2f дни)';
 $lang['authmodfailed']         = 'Лоша настройки за удостоверяване. Моля, уведомете администратора на Wiki страницата.';
 $lang['authtempfail']          = 'Удостоверяването на потребители не е възможно за момента. Ако продължи дълго, моля уведомете администратора на Wiki страницата.';
 $lang['i_chooselang']          = 'Изберете вашия изик';
@@ -210,23 +243,23 @@ $lang['i_superuser']           = 'Супер потребител';
 $lang['i_problems']            = 'Открити са проблеми, които възпрепятстват инсталирането. Ще можете да продължите след като отстраните долуизброените проблеми.';
 $lang['i_modified']            = 'Поради мерки за сигурност скрипта ще работи само с нова и непроменена инсталация на Dokuwiki. Трябва да разархивирате отново файловете от сваления архив или да се посъветвате с <a href="http://dokuwiki.org/install">Инструкциите за инсталация на Dokuwiki</a>.';
 $lang['i_funcna']              = 'PHP функцията <code>%s</code> не е достъпна. Може би е забранена от доставчика на хостинг.';
-$lang['i_phpver']              = 'Вашата PHP версия <code>%s</code> е по-стара от необходимата <code>%s</code>. Обновете PHP инсталацията си.';
+$lang['i_phpver']              = 'Инсталираната версия <code>%s</code> на PHP е по-стара от необходимата <code>%s</code>. Актуализирайте PHP инсталацията.';
 $lang['i_permfail']            = '<code>%s</code> не е достъпна за писане от DokuWiki. Трябва да промените правата за достъп до директорията!';
 $lang['i_confexists']          = '<code>%s</code> вече съществува';
 $lang['i_writeerr']            = '<code>%s</code> не можа да бъде създаден. Трябва да проверите правата за достъп до директорията/файла и да създадете файла ръчно.';
 $lang['i_badhash']             = 'Файлът dokuwiki.php не може да бъде разпознат или е променен (hash=<code>%s</code>)';
 $lang['i_badval']              = '<code>%s</code> - непозволена или празна стойност';
 $lang['i_success']             = 'Настройването приключи успешно. Вече можете да изтриете файла install.php. Продължете към <a href="doku.php">Вашето ново DokuWiki</a>.';
-$lang['i_failure']             = 'Възникнаха грешки при записването на файловете с настройки.  Вероятно ще се наложи да ги поправите ръчно, за да можете да ползвате <a href="doku.php">Вашето ново DokuWiki</a>.';
+$lang['i_failure']             = 'Възникнаха грешки при записването на файловете с настройки. Вероятно ще се наложи да ги поправите ръчно, за да можете да ползвате <a href="doku.php">Вашето ново DokuWiki</a>.';
 $lang['i_policy']              = 'Първоначална политика за достъп';
 $lang['i_pol0']                = 'Отворено Wiki (всеки може да чете, пише и качва)';
-$lang['i_pol1']                = 'Публично Wiki (всеки може да чете, само регистрирани могат да пишат и качват)';
-$lang['i_pol2']                = 'Затворено Wiki (само регистрирани могат четат, пишат и качват)';
+$lang['i_pol1']                = 'Публично Wiki (всеки може да чете, само регистрирани пишат и качват)';
+$lang['i_pol2']                = 'Затворено Wiki (само регистрирани четат, пишат и качват)';
 $lang['i_retry']               = 'Повторен опит';
-$lang['i_license']             = 'Моля, изберете лиценз под който желаете да публикувате съдържанието';
-$lang['mu_intro']              = 'От тук можете да качите няколко файла наведнъж. Натиснете бутон "Избиране", изберете файлове и натиснете "Качи".
+$lang['i_license']             = 'Моля, изберете лиценз под който желаете да публикувате съдържанието:';
+$lang['mu_intro']              = 'От тук можете да качите няколко файла наведнъж. Натиснете бутона "Избиране", изберете файлове и натиснете "Качване".
 ';
-$lang['mu_gridname']           = 'Име на файл';
+$lang['mu_gridname']           = 'Име на файла';
 $lang['mu_gridsize']           = 'Големина';
 $lang['mu_gridstat']           = 'Състояние';
 $lang['mu_namespace']          = 'Именно пространство';
@@ -242,10 +275,10 @@ $lang['mu_info']               = 'качени файла.';
 $lang['mu_lasterr']            = 'Последна грешка:';
 $lang['recent_global']         = 'В момента преглеждате промените в именно пространство <b>%s</b>. Може да прегледате и <a href="%s">промените в цялото Wiki</a>.';
 $lang['years']                 = 'преди %d години';
-$lang['months']                = 'преди %d месеци';
+$lang['months']                = 'преди %d месеца';
 $lang['weeks']                 = 'преди %d седмици';
 $lang['days']                  = 'преди %d дни';
 $lang['hours']                 = 'преди %d часа';
 $lang['minutes']               = 'преди %d минути';
 $lang['seconds']               = 'преди %d секунди';
-$lang['wordblock']             = 'Направените от вас промени не бяха съхранени, защото съдържат забранен текст (SPAM).';
+$lang['wordblock']             = 'Направените от вас промени не са съхранени, защото съдържат забранен текст (SPAM).';
diff --git a/inc/lang/bg/login.txt b/inc/lang/bg/login.txt
index 9cc85ce322d9046e737424c796e974b9f2ebd14c..a6f53e95dd2efe4ee824525b5afb28e318937019 100644
--- a/inc/lang/bg/login.txt
+++ b/inc/lang/bg/login.txt
@@ -1,3 +1,3 @@
 ====== Вписване ======
 
-Не сте се вписали! Въведете данните си долу, за да го направите. Бисквитките (cookies) трябва да са включени.
+Не сте се вписали! Въведете данните си удостоверяване  отдолу, за да го направите. Бисквитките (cookies) трябва да са включени.
diff --git a/inc/lang/bg/mailtext.txt b/inc/lang/bg/mailtext.txt
index 8c18767e5a53d57c3ecef02d5d4da6aee9840ae5..ad0024a8db0a7c630fa313a58bbb3bf723222615 100644
--- a/inc/lang/bg/mailtext.txt
+++ b/inc/lang/bg/mailtext.txt
@@ -1,16 +1,16 @@
-Страница във DokuWiki бе добавена или променена. Ето детайлите:
+Страница във DokuWiki е добавена или променена. Ето детайлите:
 
-Дата        : @DATE@
-Браузър     : @BROWSER@
-IP-адрес    : @IPADDRESS@
-Име на хост : @HOSTNAME@
+Дата : @DATE@
+Браузър : @BROWSER@
+IP адрес : @IPADDRESS@
+Име на хоста : @HOSTNAME@
 Стара версия: @OLDPAGE@
-Нова версия : @NEWPAGE@
-Обобщение   : @SUMMARY@
-Потребител  : @USER@
+Нова версия: @NEWPAGE@
+Обобщение: @SUMMARY@
+Потребител : @USER@
 
 @DIFF@
 
 
 -- 
-Това писмо е генерирано от DokuWiki на адрес @DOKUWIKIURL@
+Писмото е генерирано от DokuWiki на адрес @DOKUWIKIURL@
diff --git a/inc/lang/bg/newpage.txt b/inc/lang/bg/newpage.txt
index bf67b2266e2d8aa53b5e1de5e1cd9c84d749c7b9..22d3bb6d12f035050fccf47ed6298c8006ba1f71 100644
--- a/inc/lang/bg/newpage.txt
+++ b/inc/lang/bg/newpage.txt
@@ -1,4 +1,4 @@
 ====== Несъществуваща тема ======
 
-Последвали сте препратка към тема, която все още не съществува. Ако правата Ви позволяват, може да я създадете чрез бутона ''Създаване на страница''.
+Последвали сте препратка към тема, която не съществува. Ако правата ви позволяват, може да я създадете чрез бутона ''Създаване на страница''.
 
diff --git a/inc/lang/bg/password.txt b/inc/lang/bg/password.txt
index a3ee557e977139e0cb69da059b490c58cf64e80a..7a70ef1d8fefcfc692046111da5800c0e6bfb516 100644
--- a/inc/lang/bg/password.txt
+++ b/inc/lang/bg/password.txt
@@ -1,9 +1,9 @@
 Здравейте @FULLNAME@!
 
-Това са Вашите потребителски данни за @TITLE@ от @DOKUWIKIURL@
+Вашите потребителски данни за @TITLE@ на @DOKUWIKIURL@
 
-Потребител: @LOGIN@
-Парола    : @PASSWORD@
+Потребител : @LOGIN@
+Парола : @PASSWORD@
 
 -- 
 Писмото е генерирано от DokuWiki на адрес @DOKUWIKIURL@
\ No newline at end of file
diff --git a/inc/lang/bg/pwconfirm.txt b/inc/lang/bg/pwconfirm.txt
index beb56cca3ed8e629984ca74347cb94a087866ac1..2c4252e151a79e3f805164ffe417e69edd8a525d 100644
--- a/inc/lang/bg/pwconfirm.txt
+++ b/inc/lang/bg/pwconfirm.txt
@@ -5,7 +5,7 @@
 
 Ако не сте поискали нова парола, товава просто игнорирайте това писмо.
 
-За да потвърдите, че искането е наистина пратено от вас, моля ползвайте следния адрес.
+За да потвърдите, че искането е наистина от вас, моля ползвайте следния линк:
 
 @CONFIRM@
 
diff --git a/inc/lang/bg/read.txt b/inc/lang/bg/read.txt
index a3a15a07f4945d9a5cf36a9173d3fec7716b7c1f..861d47fc58a91b9e9359324922c52094046d9c9b 100644
--- a/inc/lang/bg/read.txt
+++ b/inc/lang/bg/read.txt
@@ -1,2 +1,2 @@
-Тази страница е само за четене. Може да разглеждате кода, но не и да го променяте. Обърнете се съм администратора, ако смятате, че това не е редно.
+Страницата е само за четене. Може да разглеждате кода, но не и да го променяте. Обърнете се съм администратора, ако смятате, че това не е редно.
 
diff --git a/inc/lang/bg/recent.txt b/inc/lang/bg/recent.txt
index 262979e3430024b751fdee4746ff7f9c1518f322..c92029054f36cc293c6be9474e4bab111fec4810 100644
--- a/inc/lang/bg/recent.txt
+++ b/inc/lang/bg/recent.txt
@@ -1,4 +1,4 @@
-====== Последни промени ======
+====== Скорошни промени ======
 
 Следните страници са били променени наскоро.
 
diff --git a/inc/lang/bg/register.txt b/inc/lang/bg/register.txt
index b4076e89ba5ca4e719a789640f7da688b8cc3cda..51fbb83fe44a42bb2ad0919a821c8ea91b1ebbe5 100644
--- a/inc/lang/bg/register.txt
+++ b/inc/lang/bg/register.txt
@@ -1,4 +1,4 @@
-====== Регистрирайте се като нов потребител ======
+====== Регистриране като нов потребител ======
 
-Моля, попълнете всичките полета, за да бъде създаден нов профил. Уверете се, че въведения **адрес на ел. поща е правилен**. Ако няма поле за парола, ще ви бъде изпратена такава на въведения адрес. Потребителското име трябва да бъде валидно [[doku>pagename|име на страница]].
+Моля, попълнете всичките полета отдолу, за да бъде създаден нов профил. Уверете се, че въведеният **адрес на ел. поща е правилен**. Ако няма поле за парола, ще ви бъде изпратена такава на въведения адрес. Потребителското име трябва да бъде валидно [[doku>pagename|име на страница]].
 
diff --git a/inc/lang/bg/registermail.txt b/inc/lang/bg/registermail.txt
index 7839b0910217c5dcbe8f33c29f8bfeaebd146fd7..4b0828c7bfa73d013800c7457d745ef4f2434a0c 100644
--- a/inc/lang/bg/registermail.txt
+++ b/inc/lang/bg/registermail.txt
@@ -1,13 +1,13 @@
-Нов потребител беше регистриран. Ето детайлите:
+Регистриран е нов потребител. Ето детайлите:
 
 Потребител  : @NEWUSER@
-Пълно име   : @NEWNAME@
-E-поща      : @NEWEMAIL@
+Пълно име : @NEWNAME@
+E. поща : @NEWEMAIL@
 
-Дата        : @DATE@
-Браузър     : @BROWSER@
-IP-адрес    : @IPADDRESS@
-Име на хоста: @HOSTNAME@
+Дата : @DATE@
+Браузър : @BROWSER@
+IP адрес : @IPADDRESS@
+Име на хоста : @HOSTNAME@
 
 -- 
-Това писмо е генерирано от DokuWiki на адрес @DOKUWIKIURL@
\ No newline at end of file
+Писмото е генерирано от DokuWiki на адрес @DOKUWIKIURL@
\ No newline at end of file
diff --git a/inc/lang/bg/resendpwd.txt b/inc/lang/bg/resendpwd.txt
index 4823fbf003faadf42f1f04fbdb6021b5d2367dfc..38e2d1fe48928e68a3ca80e90368ced0c01654cc 100644
--- a/inc/lang/bg/resendpwd.txt
+++ b/inc/lang/bg/resendpwd.txt
@@ -1,3 +1,3 @@
 ====== Пращане на нова парола ======
 
-Моля, въведете потребителското си име във формата по-долу, ако желаете да получите нова парола. Линк за потвърждение ще ви бъде пратен на адреса на ел. поща, с която сте се регистрирани.
+Моля, въведете потребителското си име във формата по-долу, ако желаете да получите нова парола. По ел. поща ще получите линк, с който да потвърдите.
diff --git a/inc/lang/bg/stopwords.txt b/inc/lang/bg/stopwords.txt
index b1627bb9a11bb53829f88625c06dbce362acbc86..03fd13758242374c569d148ba19da3c8233c6722 100644
--- a/inc/lang/bg/stopwords.txt
+++ b/inc/lang/bg/stopwords.txt
@@ -1,7 +1,7 @@
-# Това е списък на думи за игнориране, с една дума на ред
+# Това е списък с думи за игнориране при индексиране, с една дума на ред
 # Когато редактирате този файл, не забравяйте да използвате UNIX символ за нов ред
 # Не е нужно да включвате думи по-кратки от 3 символа - те биват игнорирани така или иначе
-# Този списък се основава на думи от http://www.ranks.nl/stopwords/
+# Списъкът се основава на думи от http://www.ranks.nl/stopwords/
 about
 are
 and
diff --git a/inc/lang/bg/subscr_digest.txt b/inc/lang/bg/subscr_digest.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f0533daf4f609849b46c2395196e5cc451f83749
--- /dev/null
+++ b/inc/lang/bg/subscr_digest.txt
@@ -0,0 +1,18 @@
+Здравейте!
+
+Страницата @PAGE@ в @TITLE@ wiki е променена.
+Промените са по-долу:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Стара версия: @OLDPAGE@
+Нова версия: @NEWPAGE@
+
+Ако желаете да прекратите уведомяването за страницата трябва да се впишете на адрес @DOKUWIKIURL@, да посетите
+@SUBSCRIBE@
+и да прекратите абонамента за промени по страницата или именното пространство.
+
+--
+Писмото е генерирано от DokuWiki на адрес @DOKUWIKIURL@
\ No newline at end of file
diff --git a/inc/lang/bg/subscr_form.txt b/inc/lang/bg/subscr_form.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e32a5ec264cdf1cac1588b32eeb09609d26ad4e6
--- /dev/null
+++ b/inc/lang/bg/subscr_form.txt
@@ -0,0 +1,3 @@
+====== Диспечер на абонаменти ======
+
+Страницата ви позволява да управлявате текущите си абонаменти за страници и именни пространства.
\ No newline at end of file
diff --git a/inc/lang/bg/subscr_list.txt b/inc/lang/bg/subscr_list.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e9e65bc3912f49718f35494a8c72fef3b07fb7a5
--- /dev/null
+++ b/inc/lang/bg/subscr_list.txt
@@ -0,0 +1,15 @@
+Здравейте!
+
+Променени са страници от именното пространство @PAGE@ от @TITLE@ wiki.
+Ето променените страници:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Ако желаете да прекратите уведомяването за страницата трябва да се впишете на адрес @DOKUWIKIURL@, да посетите
+@SUBSCRIBE@
+и да прекратите абонамента за промени по страницата или именното пространство.
+
+--
+Писмото е генерирано от DokuWiki на адрес @DOKUWIKIURL@
\ No newline at end of file
diff --git a/inc/lang/bg/subscr_single.txt b/inc/lang/bg/subscr_single.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7b26f8e965dc05c1c5f52703d532d9df16811a83
--- /dev/null
+++ b/inc/lang/bg/subscr_single.txt
@@ -0,0 +1,22 @@
+Здравейте!
+
+Страницата @PAGE@ в @TITLE@ wiki е променена.
+Промените са по-долу:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Дата : @DATE@
+Потребител : @USER@
+Обобщение: @SUMMARY@
+Стара версия: @OLDPAGE@
+Нова версия: @NEWPAGE@
+
+Ако желаете да прекратите уведомяването за страницата трябва да се впишете на адрес @DOKUWIKIURL@, да посетите
+@NEWPAGE@
+и да прекратите абонамента за промени по страницата или именното пространство.
+
+--
+Писмото е генерирано от DokuWiki на адрес
+@DOKUWIKIURL@
\ No newline at end of file
diff --git a/inc/lang/bg/uploadmail.txt b/inc/lang/bg/uploadmail.txt
index 7373adcea6da3011adf2840d7b67c74bc2245518..ebd8d911204fa01a2f86bfa494fc3a7025c0326d 100644
--- a/inc/lang/bg/uploadmail.txt
+++ b/inc/lang/bg/uploadmail.txt
@@ -1,13 +1,13 @@
 Качен е файл на вашето DokuWiki. Ето детайлите
 
-Файл        : @MEDIA@
-Дата        : @DATE@
-Браузeр     : @BROWSER@
-IP-Адрес    : @IPADDRESS@
-Име на хост : @HOSTNAME@
-Размер      : @SIZE@
-MIME Тип    : @MIME@
-Потребител  : @USER@
+Файл : @MEDIA@
+Дата  : @DATE@
+Браузър : @BROWSER@
+IP адрес : @IPADDRESS@
+Име на хоста : @HOSTNAME@
+Размер : @SIZE@
+MIME тип : @MIME@
+Потребител : @USER@
 
 -- 
-Tова писмо е генерирано от DokuWiki на адрес @DOKUWIKIURL@
\ No newline at end of file
+Писмото е генерирано от DokuWiki на адрес @DOKUWIKIURL@
\ No newline at end of file
diff --git a/inc/lang/ca-valencia/lang.php b/inc/lang/ca-valencia/lang.php
index d49c900fab8792395f8ff41d7084ebd0dfb7a9bf..c6a7dc27e28b7ba222a07f34e3723e61da3dae6c 100644
--- a/inc/lang/ca-valencia/lang.php
+++ b/inc/lang/ca-valencia/lang.php
@@ -4,7 +4,6 @@
  *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Bernat Arlandis i Mañó <berarma@ya.com>
- * @author Bernat Arlandis <berarma@ya.com>
  * @author Bernat Arlandis <berarma@llenguaitecnologia.com>
  */
 $lang['encoding']              = 'utf-8';
@@ -49,6 +48,7 @@ $lang['btn_draft']             = 'Editar borrador';
 $lang['btn_recover']           = 'Recuperar borrador';
 $lang['btn_draftdel']          = 'Borrar borrador';
 $lang['btn_revert']            = 'Recuperar';
+$lang['btn_register']          = 'Registrar-se';
 $lang['loggedinas']            = 'Sessió de';
 $lang['user']                  = 'Nom d\'usuari';
 $lang['pass']                  = 'Contrasenya';
@@ -58,7 +58,6 @@ $lang['passchk']               = 'una atra volta';
 $lang['remember']              = 'Recorda\'m';
 $lang['fullname']              = 'Nom complet';
 $lang['email']                 = 'Correu electrònic';
-$lang['register']              = 'Registrar-se';
 $lang['profile']               = 'Perfil d\'usuari';
 $lang['badlogin']              = 'Disculpe, pero el nom d\'usuari o la contrasenya són incorrectes.';
 $lang['minoredit']             = 'Canvis menors';
diff --git a/inc/lang/ca/lang.php b/inc/lang/ca/lang.php
index 19fb7c55682d7fd7d59f7a0011b6c408bfb9c327..342257d1187d1bd86c2f36b85cda6174cad11a2a 100644
--- a/inc/lang/ca/lang.php
+++ b/inc/lang/ca/lang.php
@@ -5,8 +5,6 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Carles Bellver <carles.bellver@cent.uji.es>
  * @author Carles Bellver <carles.bellver@gmail.com>
- * @author carles.bellver@gmail.com
- * @author carles.bellver@cent.uji.es
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -50,6 +48,7 @@ $lang['btn_draft']             = 'Edita esborrany';
 $lang['btn_recover']           = 'Recupera esborrany';
 $lang['btn_draftdel']          = 'Suprimeix esborrany';
 $lang['btn_revert']            = 'Restaura';
+$lang['btn_register']          = 'Registra\'m';
 $lang['loggedinas']            = 'Heu entrat com';
 $lang['user']                  = 'Nom d\'usuari';
 $lang['pass']                  = 'Contrasenya';
@@ -59,7 +58,6 @@ $lang['passchk']               = 'una altra vegada';
 $lang['remember']              = 'Recorda\'m';
 $lang['fullname']              = 'Nom complet';
 $lang['email']                 = 'Correu electrònic';
-$lang['register']              = 'Registra\'m';
 $lang['profile']               = 'Perfil d\'usuari';
 $lang['badlogin']              = 'Nom d\'usuari o contrasenya incorrectes.';
 $lang['minoredit']             = 'Canvis menors';
diff --git a/inc/lang/cs/lang.php b/inc/lang/cs/lang.php
index 749a41a5bbc9910fbf07e7a6743b6e22411fcffc..22aa00d7d0be6ee36200fea50a354ae72c599be1 100644
--- a/inc/lang/cs/lang.php
+++ b/inc/lang/cs/lang.php
@@ -5,8 +5,8 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Bohumir Zamecnik <bohumir@zamecnik.org>
  * @author Tomas Valenta <t.valenta@sh.cvut.cz>
+ * @author Tomas Valenta <tomas@valenta.cz>
  * @author Zbynek Krivka <zbynek.krivka@seznam.cz>
- * @author tomas@valenta.cz
  * @author Marek Sacha <sachamar@fel.cvut.cz>
  * @author Lefty <lefty@multihost.cz>
  */
@@ -49,6 +49,7 @@ $lang['btn_draft']             = 'Upravit koncept';
 $lang['btn_recover']           = 'Obnovit koncept';
 $lang['btn_draftdel']          = 'Vymazat koncept';
 $lang['btn_revert']            = 'Vrátit zpět';
+$lang['btn_register']          = 'Registrovat';
 $lang['loggedinas']            = 'Přihlášen(a) jako';
 $lang['user']                  = 'Uživatelské jméno';
 $lang['pass']                  = 'Heslo';
@@ -58,7 +59,6 @@ $lang['passchk']               = 'ještě jednou';
 $lang['remember']              = 'Přihlásit se nastálo';
 $lang['fullname']              = 'Celé jméno';
 $lang['email']                 = 'E-mail';
-$lang['register']              = 'Registrovat';
 $lang['profile']               = 'Uživatelský profil';
 $lang['badlogin']              = 'Zadané uživatelské jméno a heslo není správně.';
 $lang['minoredit']             = 'Drobné změny';
diff --git a/inc/lang/da/lang.php b/inc/lang/da/lang.php
index 47b42be9dab8edc046e6f1c9f236f4ca6da0171c..80d55d6f52fb584317295e61e214b1d5fde1ee59 100644
--- a/inc/lang/da/lang.php
+++ b/inc/lang/da/lang.php
@@ -53,6 +53,7 @@ $lang['btn_draft']             = 'Redigér kladde';
 $lang['btn_recover']           = 'Gendan kladde';
 $lang['btn_draftdel']          = 'Slet kladde';
 $lang['btn_revert']            = 'Reetablér';
+$lang['btn_register']          = 'Registrér';
 $lang['loggedinas']            = 'Logget ind som';
 $lang['user']                  = 'Brugernavn';
 $lang['pass']                  = 'Adgangskode';
@@ -62,7 +63,6 @@ $lang['passchk']               = 'Gentag ny adgangskode';
 $lang['remember']              = 'Automatisk log ind';
 $lang['fullname']              = 'Fulde navn';
 $lang['email']                 = 'E-mail';
-$lang['register']              = 'Registrér';
 $lang['profile']               = 'Brugerprofil';
 $lang['badlogin']              = 'Brugernavn eller adgangskode var forkert.';
 $lang['minoredit']             = 'Mindre ændringer';
diff --git a/inc/lang/de-informal/denied.txt b/inc/lang/de-informal/denied.txt
index 6d76891b1d0ff7a5d9cdfc4a0a590d628f11b276..0bc0e59a8cb002ce3a5a157c5768c60d70a5e8d9 100644
--- a/inc/lang/de-informal/denied.txt
+++ b/inc/lang/de-informal/denied.txt
@@ -1,4 +1,4 @@
 ====== Zugang verweigert ======
 
-Du hast nicht die erforderlichen Rechte, um diese Aktion durchzuführen. Eventuell bist du nicht am Wiki angemeldet?
+Du hast nicht die erforderliche Berechtigung, um diese Aktion durchzuführen. Eventuell bist du nicht am Wiki angemeldet?
 
diff --git a/inc/lang/de-informal/lang.php b/inc/lang/de-informal/lang.php
index b7c4466564c7327652e734f39ad74cce85174733..d39bf8152e907dab51ce80ffbb95eac7dbe07228 100644
--- a/inc/lang/de-informal/lang.php
+++ b/inc/lang/de-informal/lang.php
@@ -58,6 +58,7 @@ $lang['btn_draft']             = 'Entwurf bearbeiten';
 $lang['btn_recover']           = 'Entwurf wiederherstellen';
 $lang['btn_draftdel']          = 'Entwurf löschen';
 $lang['btn_revert']            = 'Wiederherstellen';
+$lang['btn_register']          = 'Registrieren';
 $lang['loggedinas']            = 'Angemeldet als';
 $lang['user']                  = 'Benutzername';
 $lang['pass']                  = 'Passwort';
@@ -67,7 +68,6 @@ $lang['passchk']               = 'und nochmal';
 $lang['remember']              = 'Angemeldet bleiben';
 $lang['fullname']              = 'Voller Name';
 $lang['email']                 = 'E-Mail';
-$lang['register']              = 'Registrieren';
 $lang['profile']               = 'Benutzerprofil';
 $lang['badlogin']              = 'Nutzername oder Passwort sind falsch.';
 $lang['minoredit']             = 'kleine Änderung';
@@ -88,7 +88,7 @@ $lang['profnoempty']           = 'Es muss ein Name oder eine E-Mail Adresse ange
 $lang['profchanged']           = 'Benutzerprofil erfolgreich geändert.';
 $lang['pwdforget']             = 'Passwort vergessen? Fordere ein neues an';
 $lang['resendna']              = 'Passwörter versenden ist in diesem Wiki nicht möglich.';
-$lang['resendpwd']             = 'Neues Passwort schicken für';
+$lang['resendpwd']             = 'Neues Passwort senden für';
 $lang['resendpwdmissing']      = 'Es tut mir Leid, aber du musst alle Felder ausfüllen.';
 $lang['resendpwdnouser']       = 'Es tut mir Leid, aber der Benutzer existiert nicht in unserer Datenbank.';
 $lang['resendpwdbadauth']      = 'Es tut mir Leid, aber dieser Authentifizierungscode ist ungültig. Stelle sicher, dass du den kompletten Bestätigungslink verwendet haben.';
@@ -168,6 +168,9 @@ $lang['yours']                 = 'Deine Version';
 $lang['diff']                  = 'Zeige Unterschiede zu aktueller Version';
 $lang['diff2']                 = 'Zeige Unterschiede der ausgewählten Versionen';
 $lang['difflink']              = 'Link zu der Versionshistorie';
+$lang['diff_type']             = 'Unterschiede anzeigen:';
+$lang['diff_inline']           = 'Inline';
+$lang['diff_side']             = 'Side by Side';
 $lang['line']                  = 'Zeile';
 $lang['breadcrumb']            = 'Zuletzt angesehen';
 $lang['youarehere']            = 'Du befindest dich hier';
@@ -288,4 +291,4 @@ $lang['days']                  = 'vor %d Tagen';
 $lang['hours']                 = 'vor %d Stunden';
 $lang['minutes']               = 'vor %d Minuten';
 $lang['seconds']               = 'vor %d Sekunden';
-$lang['wordblock']             = 'Deine Änderungen konnten nicht gespeichert werden, da Teile des Texts blockierte Wörter (Spam) enthalten.';
+$lang['wordblock']             = 'Deine Bearbeitung wurde nicht gespeichert, da sie gesperrten Text enthielt (Spam).';
diff --git a/inc/lang/de-informal/resendpwd.txt b/inc/lang/de-informal/resendpwd.txt
index 4dcd4bb4dc0a4e686cd420ec45111664fff42355..a0a7142186743c706193bf27f2f3c0e93a44d8cb 100644
--- a/inc/lang/de-informal/resendpwd.txt
+++ b/inc/lang/de-informal/resendpwd.txt
@@ -1,3 +1,3 @@
 ====== Neues Passwort anfordern ======
 
-Fülle alle Felder unten aus, um ein neues Passwort für deinen Zugang zu erhalten. Das neue Passwort wird an deine gespeicherte E-Mail-Adresse geschickt. Der Benutzername sollte dein Wiki-Benutzername sein.
+Fülle alle Felder unten aus, um ein neues Passwort für deinen Zugang zu erhalten. Das neue Passwort wird an deine gespeicherte E-Mail-Adresse geschickt. Der Benutzername muss deinem Wiki-Benutzernamen entsprechen.
diff --git a/inc/lang/de-informal/revisions.txt b/inc/lang/de-informal/revisions.txt
index e4a7be8f1f7c5713f050516271ed95075c38649f..b69169a4e36e90b60cdfc317b51eb2e325f3dceb 100644
--- a/inc/lang/de-informal/revisions.txt
+++ b/inc/lang/de-informal/revisions.txt
@@ -1,4 +1,4 @@
 ====== Ältere Versionen ======
 
-Dies sind ältere Versionen des gewählten Dokuments. Um zu einer älteren Version zurückzukehren, wähle die entsprechende Version aus, klicke auf **''[Diese Seite bearbeiten]''** und speichere sie erneut ab.
+Dies sind ältere Versionen der gewählten Seite. Um zu einer älteren Version zurückzukehren, wähle die entsprechende Version aus, klicke auf **''[Diese Seite bearbeiten]''** und speichere sie erneut ab.
 
diff --git a/inc/lang/de/denied.txt b/inc/lang/de/denied.txt
index b8796506709acb01143d288652caa79cfd1387c8..8efa81f1b04a38fbbdfa780faf70106833333f13 100644
--- a/inc/lang/de/denied.txt
+++ b/inc/lang/de/denied.txt
@@ -1,4 +1,4 @@
 ====== Zugang verweigert ======
 
-Sie haben nicht die erforderlichen Rechte, um diese Aktion durchzuführen. Eventuell sind Sie nicht beim Wiki angemeldet?
+Sie haben nicht die erforderliche Berechtigung, um diese Aktion durchzuführen. Eventuell sind Sie nicht am Wiki angemeldet?
 
diff --git a/inc/lang/de/lang.php b/inc/lang/de/lang.php
index a353b98ed22e9e99bfb637d5df87cf2472e51790..f9f2509942f8502f14f626f8d14b626b4663ace8 100644
--- a/inc/lang/de/lang.php
+++ b/inc/lang/de/lang.php
@@ -15,7 +15,6 @@
  * @author Arne Pelka <mail@arnepelka.de>
  * @author Dirk Einecke <dirk@dirkeinecke.de>
  * @author Blitzi94@gmx.de
- * @author Robert Bogenschneider <robog@GMX.de>
  * @author Robert Bogenschneider <robog@gmx.de>
  * @author Niels Lange <niels@boldencursief.nl>
  * @author Christian Wichmann <nospam@zone0.de>
@@ -59,6 +58,7 @@ $lang['btn_draft']             = 'Entwurf bearbeiten';
 $lang['btn_recover']           = 'Entwurf wiederherstellen';
 $lang['btn_draftdel']          = 'Entwurf löschen';
 $lang['btn_revert']            = 'Wiederherstellen';
+$lang['btn_register']          = 'Registrieren';
 $lang['loggedinas']            = 'Angemeldet als';
 $lang['user']                  = 'Benutzername';
 $lang['pass']                  = 'Passwort';
@@ -68,7 +68,6 @@ $lang['passchk']               = 'und nochmal';
 $lang['remember']              = 'Angemeldet bleiben';
 $lang['fullname']              = 'Voller Name';
 $lang['email']                 = 'E-Mail';
-$lang['register']              = 'Registrieren';
 $lang['profile']               = 'Benutzerprofil';
 $lang['badlogin']              = 'Nutzername oder Passwort sind falsch.';
 $lang['minoredit']             = 'kleine Änderung';
@@ -82,14 +81,14 @@ $lang['regmailfail']           = 'Offenbar ist ein Fehler beim Versenden der Pas
 $lang['regbadmail']            = 'Die angegebene E-Mail-Adresse scheint ungültig zu sein. Falls dies ein Fehler ist, wenden Sie sich bitte an den Wiki-Admin.';
 $lang['regbadpass']            = 'Die beiden eingegeben Passwörter stimmen nicht überein. Bitte versuchen Sie es noch einmal.';
 $lang['regpwmail']             = 'Ihr DokuWiki Passwort';
-$lang['reghere']               = 'Sie haben noch keinen Zugang? Hier anmelden';
+$lang['reghere']               = 'Sie haben noch keinen Zugang? Hier registrieren';
 $lang['profna']                = 'Änderung des Benutzerprofils in diesem Wiki nicht möglich.';
 $lang['profnochange']          = 'Keine Änderungen, nichts zu tun.';
-$lang['profnoempty']           = 'Es muß ein Name und eine E-Mail-Adresse angegeben werden.';
+$lang['profnoempty']           = 'Es muss ein Name und eine E-Mail-Adresse angegeben werden.';
 $lang['profchanged']           = 'Benutzerprofil erfolgreich geändert.';
 $lang['pwdforget']             = 'Passwort vergessen? Fordere ein neues an';
 $lang['resendna']              = 'Passwörter versenden ist in diesem Wiki nicht möglich.';
-$lang['resendpwd']             = 'Neues Passwort schicken für';
+$lang['resendpwd']             = 'Neues Passwort senden für';
 $lang['resendpwdmissing']      = 'Es tut mir Leid, aber Sie müssen alle Felder ausfüllen.';
 $lang['resendpwdnouser']       = 'Es tut mir Leid, aber der Benutzer existiert nicht in unserer Datenbank.';
 $lang['resendpwdbadauth']      = 'Es tut mir Leid, aber dieser Authentifizierungscode ist ungültig. Stellen Sie sicher, dass Sie den kompletten Bestätigungslink verwendet haben.';
@@ -114,13 +113,13 @@ $lang['js']['mediadisplay']    = 'Linktyp';
 $lang['js']['mediaalign']      = 'Anordnung';
 $lang['js']['mediasize']       = 'Bildgröße';
 $lang['js']['mediatarget']     = 'Linkziel';
-$lang['js']['mediaclose']      = 'Schliessen';
+$lang['js']['mediaclose']      = 'Schließen';
 $lang['js']['mediainsert']     = 'Einfügen';
 $lang['js']['mediadisplayimg'] = 'Bild anzeigen.';
 $lang['js']['mediadisplaylnk'] = 'Nur den Link anzeigen.';
 $lang['js']['mediasmall']      = 'Kleine Version';
 $lang['js']['mediamedium']     = 'Mittlere Version';
-$lang['js']['medialarge']      = 'Grosse Version';
+$lang['js']['medialarge']      = 'Große Version';
 $lang['js']['mediaoriginal']   = 'Originalversion';
 $lang['js']['medialnk']        = 'Link zur Detailseite';
 $lang['js']['mediadirect']     = 'Direktlink zum Original';
@@ -170,6 +169,9 @@ $lang['yours']                 = 'Ihre Version';
 $lang['diff']                  = 'Zeige Unterschiede zu aktueller Version';
 $lang['diff2']                 = 'Zeige Unterschiede der ausgewählten Versionen';
 $lang['difflink']              = 'Link zu dieser Vergleichsansicht';
+$lang['diff_type']             = 'Unterschiede anzeigen:';
+$lang['diff_inline']           = 'Inline';
+$lang['diff_side']             = 'Side by Side';
 $lang['line']                  = 'Zeile';
 $lang['breadcrumb']            = 'Zuletzt angesehen';
 $lang['youarehere']            = 'Sie befinden sich hier';
@@ -180,10 +182,10 @@ $lang['created']               = 'angelegt';
 $lang['restored']              = 'alte Version wieder hergestellt';
 $lang['external_edit']         = 'Externe Bearbeitung';
 $lang['summary']               = 'Zusammenfassung';
-$lang['noflash']               = 'Das <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> wird benötigt, um diesen Ihnalt anzuzeigen.';
+$lang['noflash']               = 'Das <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> wird benötigt, um diesen Inhalt anzuzeigen.';
 $lang['download']              = 'Schnipsel herunterladen';
 $lang['mail_newpage']          = 'Neue Seite:';
-$lang['mail_changed']          = 'Seite geaendert:';
+$lang['mail_changed']          = 'Seite geändert:';
 $lang['mail_subscribe_list']   = 'Geänderte Seiten im Namensraum:';
 $lang['mail_new_user']         = 'Neuer Benutzer:';
 $lang['mail_upload']           = 'Datei hochgeladen:';
@@ -240,7 +242,7 @@ $lang['subscr_m_current_header'] = 'Aktuelle Abonnements';
 $lang['subscr_m_unsubscribe']  = 'Löschen';
 $lang['subscr_m_subscribe']    = 'Abonnieren';
 $lang['subscr_m_receive']      = 'Benachrichtigung';
-$lang['subscr_style_every']    = 'Email bei jeder Bearbeitung';
+$lang['subscr_style_every']    = 'E-Mail bei jeder Bearbeitung';
 $lang['subscr_style_digest']   = 'Zusammenfassung der Änderungen für jede veränderte Seite (Alle %.2f Tage)';
 $lang['subscr_style_list']     = 'Liste der geänderten Seiten (Alle %.2f Tage)';
 $lang['authmodfailed']         = 'Benutzerüberprüfung nicht möglich. Bitte wenden Sie sich an den Systembetreuer.';
@@ -252,7 +254,7 @@ $lang['i_enableacl']           = 'Zugangskontrolle (ACL) aktivieren (empfohlen)'
 $lang['i_superuser']           = 'Administrator Benutzername';
 $lang['i_problems']            = 'Das Installationsprogramm hat unten aufgeführte Probleme festgestellt, die zunächst behoben werden müssen bevor Sie mit der Installation fortfahren können.';
 $lang['i_modified']            = 'Aus Sicherheitsgründen arbeitet dieses Script nur mit einer neuen, unmodifizierten DokuWiki Installation.  Sie sollten entweder alle Dateien noch einmal frisch installieren oder die <a href="http://dokuwiki.org/install">Dokuwiki-Installationsanleitung</a> konsultieren.';
-$lang['i_funcna']              = 'Die PHP Funktion <code>%s</code> ist nicht verfügbar. Unter Umständen wurde sie von Ihrem Hoster deaktiviert?';
+$lang['i_funcna']              = 'Die PHP-Funktion <code>%s</code> ist nicht verfügbar. Unter Umständen wurde sie von Ihrem Hoster deaktiviert?';
 $lang['i_phpver']              = 'Ihre PHP-Version <code>%s</code> ist niedriger als die benötigte Version <code>%s</code>. Bitte aktualisieren Sie Ihre PHP-Installation.';
 $lang['i_permfail']            = '<code>%s</code> ist nicht durch DokuWiki beschreibbar. Sie müssen die Berechtigungen dieses Ordners ändern!';
 $lang['i_confexists']          = '<code>%s</code> existiert bereits';
@@ -274,7 +276,7 @@ $lang['mu_gridstat']           = 'Status';
 $lang['mu_namespace']          = 'Namensraum';
 $lang['mu_browse']             = 'Durchsuchen';
 $lang['mu_toobig']             = 'zu groß';
-$lang['mu_ready']              = 'bereit zum hochladen';
+$lang['mu_ready']              = 'bereit zum Hochladen';
 $lang['mu_done']               = 'fertig';
 $lang['mu_fail']               = 'gescheitert';
 $lang['mu_authfail']           = 'Sitzung abgelaufen';
@@ -290,4 +292,4 @@ $lang['days']                  = 'vor %d Tagen';
 $lang['hours']                 = 'vor %d Stunden';
 $lang['minutes']               = 'vor %d Minuten';
 $lang['seconds']               = 'vor %d Sekunden';
-$lang['wordblock']             = 'Deine Bearbeitung wurde nicht gespeichert, da sie gesperrten Text enthielt (Spam).';
+$lang['wordblock']             = 'Ihre Bearbeitung wurde nicht gespeichert, da sie gesperrten Text enthielt (Spam).';
diff --git a/inc/lang/de/resendpwd.txt b/inc/lang/de/resendpwd.txt
index 2ff639369218e0f52f82574c1db2601e927e6616..a63fd5d5516636be3c47a787aa68fd65ac74dc47 100644
--- a/inc/lang/de/resendpwd.txt
+++ b/inc/lang/de/resendpwd.txt
@@ -1,3 +1,3 @@
 ====== Neues Passwort anfordern ======
 
-Füllen Sie alle Felder unten aus, um ein neues Passwort für Ihren Zugang zu erhalten. Das neue Passwort wird an Ihre gespeicherte E-Mail-Adresse geschickt. Der Benutzername sollte Ihr Wiki-Benutzername sein.
+Füllen Sie alle Felder unten aus, um ein neues Passwort für Ihren Zugang zu erhalten. Das neue Passwort wird an Ihre gespeicherte E-Mail-Adresse geschickt. Der Benutzername muss Ihrem Wiki-Benutzernamen entsprechen.
diff --git a/inc/lang/de/revisions.txt b/inc/lang/de/revisions.txt
index e1bafdd2d5971320090bddce09e93b9d548965da..843c3f9f45334ccf64a1c42eb43063c995074f39 100644
--- a/inc/lang/de/revisions.txt
+++ b/inc/lang/de/revisions.txt
@@ -1,4 +1,4 @@
 ====== Ältere Versionen ======
 
-Dies sind ältere Versionen des gewählten Dokuments. Um zu einer älteren Version zurückzukehren, wählen Sie die entsprechende Version aus, klicken auf **''[Diese Seite bearbeiten]''** und speichern Sie sie erneut ab.
+Dies sind ältere Versionen der gewählten Seite. Um zu einer älteren Version zurückzukehren, wählen Sie die entsprechende Version aus, klicken auf **''[Diese Seite bearbeiten]''** und speichern Sie diese erneut ab.
 
diff --git a/inc/lang/el/admin.txt b/inc/lang/el/admin.txt
index 49e6c657b995f36ce46641c5900fc4f62043e6a5..729004b05023a8511e54fd042cfe711535e3ecb1 100644
--- a/inc/lang/el/admin.txt
+++ b/inc/lang/el/admin.txt
@@ -1,3 +1,3 @@
 ====== Διαχείριση ======
 
-Παρακάτω μπορείτε να βρείτε μια λίστα με τις δυνατότητες διαχείρισης στο DokuWiki
+Παρακάτω μπορείτε να βρείτε μια λίστα με τις λειτουργίες διαχείρισης στο DokuWiki
diff --git a/inc/lang/el/adminplugins.txt b/inc/lang/el/adminplugins.txt
index ea00b959e8c4e0e3feaf2b9e1f4e163520fb3d59..ef1a2853b2523100de5bfeb21ec156b724ce613b 100644
--- a/inc/lang/el/adminplugins.txt
+++ b/inc/lang/el/adminplugins.txt
@@ -1 +1 @@
-===== Πρόσθετες συνδεόμενες υπομονάδες =====
\ No newline at end of file
+===== Πρόσθετα =====
\ No newline at end of file
diff --git a/inc/lang/el/conflict.txt b/inc/lang/el/conflict.txt
index 27b80b397760d35c087bc44674f4fb7dac27e6d0..a2065c0f3a964b6522e843e00caf106cab4fb23f 100644
--- a/inc/lang/el/conflict.txt
+++ b/inc/lang/el/conflict.txt
@@ -1,5 +1,8 @@
 ====== Υπάρχει μία νεώτερη έκδοση αυτής της σελίδας ======
 
-Υπάρχει μία νεώτερη έκδοση της σελίδας που τρoποποιήσατε. Αυτό συμβαίνει εάν κάποιος άλλος χρήστης τροποποίησε την ίδια σελίδα ενώ την τροποποιούσατε και εσείς.
+Υπάρχει μία νεώτερη έκδοση της σελίδας που τρoποποιήσατε. 
+Αυτό συμβαίνει εάν κάποιος άλλος χρήστης τροποποίησε την ίδια σελίδα ενώ την επεξεργαζόσασταν και εσείς.
 
-Ελέγξτε προσεκτικά τις διαφορές που παρουσιάζονται παρακάτω και έπειτα αποφασίστε ποια έκδοση θα κρατήσετε.  Εάν επιλέξετε ''Αποθήκευση'', η δική σας έκδοση θα αποθηκευτεί. Εάν επιλέξετε ''Ακύρωση'', η νεώτερη έκδοση θα διατηρηθεί ως τρέχουσα.
+Ελέγξτε προσεκτικά τις διαφορές που παρουσιάζονται παρακάτω και έπειτα αποφασίστε ποια έκδοση θα κρατήσετε.
+Εάν επιλέξετε ''Αποθήκευση'', η δική σας έκδοση θα αποθηκευτεί. 
+Εάν επιλέξετε ''Ακύρωση'', η νεώτερη έκδοση θα διατηρηθεί ως τρέχουσα.
diff --git a/inc/lang/el/denied.txt b/inc/lang/el/denied.txt
index 71e9a04b876034d7a06abfc997ed6bf6cd866d09..36d7ae103ed8821a22b359ef7f0ac4987c73af63 100644
--- a/inc/lang/el/denied.txt
+++ b/inc/lang/el/denied.txt
@@ -2,4 +2,4 @@
 
 Συγγνώμη, αλλά δεν έχετε επαρκή δικαιώματα για την συγκεκριμένη ενέργεια.
 
-Μήπως παραλείψατε να συνδεθείτε?
+Μήπως παραλείψατε να συνδεθείτε;
diff --git a/inc/lang/el/draft.txt b/inc/lang/el/draft.txt
index 3bb15037f2c3f6ee9c7172163649338d69a9da20..5ca7b8dfa8dafe4544a0c3db05bffd9fc5360d74 100644
--- a/inc/lang/el/draft.txt
+++ b/inc/lang/el/draft.txt
@@ -1,6 +1,8 @@
 ====== Βρέθηκε μία αυτόματα αποθηκευμένη σελίδα ======
 
-Η τελευταία τροποποίηση αυτής της σελίδας δεν ολοκληρώθηκε επιτυχώς. Η εφαρμογή αποθήκευσε αυτόματα μία εκδοχή της σελίδας την ώρα που την τροποποιούσατε και μπορείτε να την χρησιμοποιήσετε για να συνεχίσετε την εργασία σας. Παρακάτω φαίνεται αυτή η πιο πρόσφατη αυτόματα αποθηκευμένη σελίδα.
+Η τελευταία τροποποίηση αυτής της σελίδας δεν ολοκληρώθηκε επιτυχώς. 
+Η εφαρμογή αποθήκευσε αυτόματα μία εκδοχή της σελίδας την ώρα που την επεξεργαζόσασταν και μπορείτε να την χρησιμοποιήσετε για να συνεχίσετε την εργασία σας.
+Παρακάτω φαίνεται αυτή η πιο πρόσφατη αυτόματα αποθηκευμένη σελίδα.
 
 Μπορείτε να //επαναφέρετε// αυτή την αυτόματα αποθηκευμένη σελίδα ως τρέχουσα, να την //διαγράψετε// ή να //ακυρώσετε// τη διαδικασία τροποποίησης της τρέχουσας σελίδας.
 
diff --git a/inc/lang/el/edit.txt b/inc/lang/el/edit.txt
index 26b52f97a0cff5f7da4128040050af7f9240716b..8d9559fcc0032aca911987fafc6e388799b97791 100644
--- a/inc/lang/el/edit.txt
+++ b/inc/lang/el/edit.txt
@@ -1 +1,3 @@
-Τροποποιήστε την σελίδα **μόνο** εάν μπορείτε να την **βελτιώσετε**. Για να κάνετε δοκιμές με ασφάλεια ή να εξοικειωθείτε με το περιβάλλον χρησιμοποιήστε το [[:playground:playground|playground]]. Αφού τροποποιήστε την σελίδα επιλέξτε ''Αποθήκευση''. Δείτε τις [[:wiki:syntax|οδηγίες]] για την σωστή σύνταξη.
+Τροποποιήστε την σελίδα **μόνο** εάν μπορείτε να την **βελτιώσετε**. 
+Για να κάνετε δοκιμές με ασφάλεια ή να εξοικειωθείτε με το περιβάλλον χρησιμοποιήστε το [[:playground:playground|playground]]. 
+Αφού τροποποιήστε την σελίδα επιλέξτε ''Αποθήκευση''. Δείτε τις [[:wiki:syntax|οδηγίες]] για την σωστή σύνταξη.
diff --git a/inc/lang/el/index.txt b/inc/lang/el/index.txt
index 51f1fc600e2c7f48cb2a28ae715f12335e865442..e2da3a85e3afe24ad460916b4a8e93d4fedf19f7 100644
--- a/inc/lang/el/index.txt
+++ b/inc/lang/el/index.txt
@@ -1,3 +1,3 @@
 ====== Κατάλογος ======
 
-Αυτός είναι ένας κατάλογος όλων των διαθέσιμων σελίδων ταξινομημένων κατά [[doku>namespaces|φακέλους]].
+Εδώ βλέπετε τον κατάλογο όλων των διαθέσιμων σελίδων, ταξινομημένες κατά [[doku>namespaces|φακέλους]].
diff --git a/inc/lang/el/install.html b/inc/lang/el/install.html
index 89429d55b6a90517a17cb8dacb80bfc18f014c03..9487de7c77c2bb8401e3dd3bb0ef2359d00f641f 100644
--- a/inc/lang/el/install.html
+++ b/inc/lang/el/install.html
@@ -1,25 +1,26 @@
 <p>Αυτή η σελίδα περιέχει πληροφορίες που βοηθούν στην αρχική εγκατάσταση και
-ρύθμιση της εφαρμογής <a href="http://dokuwiki.org">Dokuwiki</a>. Περισσότερες 
-πληροφορίες υπάρχουν στη <a href="http://dokuwiki.org/installer">σελίδα τεκμηρίωσης</a> 
-του οδηγού εγκατάστασης.</p>
+ρύθμιση της εφαρμογής <a href="http://www.dokuwiki.org/el:dokuwiki">Dokuwiki</a>. 
+Περισσότερες πληροφορίες υπάρχουν στη <a href="http://www.dokuwiki.org/el:installer">
+σελίδα τεκμηρίωσης</a> του οδηγού εγκατάστασης.</p>
 
-<p>Η εφαρμογή DokuWiki χρησιμοποιεί απλά αρχεία για να αποθηκεύει τις σελίδες wiki 
-καθώς και πληροφορίες που σχετίζονται με αυτές (π.χ. εικόνες, καταλόγους αναζήτησης,
-παλαιότερες εκδόσεις σελίδων, κλπ). Για να λειτουργεί σωστά η εφαρμογή DokuWiki
-<strong>πρέπει</strong> να έχει δικαιώματα εγγραφής στους φακέλους που φιλοξενούν 
-αυτά τα αρχεία. Ο οδηγός εγκατάστασης δεν έχει την δυνατότητα να παραχωρήσει αυτά τα 
-δικαιώματα εγγραφής στους σχετικούς φακέλους. Ο κανονικός τρόπος για να γίνει αυτό είναι
-είτε απευθείας σε περιβάλλον γραμμής εντολών ή, εάν δεν έχετε τέτοια πρόσβαση, μέσω FTP ή 
-του πίνακα ελέγχου του περιβάλλοντος φιλοξενίας (π.χ. cPanel).</p>
+<p>Η εφαρμογή DokuWiki χρησιμοποιεί απλά αρχεία για να αποθηκεύει τις σελίδες 
+wiki καθώς και πληροφορίες που σχετίζονται με αυτές (π.χ. εικόνες, καταλόγους 
+αναζήτησης, παλαιότερες εκδόσεις σελίδων, κλπ). Για να λειτουργεί σωστά η εφαρμογή 
+DokuWiki <strong>πρέπει</strong> να έχει δικαιώματα εγγραφής στους φακέλους που 
+φιλοξενούν αυτά τα αρχεία. Ο οδηγός εγκατάστασης δεν έχει την δυνατότητα να 
+παραχωρήσει αυτά τα δικαιώματα εγγραφής στους σχετικούς φακέλους. Ο κανονικός 
+τρόπος για να γίνει αυτό είναι είτε απευθείας σε περιβάλλον γραμμής εντολών ή, 
+εάν δεν έχετε τέτοια πρόσβαση, μέσω FTP ή του πίνακα ελέγχου του περιβάλλοντος 
+φιλοξενίας (π.χ. cPanel).</p>
 
 <p>Ο οδηγός εγκατάστασης θα ρυθμίσει την εφαρμογή DokuWiki ώστε να χρησιμοποιεί 
-<acronym title="access control list">ACL</acronym>, με τρόπο ώστε ο διαχειριστής να
-έχει δυνατότητα εισόδου και πρόσβαση στο μενού διαχείρισης της εφαρμογής για εγκατάσταση 
-επεκτάσεων, διαχείριση χρηστών, διαχείριση δικαιωμάτων πρόσβασης στις διάφορες σελίδες και
-αλλαγή των ρυθμίσεων. Αυτό δεν είναι απαραίτητο για να λειτουργήσει η εφαρμογή, αλλά
-κάνει την διαχείρισή της ευκολότερη.</p>
+<acronym title="access control list">ACL</acronym>, με τρόπο ώστε ο διαχειριστής 
+να έχει δυνατότητα εισόδου και πρόσβαση στο μενού διαχείρισης της εφαρμογής για 
+εγκατάσταση επεκτάσεων, διαχείριση χρηστών, διαχείριση δικαιωμάτων πρόσβασης στις 
+διάφορες σελίδες και αλλαγή των ρυθμίσεων. Αυτό δεν είναι απαραίτητο για να 
+λειτουργήσει η εφαρμογή, αλλά κάνει την διαχείρισή της ευκολότερη.</p>
 
 <p>Οι έμπειροι χρήστες και οι χρήστες με ειδικές απαιτήσεις μπορούν να επισκεφθούν 
-τις σελίδες που περιέχουν λεπτομερείς
-<a href="http://dokuwiki.org/install">οδηγίες εγκατάστασης</a>
-και <a href="http://dokuwiki.org/config">πληροφορίες για τις ρυθμίσεις</a>.</p>
+τις σελίδες που περιέχουν λεπτομερείς <a href="http://dokuwiki.org/install">
+οδηγίες εγκατάστασης</a> και <a href="http://dokuwiki.org/config">πληροφορίες 
+για τις ρυθμίσεις</a>.</p>
\ No newline at end of file
diff --git a/inc/lang/el/lang.php b/inc/lang/el/lang.php
index 83a869df0a6655f26622f126f2b784273b62558a..11c64285eacce8ef3aea920d159358aacfacc778 100644
--- a/inc/lang/el/lang.php
+++ b/inc/lang/el/lang.php
@@ -15,7 +15,7 @@ $lang['doublequoteclosing']    = '”';
 $lang['singlequoteopening']    = '‘';
 $lang['singlequoteclosing']    = '’';
 $lang['apostrophe']            = '’';
-$lang['btn_edit']              = 'Τροποποίηση σελίδας';
+$lang['btn_edit']              = 'Επεξεργασία σελίδας';
 $lang['btn_source']            = 'Προβολή κώδικα σελίδας';
 $lang['btn_show']              = 'Προβολή σελίδας';
 $lang['btn_create']            = 'Δημιουργία σελίδας';
@@ -23,30 +23,31 @@ $lang['btn_search']            = 'Αναζήτηση';
 $lang['btn_save']              = 'Αποθήκευση';
 $lang['btn_preview']           = 'Προεπισκόπηση';
 $lang['btn_top']               = 'Επιστροφή στην κορυφή της σελίδας';
-$lang['btn_newer']             = '<< πλέον πρόσφατες';
-$lang['btn_older']             = 'λιγότερο πρόσφατες >>';
+$lang['btn_newer']             = '<< πρόσφατες';
+$lang['btn_older']             = 'παλαιότερες >>';
 $lang['btn_revs']              = 'Παλαιότερες εκδόσεις σελίδας';
-$lang['btn_recent']            = 'Πρόσφατες αλλαγές σελίδων';
+$lang['btn_recent']            = 'Πρόσφατες αλλαγές';
 $lang['btn_upload']            = 'Φόρτωση';
 $lang['btn_cancel']            = 'Ακύρωση';
 $lang['btn_index']             = 'Κατάλογος';
-$lang['btn_secedit']           = 'Τροποποίηση';
-$lang['btn_login']             = 'Είσοδος χρήστη';
-$lang['btn_logout']            = 'Έξοδος χρήστη';
+$lang['btn_secedit']           = 'Επεξεργασία';
+$lang['btn_login']             = 'Σύνδεση χρήστη';
+$lang['btn_logout']            = 'Αποσύνδεση χρήστη';
 $lang['btn_admin']             = 'Διαχείριση';
 $lang['btn_update']            = 'Ενημέρωση';
 $lang['btn_delete']            = 'Σβήσιμο';
 $lang['btn_back']              = 'Πίσω';
-$lang['btn_backlink']          = 'Σύνδεσμοι προς την τρέχουσα σελίδα';
+$lang['btn_backlink']          = 'Σύνδεσμοι προς αυτή τη σελίδα';
 $lang['btn_backtomedia']       = 'Επιστροφή στην επιλογή αρχείων';
 $lang['btn_subscribe']         = 'Εγγραφή σε λήψη ενημερώσεων σελίδας';
-$lang['btn_profile']           = 'Τροποποίηση προφίλ';
+$lang['btn_profile']           = 'Επεξεργασία προφίλ';
 $lang['btn_reset']             = 'Ακύρωση';
 $lang['btn_resendpwd']         = 'Αποστολή νέου κωδικού';
-$lang['btn_draft']             = 'Τροποποίηση αυτόματα αποθηκευμένης σελίδας';
+$lang['btn_draft']             = 'Επεξεργασία  αυτόματα αποθηκευμένης σελίδας';
 $lang['btn_recover']           = 'Επαναφορά αυτόματα αποθηκευμένης σελίδας';
 $lang['btn_draftdel']          = 'Διαγραφή αυτόματα αποθηκευμένης σελίδας';
 $lang['btn_revert']            = 'Αποκατάσταση';
+$lang['btn_register']          = 'Εγγραφή';
 $lang['loggedinas']            = 'Συνδεδεμένος ως';
 $lang['user']                  = 'Όνομα χρήστη';
 $lang['pass']                  = 'Κωδικός';
@@ -55,8 +56,7 @@ $lang['oldpass']               = 'Επιβεβαίωση τρέχοντος κω
 $lang['passchk']               = 'ακόμη μια φορά';
 $lang['remember']              = 'Απομνημόνευση στοιχείων λογαριασμού';
 $lang['fullname']              = 'Ονοματεπώνυμο';
-$lang['email']                 = 'E-Mail';
-$lang['register']              = 'Εγγραφή';
+$lang['email']                 = 'e-mail';
 $lang['profile']               = 'Προφίλ χρήστη';
 $lang['badlogin']              = 'Συγνώμη, το όνομα χρήστη ή ο κωδικός ήταν λανθασμένο.';
 $lang['minoredit']             = 'Ασήμαντες αλλαγές';
@@ -67,15 +67,15 @@ $lang['reguexists']            = 'Αυτός ο λογαριασμός υπάρ
 $lang['regsuccess']            = 'Ο λογαριασμός δημιουργήθηκε και ο κωδικός εστάλει με e-mail.';
 $lang['regsuccess2']           = 'Ο λογαριασμός δημιουργήθηκε.';
 $lang['regmailfail']           = 'Φαίνεται να υπάρχει πρόβλημα με την αποστολή του κωδικού μέσω e-mail. Παρακαλούμε επικοινωνήστε μαζί μας!';
-$lang['regbadmail']            = 'Η διεύθυνση e-mail δεν δείχνει έγκυρη - εάν πιστεύετε ότι αυτό είναι λάθος, επικοινωνήστε μαζί μας';
+$lang['regbadmail']            = 'Η διεύθυνση e-mail δεν είναι έγκυρη - εάν πιστεύετε ότι αυτό είναι λάθος, επικοινωνήστε μαζί μας';
 $lang['regbadpass']            = 'Οι δύο κωδικοί δεν είναι ίδιοι, προσπαθήστε ξανά.';
 $lang['regpwmail']             = 'Ο κωδικός σας';
 $lang['reghere']               = 'Δεν έχετε λογαριασμό ακόμη? Δημιουργήστε έναν';
-$lang['profna']                = 'Αυτό το wiki δεν υποστηρίζει την τροποποίηση προφίλ.';
+$lang['profna']                = 'Αυτό το wiki δεν υποστηρίζει την επεξεργασία προφίλ.';
 $lang['profnochange']          = 'Καμία αλλαγή.';
 $lang['profnoempty']           = 'Δεν επιτρέπεται κενό όνομα χρήστη η κενή διεύθυνση email.';
 $lang['profchanged']           = 'Το προφίλ χρήστη τροποποιήθηκε επιτυχώς.';
-$lang['pwdforget']             = 'Ξεχάσατε το κωδικό σας? Αποκτήστε νέο.';
+$lang['pwdforget']             = 'Ξεχάσατε το κωδικό σας; Αποκτήστε νέο.';
 $lang['resendna']              = 'Αυτό το wiki δεν υποστηρίζει την εκ\' νέου αποστολή κωδικών.';
 $lang['resendpwd']             = 'Αποστολή νέων κωδικών για τον χρήστη';
 $lang['resendpwdmissing']      = 'Πρέπει να συμπληρώσετε όλα τα πεδία.';
@@ -83,7 +83,7 @@ $lang['resendpwdnouser']       = 'Αυτός ο χρήστης δεν υπάρχ
 $lang['resendpwdbadauth']      = 'Αυτός ο κωδικός ενεργοποίησης δεν είναι έγκυρος.';
 $lang['resendpwdconfirm']      = 'Ο σύνδεσμος προς την σελίδα ενεργοποίησης εστάλει με e-mail.';
 $lang['resendpwdsuccess']      = 'Ο νέος σας κωδικός εστάλη με e-mail.';
-$lang['license']               = 'Εκτός εάν αναφέρεται διαφορετικά, το υλικό αυτού του wiki διατίθεται κάτω από την ακόλουθη άδεια:';
+$lang['license']               = 'Εκτός εάν αναφέρεται διαφορετικά, το περιεχόμενο σε αυτο το wiki διέπεται από την ακόλουθη άδεια:';
 $lang['licenseok']             = 'Σημείωση: Τροποποιώντας αυτή την σελίδα αποδέχεστε την διάθεση του υλικού σας σύμφωνα με την ακόλουθη άδεια:';
 $lang['searchmedia']           = 'Αναζήτηση αρχείου:';
 $lang['searchmedia_in']        = 'Αναζήτηση σε %s';
@@ -92,9 +92,9 @@ $lang['txt_filename']          = 'Επιλέξτε νέο όνομα αρχεί
 $lang['txt_overwrt']           = 'Αντικατάσταση υπάρχοντος αρχείου';
 $lang['lockedby']              = 'Προσωρινά κλειδωμένο από';
 $lang['lockexpire']            = 'Το κλείδωμα λήγει στις';
-$lang['willexpire']            = 'Το κλείδωμά σας για την επεξεργασία αυτής της σελίδας θα λήξει σε ένα λεπτό.\n Για να το ανανεώσετε χρησιμοποιήστε την επιλογή Προεπισκόπηση.';
+$lang['willexpire']            = 'Το κλείδωμά σας για την επεξεργασία αυτής της σελίδας θα λήξει σε ένα λεπτό.\n Για να το ανανεώσετε χρησιμοποιήστε την Προεπισκόπηση.';
 $lang['js']['notsavedyet']     = 'Οι μη αποθηκευμένες αλλαγές θα χαθούν.
-Θέλετε να συνεχίσετε?';
+Θέλετε να συνεχίσετε;';
 $lang['js']['searchmedia']     = 'Αναζήτηση για αρχεία';
 $lang['js']['keepopen']        = 'Το παράθυρο να μην κλείνει';
 $lang['js']['hidedetails']     = 'Απόκρυψη λεπτομερειών';
@@ -107,25 +107,25 @@ $lang['js']['mediaclose']      = 'Κλείσιμο';
 $lang['js']['mediainsert']     = 'Εισαγωγή';
 $lang['js']['mediadisplayimg'] = 'Προβολή εικόνας.';
 $lang['js']['mediadisplaylnk'] = 'Προβολή μόνο του συνδέσμου.';
-$lang['js']['mediasmall']      = 'Μικρή έκδοση';
-$lang['js']['mediamedium']     = 'Μεσαία έκδοση';
-$lang['js']['medialarge']      = 'Μεγάλη έκδοση';
-$lang['js']['mediaoriginal']   = 'Κανονική έκδοση';
+$lang['js']['mediasmall']      = 'Μικρό μέγεθος';
+$lang['js']['mediamedium']     = 'Μεσαίο μέγεθος';
+$lang['js']['medialarge']      = 'Μεγάλο μέγεθος';
+$lang['js']['mediaoriginal']   = 'Αρχικό μέγεθος';
 $lang['js']['medialnk']        = 'Σύνδεσμος στην σελίδα λεπτομερειών';
 $lang['js']['mediadirect']     = 'Απευθείας σύνδεσμος στο αυθεντικό';
 $lang['js']['medianolnk']      = 'Χωρίς σύνδεσμο';
 $lang['js']['medianolink']     = 'Να μην γίνει σύνδεσμος η εικόνα';
-$lang['js']['medialeft']       = 'Στοίχιση της εικόνας αριστερά.';
-$lang['js']['mediaright']      = 'Στοίχιση της εικόνας δεξιά.';
-$lang['js']['mediacenter']     = 'Στοίχιση της εικόνας στη μέση.';
-$lang['js']['medianoalign']    = 'Να μην γίνει στοίχιση.';
+$lang['js']['medialeft']       = 'Αριστερή στοίχιση εικόνας.';
+$lang['js']['mediaright']      = 'Δεξιά στοίχιση εικόνας.';
+$lang['js']['mediacenter']     = 'Κέντρική στοίχιση εικόνας.';
+$lang['js']['medianoalign']    = 'Χωρίς στοίχηση.';
 $lang['js']['nosmblinks']      = 'Οι σύνδεσμοι προς Windows shares δουλεύουν μόνο στον Microsoft Internet Explorer.
 Μπορείτε πάντα να κάνετε αντιγραφή και επικόλληση του συνδέσμου.';
 $lang['js']['linkwiz']         = 'Αυτόματος Οδηγός Συνδέσμων';
 $lang['js']['linkto']          = 'Σύνδεση σε:';
-$lang['js']['del_confirm']     = 'Να διαγραφεί?';
+$lang['js']['del_confirm']     = 'Να διαγραφεί;';
 $lang['js']['mu_btn']          = 'Ταυτόχρονη φόρτωση πολλαπλών φακέλων';
-$lang['rssfailed']             = 'Εμφανίστηκε κάποιο σφάλμα κατά την ανάγνωση αυτού του feed: ';
+$lang['rssfailed']             = 'Παρουσιάστηκε κάποιο σφάλμα κατά την ανάγνωση αυτού του feed: ';
 $lang['nothingfound']          = 'Δεν βρέθηκαν σχετικά αποτελέσματα.';
 $lang['mediaselect']           = 'Επιλογή Αρχείων';
 $lang['fileupload']            = 'Φόρτωση αρχείου';
@@ -156,9 +156,12 @@ $lang['quickhits']             = 'Σχετικές σελίδες';
 $lang['toc']                   = 'Πίνακας Περιεχομένων';
 $lang['current']               = 'τρέχουσα';
 $lang['yours']                 = 'Η έκδοσή σας';
-$lang['diff']                  = 'προβολή διαφορών με την τρέχουσα έκδοση';
+$lang['diff']                  = 'Προβολή διαφορών με την τρέχουσα έκδοση';
 $lang['diff2']                 = 'Προβολή διαφορών μεταξύ των επιλεγμένων εκδόσεων';
 $lang['difflink']              = 'Σύνδεσμος σε αυτή την προβολή διαφορών.';
+$lang['diff_type']             = 'Προβολή διαφορών:';
+$lang['diff_inline']           = 'Σε σειρά';
+$lang['diff_side']             = 'Δίπλα-δίπλα';
 $lang['line']                  = 'Γραμμή';
 $lang['breadcrumb']            = 'Ιστορικό';
 $lang['youarehere']            = 'Είστε εδώ';
@@ -218,12 +221,12 @@ $lang['img_camera']            = 'Camera';
 $lang['img_keywords']          = 'Λέξεις-κλειδιά';
 $lang['subscr_subscribe_success'] = 'Ο/η %s προστέθηκε στην λίστα ειδοποιήσεων για το %s';
 $lang['subscr_subscribe_error'] = 'Σφάλμα κατά την προσθήκη του/της %s στην λίστα ειδοποιήσεων για το %s';
-$lang['subscr_subscribe_noaddress'] = 'Δεν υπάρχει διεύθυνση ταχυδρομείου, συσχετισμένη με το όνομα χρήστη σας, κατά συνέπεια δεν μπορείτε να προστεθείτε στην λίστα ειδοποιήσεων';
+$lang['subscr_subscribe_noaddress'] = 'Δεν υπάρχει διεύθυνση ταχυδρομείου συσχετισμένη με το όνομα χρήστη σας. Κατά συνέπεια δεν μπορείτε να προστεθείτε στην λίστα ειδοποιήσεων';
 $lang['subscr_unsubscribe_success'] = 'Ο/η %s, απομακρύνθηκε από την λίστα ειδοποιήσεων για το %s';
 $lang['subscr_unsubscribe_error'] = 'Σφάλμα κατά την απομάκρυνση του/της %s στην λίστα ειδοποιήσεων για το %s';
 $lang['subscr_already_subscribed'] = 'Ο/η %s είναι ήδη στην λίστα ειδοποίησης για το %s';
 $lang['subscr_not_subscribed'] = 'Ο/η %s δεν είναι στην λίστα ειδοποίησης για το %s';
-$lang['subscr_m_not_subscribed'] = 'Αυτήν την στιγμή, δεν είσαστε γραμμένος/η στην λίστα ειδοποίησης της τρέχουσας σελίδας ή φακέλου.';
+$lang['subscr_m_not_subscribed'] = 'Αυτήν την στιγμή, δεν είσαστε εγεγγραμμένος/η στην λίστα ειδοποίησης της τρέχουσας σελίδας ή φακέλου.';
 $lang['subscr_m_new_header']   = 'Προσθήκη στην λίστα ειδοποίησης';
 $lang['subscr_m_current_header'] = 'Τρέχουσες εγγραφές ειδοποιήσεων';
 $lang['subscr_m_unsubscribe']  = 'Διαγραφή';
@@ -231,17 +234,17 @@ $lang['subscr_m_subscribe']    = 'Εγγραφή';
 $lang['subscr_m_receive']      = 'Λήψη';
 $lang['subscr_style_every']    = 'email σε κάθε αλλαγή';
 $lang['subscr_style_digest']   = 'συνοπτικό email αλλαγών της σελίδας (κάθε %.2f μέρες)';
-$lang['subscr_style_list']     = 'λίστα αλλαγμένων σελίδων μετά από το τελευταίο email (κάθε %.2f μέρες)';
+$lang['subscr_style_list']     = 'λίστα σελίδων με αλλαγές μετά από το τελευταίο email (κάθε %.2f μέρες)';
 $lang['authmodfailed']         = 'Κακή ρύθμιση λίστας χρηστών. Παρακαλούμε ενημερώστε τον διαχειριστή του wiki.';
-$lang['authtempfail']          = 'Η είσοδος χρηστών δεν λειτουργεί αυτή την στιγμή. Εάν αυτό διαρκεί για πολύ χρόνο, παρακαλούμε ενημερώστε τον διαχειριστή του wiki.';
+$lang['authtempfail']          = 'Η συνδεση χρηστών είναι απενεργοποιημένη αυτή την στιγμή. Αν αυτό διαρκέσει για πολύ, παρακαλούμε ενημερώστε τον διαχειριστή του wiki.';
 $lang['i_chooselang']          = 'Επιλογή γλώσσας';
 $lang['i_installer']           = 'Οδηγός εγκατάστασης DokuWiki';
 $lang['i_wikiname']            = 'Ονομασία wiki';
-$lang['i_enableacl']           = 'Ενεργοποίηση Λίστας Δικαιωμάτων Πρόσβασης - ACL (συνιστάται)';
+$lang['i_enableacl']           = 'Ενεργοποίηση Λίστας Δικαιωμάτων Πρόσβασης - ACL (συνίσταται)';
 $lang['i_superuser']           = 'Διαχειριστής';
 $lang['i_problems']            = 'Ο οδηγός εγκατάστασης συνάντησε τα προβλήματα που αναφέρονται παρακάτω. Η εγκατάσταση δεν θα ολοκληρωθεί επιτυχώς μέχρι να επιλυθούν αυτά τα προβλήματα.';
 $lang['i_modified']            = 'Για λόγους ασφαλείας, ο οδηγός εγκατάστασης λειτουργεί μόνο με νέες και μη τροποποιημένες εγκαταστάσεις Dokuwiki.
-Πρέπει είτε να κάνετε νέα εγκατάσταση, χρησιμοποιώντας το αρχικό πακέτο εγκατάστασης, ή να συμβουλευτείτε τις <a href="http://dokuwiki.org/install">οδηγίες εγκατάστασης της εφαρμογής</a>.';
+Πρέπει είτε να κάνετε νέα εγκατάσταση, χρησιμοποιώντας το αρχικό πακέτο εγκατάστασης, ή να συμβουλευτείτε τις <a href="http://dokuwiki.org/el:install">οδηγίες εγκατάστασης της εφαρμογής</a>.';
 $lang['i_funcna']              = 'Η λειτουργία <code>%s</code> της PHP δεν είναι διαθέσιμη. Πιθανόν να είναι απενεργοποιημένη στις ρυθμίσεις έναρξης της PHP';
 $lang['i_phpver']              = 'Η έκδοση <code>%s</code> της PHP που έχετε είναι παλαιότερη της απαιτούμενης <code>%s</code>. Πρέπει να αναβαθμίσετε την PHP.';
 $lang['i_permfail']            = 'Ο φάκελος <code>%s</code> δεν είναι εγγράψιμος από την εφαρμογή DokuWiki. Πρέπει να διορθώσετε τα δικαιώματα πρόσβασης αυτού του φακέλου!';
@@ -268,16 +271,16 @@ $lang['mu_ready']              = 'έτοιμο για φόρτωση';
 $lang['mu_done']               = 'ολοκληρώθηκε';
 $lang['mu_fail']               = 'απέτυχε';
 $lang['mu_authfail']           = 'η συνεδρία έληξε';
-$lang['mu_progress']           = '@PCT@% φορτώθηκε';
+$lang['mu_progress']           = 'φορτώθηκε @PCT@%';
 $lang['mu_filetypes']          = 'Επιτρεπτοί τύποι αρχείων';
 $lang['mu_info']               = 'τα αρχεία ανέβηκαν.';
 $lang['mu_lasterr']            = 'Τελευταίο σφάλμα:';
 $lang['recent_global']         = 'Βλέπετε τις αλλαγές εντός του φακέλου <b>%s</b>. Μπορείτε επίσης να <a href="%s">δείτε τις πρόσφατες αλλαγές σε όλο το wiki</a>.';
-$lang['years']                 = 'πριν από %d χρόνια';
-$lang['months']                = 'πριν από %d μήνες';
-$lang['weeks']                 = 'πριν από %d εβδομάδες';
-$lang['days']                  = 'πριν από %d ημέρες';
-$lang['hours']                 = 'πριν από %d ώρες';
-$lang['minutes']               = 'πριν από %d λεπτά';
-$lang['seconds']               = 'πριν από %d δευτερόλεπτα';
-$lang['wordblock']             = 'Η αλλαγή σας δεν αποθηκεύτηκε γιατί περιείχε μπλοκαρισμένο κείμενο (spam).';
+$lang['years']                 = 'πριν %d χρόνια';
+$lang['months']                = 'πριν %d μήνες';
+$lang['weeks']                 = 'πριν %d εβδομάδες';
+$lang['days']                  = 'πριν %d ημέρες';
+$lang['hours']                 = 'πριν %d ώρες';
+$lang['minutes']               = 'πριν %d λεπτά';
+$lang['seconds']               = 'πριν %d δευτερόλεπτα';
+$lang['wordblock']             = 'Η αλλαγή σας δεν αποθηκεύτηκε γιατί περιείχε spam.';
\ No newline at end of file
diff --git a/inc/lang/el/locked.txt b/inc/lang/el/locked.txt
index d2f542c19aa2dd16f1fdc8a7144667826fe69e17..425c334f1f27f70580790667ba12d203bfac52a2 100644
--- a/inc/lang/el/locked.txt
+++ b/inc/lang/el/locked.txt
@@ -1,4 +1,5 @@
 ====== Κλειδωμένη σελίδα ======
 
-Αυτή η σελίδα είναι προς το παρόν δεσμευμένη για τροποποίηση από άλλον χρήστη. Θα πρέπει να περιμένετε μέχρι ο συγκεκριμένος χρήστης να τελειώσει την τροποποίηση ή να εκπνεύσει το χρονικό όριο για το σχετικό κλείδωμα.
+Αυτή η σελίδα είναι προς το παρόν δεσμευμένη για τροποποίηση από άλλον χρήστη. 
+Θα πρέπει να περιμένετε μέχρι ο συγκεκριμένος χρήστης να σταματήσει να την επεξεργάζεται ή να εκπνεύσει το χρονικό όριο για το σχετικό κλείδωμα.
 
diff --git a/inc/lang/el/login.txt b/inc/lang/el/login.txt
index 3839b7279d2de5a107f9496975e2b2a41027ab16..3021a19eae4d50e147d895899a0469f0f53bd4d2 100644
--- a/inc/lang/el/login.txt
+++ b/inc/lang/el/login.txt
@@ -1,3 +1,5 @@
-====== Είσοδος χρήστη ======
+====== Σύνδεση χρήστη ======
 
-Αυτή την στιγμή δεν έχετε συνδεθεί ως χρήστης! Για να συνδεθείτε, εισάγετε τα στοιχεία σας στην παρακάτω φόρμα. Πρέπει να έχετε ενεργοποιήσει τα cookies στον φυλλομετρητή σας.
+Αυτή την στιγμή δεν έχετε συνδεθεί ως χρήστης!
+Για να συνδεθείτε, εισάγετε τα στοιχεία σας στην παρακάτω φόρμα.
+Πρέπει να έχετε ενεργοποιήσει τα cookies στο πρόγραμμα περιήγηση σας.
diff --git a/inc/lang/el/newpage.txt b/inc/lang/el/newpage.txt
index e8d65d6e5bc9e6fa481a2de95379f60757c554c7..3349ad90e5a2820d277a1347f243ac5ca9e60c5d 100644
--- a/inc/lang/el/newpage.txt
+++ b/inc/lang/el/newpage.txt
@@ -1,3 +1,4 @@
 ====== Αυτή η σελίδα δεν υπάρχει ακόμη ======
 
-Η σελίδα που ζητάτε δεν υπάρχει ακόμη. Εάν όμως έχετε επαρκή δικαιώματα, μπορείτε να την δημιουργήσετε επιλέγοντας ''Δημιουργία σελίδας''.
+Η σελίδα που ζητάτε δεν υπάρχει ακόμη. 
+Aν όμως έχετε επαρκή δικαιώματα, μπορείτε να την δημιουργήσετε επιλέγοντας ''Δημιουργία σελίδας''.
diff --git a/inc/lang/el/norev.txt b/inc/lang/el/norev.txt
index 9ce347948b047147385773a567d822ca4a3d8a41..2b13290ffb1e0fcaebaf58e0f5da4b7fd79369de 100644
--- a/inc/lang/el/norev.txt
+++ b/inc/lang/el/norev.txt
@@ -1,4 +1,5 @@
-====== Δεν υπάρχει τέτοια έκδοση ======
+====== Αυτή η έκδοση δεν υπάρχει ======
 
-Η έκδοση που αναζητήσατε δεν υπάρχει. Επιλέξτε ''Παλαιότερες εκδόσεις σελίδας'' για να δείτε την λίστα με τις παλαιότερες εκδόσεις της τρέχουσας σελίδας.
+Η έκδοση που αναζητήσατε δεν υπάρχει. 
+Μπορείτε να δείτε λίστα με τις παλαιότερες εκδόσεις της τρέχουσας σελίδας πατώντας ''Παλαιότερες εκδόσεις σελίδας''.
 
diff --git a/inc/lang/el/password.txt b/inc/lang/el/password.txt
index 621a215f039b0a6234bfe447548a1a81d384e81d..d27fbb3c36154365b3215a4681e39b89523143fe 100644
--- a/inc/lang/el/password.txt
+++ b/inc/lang/el/password.txt
@@ -2,8 +2,8 @@
 
 Αυτά είναι τα στοιχεία εισόδου για το @TITLE@ στο @DOKUWIKIURL@
 
-Όνομα   : @LOGIN@
-Κωδικός : @PASSWORD@
+Όνομα       : @LOGIN@
+Συνθηματικό : @PASSWORD@
 
 -- 
 Αυτό το e-mail δημιουργήθηκε αυτόματα από την εφαρμογή DokuWiki στην διεύθυνση
diff --git a/inc/lang/el/preview.txt b/inc/lang/el/preview.txt
index f6709a441d37d03bd6e0886c1908769a94bc372f..aef65c974feb1ba5f13fa70c20732168dd43eb29 100644
--- a/inc/lang/el/preview.txt
+++ b/inc/lang/el/preview.txt
@@ -1,4 +1,5 @@
 ====== Προεπισκόπηση ======
 
-Αυτή είναι μια προεπισκόπηση του πως θα δείχνει η σελίδα. Θυμηθείτε: Οι αλλαγές σας **δεν έχουν αποθηκευθεί** ακόμη!
+Αυτή είναι μια προεπισκόπηση του πως θα δείχνει η σελίδα. 
+Υπενθύμιση: Οι αλλαγές σας **δεν έχουν αποθηκευθεί** ακόμη!
 
diff --git a/inc/lang/el/pwconfirm.txt b/inc/lang/el/pwconfirm.txt
index 03f408819f600d52a75d109bbfd3ff2bec14f21a..a9e58be7d137d7767aa46006d601e2fb9794d7af 100644
--- a/inc/lang/el/pwconfirm.txt
+++ b/inc/lang/el/pwconfirm.txt
@@ -1,11 +1,11 @@
 Γεια σας @FULLNAME@!
 
-Κάποιος ζήτησε τη δημιουργία νέου κωδικού για τον λογαριασμό @TITLE@
+Κάποιος ζήτησε τη δημιουργία νέου συνθηματικού για τον λογαριασμό @TITLE@
 που διατηρείτε στο @DOKUWIKIURL@
 
-Εάν δεν ζητήσατε εσείς την δημιουργία νέου κωδικού απλά αγνοήστε αυτό το e-mail.
+Αν δεν ζητήσατε εσείς την δημιουργία νέου συνθηματικού απλά αγνοήστε αυτό το e-mail.
 
-Εάν όντως εσείς ζητήσατε την δημιουργία νέου κωδικού, ακολουθήστε τον παρακάτω σύνδεσμο για να το επιβεβαιώσετε.
+Αν όντως εσείς ζητήσατε την δημιουργία νέου συνθηματικού, ακολουθήστε τον παρακάτω σύνδεσμο για να το επιβεβαιώσετε.
 
 @CONFIRM@
 
diff --git a/inc/lang/el/read.txt b/inc/lang/el/read.txt
index 2d43c28fcdde9a3e823f5d7355f867e8dd51ea03..a620ab559d9e44a4a8f5ed6a91c0e97c630b3bc0 100644
--- a/inc/lang/el/read.txt
+++ b/inc/lang/el/read.txt
@@ -1 +1,2 @@
-Μπορείτε μόνο να διαβάσετε αυτή την σελίδα και όχι να την τροποποιήσετε. Εάν πιστεύετε ότι αυτό δεν είναι σωστό, απευθυνθείτε στον διαχειριστή της εφαρμογής.
+Μπορείτε να διαβάσετε αυτή την σελίδα αλλά δεν μπορείτε να την τροποποιήσετε. 
+Αν πιστεύετε ότι αυτό δεν είναι σωστό, απευθυνθείτε στον διαχειριστή της εφαρμογής.
diff --git a/inc/lang/el/recent.txt b/inc/lang/el/recent.txt
index cc80515815d5a3d5fbe090a4c9b9bcd7d257a439..78c74a6551a7291b1b62fccec42f4bb8c9248dfc 100644
--- a/inc/lang/el/recent.txt
+++ b/inc/lang/el/recent.txt
@@ -1,3 +1,3 @@
-====== Πρόσφατες αλλαγές σελίδων ======
+====== Πρόσφατες αλλαγές ======
 
 Οι παρακάτω σελίδες τροποποιήθηκαν πρόσφατα:
diff --git a/inc/lang/el/register.txt b/inc/lang/el/register.txt
index 15d64cba3aa64f3425f156794132ab6d652c2035..6a4e963e410dff2c908a9393770480c0485193e9 100644
--- a/inc/lang/el/register.txt
+++ b/inc/lang/el/register.txt
@@ -1,3 +1,5 @@
 ====== Εγγραφή νέου χρήστη ======
 
-Συμπληρώστε όλα τα παρακάτω πεδία για να δημιουργήσετε ένα νέο λογαριασμό σε αυτό το wiki. Πρέπει να δώσετε μια **υπαρκτή e-mail διεύθυνση** - ο κωδικός σας θα σας αποσταλεί σε αυτήν. Το όνομα χρήστη θα πρέπει να πληρεί τις ίδιες απαιτήσεις ονόματος που ισχύουν και για τους [[doku>pagename|φακέλους]].
+Συμπληρώστε όλα τα παρακάτω πεδία για να δημιουργήσετε ένα νέο λογαριασμό σε αυτό το wiki.
+Πρέπει να δώσετε μια **υπαρκτή e-mail διεύθυνση** - ο κωδικός σας θα σας αποσταλεί σε αυτήν.
+Το όνομα χρήστη θα πρέπει να πληρεί τις ίδιες απαιτήσεις ονόματος που ισχύουν και για τους [[doku>el:pagename|φακέλους]].
diff --git a/inc/lang/el/registermail.txt b/inc/lang/el/registermail.txt
index 5d516ee312f156a00dd09fceb4b95ee8286be63e..0b3e0b78b7c66504a09a1609d5480419bcd1e029 100644
--- a/inc/lang/el/registermail.txt
+++ b/inc/lang/el/registermail.txt
@@ -1,4 +1,4 @@
-Ένας νέος χρήστης εγγράφηκε. Αυτές είναι οι λεπτομέρειες:
+Ένας νέος χρήστης εγγράφηκε. Ορίστε οι λεπτομέρειες:
 
 Χρήστης         : @NEWUSER@
 Όνομα           : @NEWNAME@
diff --git a/inc/lang/el/resendpwd.txt b/inc/lang/el/resendpwd.txt
index 2b91ed017e83d5d512f8f50f427cc3542ae266e5..6b4f3bbca23a07c060faf815c4d6ddf52106570e 100644
--- a/inc/lang/el/resendpwd.txt
+++ b/inc/lang/el/resendpwd.txt
@@ -1,4 +1,6 @@
 ====== Αποστολή νέου κωδικού ======
 
-Συμπληρώστε όλα τα παρακάτω πεδία για να λάβετε ένα νέο κωδικό για τον λογαριασμό σας σε αυτό το wiki. Ο νέος κωδικός σας θα σταλεί στην e-mail διεύθυνση που έχετε ήδη δηλώσει. Το όνομα πρέπει να είναι αυτό που ισχύει για τον λογαριασμό σας σε αυτό το wiki.
+Συμπληρώστε όλα τα παρακάτω πεδία για να λάβετε ένα νέο κωδικό για τον λογαριασμό σας σε αυτό το wiki. 
+Ο νέος κωδικός σας θα σταλεί στην e-mail διεύθυνση που έχετε ήδη δηλώσει. 
+Το όνομα πρέπει να είναι αυτό που ισχύει για τον λογαριασμό σας σε αυτό το wiki.
 
diff --git a/inc/lang/el/revisions.txt b/inc/lang/el/revisions.txt
index 7689c3b2ba7b22d0b983ed6040f0bb5662c68a3f..955fa1703d8d45cdb4424e41ca0a643fd2c1012d 100644
--- a/inc/lang/el/revisions.txt
+++ b/inc/lang/el/revisions.txt
@@ -1,3 +1,8 @@
 ====== Παλαιότερες εκδόσεις σελίδας ======
 
-Οι παρακάτω είναι παλαιότερες εκδόσεις της τρέχουσας σελίδας. Εάν θέλετε να αντικαταστήσετε την τρέχουσα σελίδα με κάποια από τις παλαιότερες εκδόσεις της, επιλέξτε την σχετική έκδοση, επιλέξτε ''Τροποποίηση σελίδας'', κάνετε τυχόν αλλαγές και αποθηκεύστε την.
+Οι παρακάτω είναι παλαιότερες εκδόσεις της τρέχουσας σελίδας. 
+Εάν θέλετε να αντικαταστήσετε την τρέχουσα σελίδα με κάποια από τις παλαιότερες εκδόσεις της κάντε τα παρακάτω:
+  * επιλέξτε την σχετική έκδοση
+  * επιλέξτε ''Τροποποίηση σελίδας''
+  * κάνετε τυχόν αλλαγές 
+  * αποθηκεύστε την
diff --git a/inc/lang/el/searchpage.txt b/inc/lang/el/searchpage.txt
index 87f3962925880c361604d265e971c3352fcbc70b..b52162b60c1f4fba8aaef160e86d939f7b5b1088 100644
--- a/inc/lang/el/searchpage.txt
+++ b/inc/lang/el/searchpage.txt
@@ -1,5 +1,4 @@
 ====== Αναζήτηση ======
 
-Τα αποτελέσματα της αναζήτησής σας ακολουθούν.
+Τα αποτελέσματα της αναζήτησής σας:
 
-===== Αποτελέσματα =====
\ No newline at end of file
diff --git a/inc/lang/el/showrev.txt b/inc/lang/el/showrev.txt
index 21224542058fa5bf6a7bbb162b3039b752365ebb..a6ba3f99e29c99f8e87d39efce65aeeda650dd70 100644
--- a/inc/lang/el/showrev.txt
+++ b/inc/lang/el/showrev.txt
@@ -1,2 +1,2 @@
-**Αυτή είναι μια παλαιότερη έκδοση της σελίδας!**
+**Βλέπετε μια παλαιότερη έκδοση της σελίδας!**
 ----
diff --git a/inc/lang/el/stopwords.txt b/inc/lang/el/stopwords.txt
index bc6eb48aea08f241e220bc59d6d6851acfb8e381..01d5103b381bd9560944017befceaea737890b78 100644
--- a/inc/lang/el/stopwords.txt
+++ b/inc/lang/el/stopwords.txt
@@ -1,29 +1,103 @@
 # This is a list of words the indexer ignores, one word per line
 # When you edit this file be sure to use UNIX line endings (single newline)
 # No need to include words shorter than 3 chars - these are ignored anyway
-# This list is based upon the ones found at http://www.ranks.nl/stopwords/
-about
-are
-and
-you
-your
-them
-their
-com
-for
-from
-into
-how
-that
-the
-this
-was
-what
-when
-where
-who
-will
-with
-und
-the
-www
+# This list is provided by Fotis Lazarinis based on his research found at: http://lazarinf.teimes.gr/papers/J8.pdf
+και
+ήταν
+το
+ενός
+να
+πολύ
+του
+όμως
+η
+κατά
+της
+αυτή
+με
+όταν
+που
+μέσα
+την
+οποίο
+από
+πως
+για
+έτσι
+τα
+στους
+είναι
+μέσω
+των
+όλα
+σε
+καθώς
+ο
+αυτά
+οι
+προς
+στο
+ένας
+θα
+πριν
+τη
+μου
+στην
+όχι
+τον
+χωρίς
+τους
+επίσης
+δεν
+μεταξύ
+τις
+μέχρι
+ένα
+έναν
+μια
+μιας
+ότι
+αφού
+ή
+ακόμα
+στη
+όπου
+στα
+είχε
+μας
+δηλαδή
+αλλά
+τρόπος
+στον
+όσο
+στις
+ακόμη
+αυτό
+τόσο
+όπως
+έχουμε
+αν
+ώστε
+μπορεί
+αυτές
+μετά
+γιατί
+σας
+πάνω
+δύο
+τότε
+τι
+τώρα
+ως
+κάτι
+κάθε
+άλλο
+πρέπει
+μην
+πιο
+εδώ
+οποία
+είτε
+μόνο
+μη
+ενώ
\ No newline at end of file
diff --git a/inc/lang/el/subscr_digest.txt b/inc/lang/el/subscr_digest.txt
index 1a0f44d14882295a6c96a30343ecef4392692e85..7dd0345d7a925fa71051f23a4168921483b67b07 100644
--- a/inc/lang/el/subscr_digest.txt
+++ b/inc/lang/el/subscr_digest.txt
@@ -11,10 +11,9 @@
 Νέα έκδοση: @NEWPAGE@
 
 Για να σταματήσουν αυτές οι ειδοποιήσεις συνδεθείτε 
-στο wiki στην διεύθυνση @DOKUWIKIURL@ και στην 
-συνέχεια επισκεφθείτε το @SUBSCRIBE@ και 
-διαγραφείτε από τις ειδοποιήσεις της σελίδας ή 
-φακέλου.
+στο wiki στην διεύθυνση @DOKUWIKIURL@ 
+και στην συνέχεια επισκεφθείτε το @SUBSCRIBE@ 
+και διαγραφείτε από τις ειδοποιήσεις της σελίδας ή του φακέλου.
 
 --
 Αυτό το μήνυμα παράχθηκε απο το DokuWiki στην 
diff --git a/inc/lang/el/subscr_list.txt b/inc/lang/el/subscr_list.txt
index f5cb8023d203263e7cc2bd8f77911ce5d3b395d5..97b8dc47deae970a150c1b38b0c04f8ba156ecaf 100644
--- a/inc/lang/el/subscr_list.txt
+++ b/inc/lang/el/subscr_list.txt
@@ -10,11 +10,10 @@
 @DIFF@
 --------------------------------------------------------
 
-Για να σταματήσουν αυτές οι ειδοποιήσεις συνδεθείτε 
-στο wiki στην διεύθυνση @DOKUWIKIURL@ και στην 
-συνέχεια επισκεφθείτε το @SUBSCRIBE@ και 
-διαγραφείτε από τις ειδοποιήσεις της σελίδας ή 
-φακέλου.
+Για να σταματήσουν αυτές οι ειδοποιήσεις συνδεθείτε στο wiki 
+στην διεύθυνση @DOKUWIKIURL@ 
+και στην συνέχεια επισκεφθείτε το @SUBSCRIBE@ 
+και διαγραφείτε από τις ειδοποιήσεις της σελίδας ή του φακέλου.
 
 --
 Αυτό το μήνυμα παράχθηκε απο το DokuWiki στην 
diff --git a/inc/lang/el/subscr_single.txt b/inc/lang/el/subscr_single.txt
index 9815cc0bb1e2ed902eac9a69cb1267301d8d426f..610af49a21b77af1007b1108182e563e29700f8c 100644
--- a/inc/lang/el/subscr_single.txt
+++ b/inc/lang/el/subscr_single.txt
@@ -12,11 +12,10 @@
 Παλιά έκδοση: @OLDPAGE@
 Νέα έκδοση: @NEWPAGE@
 
-Για να σταματήσουν αυτές οι ειδοποιήσεις συνδεθείτε 
-στο wiki στην διεύθυνση @DOKUWIKIURL@ και στην 
-συνέχεια επισκεφθείτε το @SUBSCRIBE@ και 
-διαγραφείτε από τις ειδοποιήσεις της σελίδας ή 
-φακέλου.
+Για να σταματήσουν αυτές οι ειδοποιήσεις συνδεθείτε στο wiki 
+στην διεύθυνση @DOKUWIKIURL@ 
+και στην συνέχεια επισκεφθείτε το @SUBSCRIBE@ 
+και διαγραφείτε από τις ειδοποιήσεις της σελίδας ή του φακέλου.
 
 --
 Αυτό το μήνυμα παράχθηκε απο το DokuWiki στην 
diff --git a/inc/lang/el/updateprofile.txt b/inc/lang/el/updateprofile.txt
index ccb9596b6372835684edab5ed8456456f14fcb5e..56f176d37a60a7d4203c59574e3a28d1b94c1587 100644
--- a/inc/lang/el/updateprofile.txt
+++ b/inc/lang/el/updateprofile.txt
@@ -1,3 +1,4 @@
 ====== Τροποποίηση προφίλ ======
 
-Τροποποιήστε **μόνο** τα πεδία που θέλετε να αλλάξετε. Δεν μπορείτε να αλλάξετε το πεδίο ''Όνομα''.
+Τροποποιήστε **μόνο** τα πεδία που θέλετε να αλλάξετε. 
+Δεν μπορείτε να αλλάξετε το πεδίο ''Όνομα''.
diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php
index 8abd4314cbf1a644efc258eddeb3745cd8ab8df3..51fd8f64566496adc0af75490782fc1d5d29202c 100644
--- a/inc/lang/en/lang.php
+++ b/inc/lang/en/lang.php
@@ -46,7 +46,8 @@ $lang['btn_resendpwd']   = 'Send new password';
 $lang['btn_draft']    = 'Edit draft';
 $lang['btn_recover']  = 'Recover draft';
 $lang['btn_draftdel'] = 'Delete draft';
-$lang['btn_revert'] = 'Restore';
+$lang['btn_revert']   = 'Restore';
+$lang['btn_register'] = 'Register';
 
 $lang['loggedinas'] = 'Logged in as';
 $lang['user']       = 'Username';
@@ -57,7 +58,6 @@ $lang['passchk']    = 'once again';
 $lang['remember']   = 'Remember me';
 $lang['fullname']   = 'Real name';
 $lang['email']      = 'E-Mail';
-$lang['register']   = 'Register';
 $lang['profile']    = 'User Profile';
 $lang['badlogin']   = 'Sorry, username or password was wrong.';
 $lang['minoredit']  = 'Minor Changes';
diff --git a/inc/lang/eo/lang.php b/inc/lang/eo/lang.php
index a2457474bd395ecf0dddaebaf27b8889c9e4a2f7..305c080f11a0440ec5c9b2e23967600a9c17ca65 100644
--- a/inc/lang/eo/lang.php
+++ b/inc/lang/eo/lang.php
@@ -4,16 +4,11 @@
  *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Antono Vasiljev <esperanto.minsk ĈE tut.by>
- * @author Felipe Castro <fefcas CXE yahoo.com.br>
+ * @author Felipe Castro <fefcas@yahoo.com.br>
  * @author Felipe Castro <fefcas@uol.com.br>
  * @author Felipe Castro <fefcas@gmail.com>
- * @author Felipe Castro <fefcas (cxe) gmail (punkto) com>
- * @author Felipo Kastro <fefcas@gmail.com>
  * @author Robert Bogenschneider <robog@gmx.de>
- * @author Erik Pedersen <erik pedersen@shaw.ca>
  * @author Erik Pedersen <erik.pedersen@shaw.ca>
- * @author Robert Bogenschneider <robog@GMX.de>
- * @author Robert BOGENSCHNEIDER <robog@gmx.de>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -54,6 +49,7 @@ $lang['btn_draft']             = 'Redakti skizon';
 $lang['btn_recover']           = 'Restarigi skizon';
 $lang['btn_draftdel']          = 'Forigi skizon';
 $lang['btn_revert']            = 'Restarigi';
+$lang['btn_register']          = 'Registriĝi';
 $lang['loggedinas']            = 'Ensalutita kiel';
 $lang['user']                  = 'Uzant-nomo';
 $lang['pass']                  = 'Pasvorto';
@@ -63,7 +59,6 @@ $lang['passchk']               = 'plian fojon';
 $lang['remember']              = 'Rememoru min';
 $lang['fullname']              = 'Kompleta nomo';
 $lang['email']                 = 'Retpoŝto';
-$lang['register']              = 'Registriĝi';
 $lang['profile']               = 'Uzanto-profilo';
 $lang['badlogin']              = 'Pardonu, uzant-nomo aÅ­ pasvorto estis erara.';
 $lang['minoredit']             = 'Etaj modifoj';
diff --git a/inc/lang/es/lang.php b/inc/lang/es/lang.php
index 04403c821c5ece167168c45c8b32a3f58846d618..427f7e0a27a5c5a8e1c1c0c9259aa027fcfd61d6 100644
--- a/inc/lang/es/lang.php
+++ b/inc/lang/es/lang.php
@@ -14,8 +14,7 @@
  * @author oliver@samera.com.py
  * @author Enrico Nicoletto <liverig@gmail.com>
  * @author Manuel Meco <manuel.meco@gmail.com>
- * @author VictorCastelan <victorcastelan@gmail.com>
- * @author Jordan Mero  hack.jord@gmail.com
+ * @author Jordan Mero <hack.jord@gmail.com>
  * @author Felipe Martinez <metalmartinez@gmail.com>
  * @author Javier Aranda <internet@javierav.com>
  * @author Zerial <fernando@zerial.org>
@@ -64,6 +63,7 @@ $lang['btn_draft']             = 'Editar borrador';
 $lang['btn_recover']           = 'Recuperar borrador';
 $lang['btn_draftdel']          = 'Eliminar borrador';
 $lang['btn_revert']            = 'Restaurar';
+$lang['btn_register']          = 'Registrarse';
 $lang['loggedinas']            = 'Conectado como ';
 $lang['user']                  = 'Usuario';
 $lang['pass']                  = 'Contraseña';
@@ -73,7 +73,6 @@ $lang['passchk']               = 'otra vez';
 $lang['remember']              = 'Recordarme';
 $lang['fullname']              = 'Nombre real';
 $lang['email']                 = 'E-Mail';
-$lang['register']              = 'Registrarse';
 $lang['profile']               = 'Perfil del usuario';
 $lang['badlogin']              = 'Lo siento, el usuario o la contraseña es incorrecto.';
 $lang['minoredit']             = 'Cambios menores';
diff --git a/inc/lang/et/lang.php b/inc/lang/et/lang.php
index ee765b5b54ee84513c1f69d7353703f306cfb6a4..c7060ebca61b26155cf84129b6a0a54b94972843 100644
--- a/inc/lang/et/lang.php
+++ b/inc/lang/et/lang.php
@@ -3,212 +3,217 @@
  * Estonian language file
  *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @author     Oliver S6ro <seem.iges@mail.ee>
- * @author     Aari Juhanson <aari@vmg.vil.ee>
- * @author     Kaiko Kaur <kaiko@kultuur.edu.ee>
+ * @author Oliver S6ro <seem.iges@mail.ee>
+ * @author Aari Juhanson <aari@vmg.vil.ee>
+ * @author Kaiko Kaur <kaiko@kultuur.edu.ee>
+ * @author kristian.kankainen@kuu.la
  */
-$lang['encoding']   = 'utf-8';
-$lang['direction']  = 'ltr';
-$lang['doublequoteopening']  = '„';//&bdquo;
-$lang['doublequoteclosing']  = '“';//&ldquo;
-$lang['singlequoteopening']  = '‚';//&sbquo;
-$lang['singlequoteclosing']  = '‘';//&lsquo;
-
-$lang['btn_edit']   = 'Toimeta seda lehte';
-$lang['btn_source'] = 'Näita lehepõhja';
-$lang['btn_show']   = 'Näita lehte';
-$lang['btn_create'] = 'Tekita selle lingi alla leht';
-$lang['btn_search'] = 'Otsi';
-$lang['btn_save']   = 'Salvesta';
-$lang['btn_preview']= 'Eelvaade';
-$lang['btn_top']    = 'Tagasi lehe algusesse';
-$lang['btn_revs']   = 'Eelmised versioonid';
-$lang['btn_recent'] = 'Viimased muudatused';
-$lang['btn_upload'] = 'Lae üles';
-$lang['btn_cancel'] = 'Katkesta';
-$lang['btn_index']  = 'Sisukord';
-$lang['btn_secedit']= 'Toimeta';
-$lang['btn_login']  = 'Logi sisse';
-$lang['btn_logout'] = 'Logi välja';
-$lang['btn_admin']  = 'Administreeri';
-$lang['btn_update'] = 'Uuenda';
-$lang['btn_delete'] = 'Kustuta';
-$lang['btn_newer'] = '<< varajasemad';
-$lang['btn_older'] = '>> hilisemad';
-$lang['btn_back'] = 'Tagasi';
-$lang['btn_backtomedia'] = 'Tagasi faili valikusse';
-$lang['btn_profile'] = 'Minu info';
-$lang['btn_reset'] = 'Taasta';
-$lang['btn_resendpwd'] = 'Saada uus parool';
-$lang['btn_draft'] = 'Toimeta mustandit';
-$lang['btn_recover'] = 'Taata mustand';
-$lang['btn_draftdel'] = 'Kustuta mustand';
-$lang['newpass'] = 'Uus parool';
-$lang['oldpass'] = 'Vana parool';
-$lang['passchk'] = 'Korda uut parooli';
-$lang['profile'] = 'Kasutaja info';
-$lang['minoredit'] = 'Ebaolulised muudatused';
-$lang['draftdate'] = 'Mustand automaatselt salvestatud';
-$lang['regsuccess2'] = 'Kasutaja sai tehtud.';
-$lang['regbadpass'] = 'Uus parool on kirjutatud erinevalt. Proovi uuesti.';
-$lang['uploadexist'] = 'Fail on juba olemas. Midagi ei muudetud.';
-$lang['deletesucc'] = 'Fail nimega "%s" sai kustutatud.';
-$lang['deletefail'] = 'Faili nimega "%s" ei kustutatud (kontrolli õigusi).';
-$lang['mediainuse'] = 'Faili nimega "%s" ei kustutatud, sest see on kasutuses.';
-$lang['js']['keepopen'] = 'Jäta aken peale valiku sooritamist avatuks';
-$lang['js']['hidedetails'] = 'Peida detailid';
-$lang['mediausage'] = 'Kasuta järgmist kirjapilti sellele failile viitamaks:';
-$lang['mediaview'] = 'Vaata faili algsel kujul.';
-$lang['mediaroot'] = 'juur';
-$lang['mediaupload'] = 'Lae fail sellesse nimeruumi (kataloogi). Et tekitada veel alam nimeruum kasuta koolonit Wiki nimes.';
-$lang['mediaextchange'] = 'Faili laiend .%s-st %s-ks!';
-$lang['ref_inuse'] = 'Seda faili ei saa kustutada, sest teda kasutavad järgmised lehed:';
-$lang['ref_hidden'] = 'Mõned viidad failile on lehtedel, millele sul ei ole ligipääsu';
-$lang['youarehere'] = 'Sa oled siin';
-$lang['mail_new_user'] = 'Uus kasutaja:';
-$lang['qb_strike'] = 'Läbijoonitud tekst';
-$lang['qb_smileys'] = 'Emotikonid';
-$lang['qb_chars'] = 'Erisümbolid';
-$lang['admin_register'] = 'Lisa kasutaja';
-
-
-#$lang['reference'] = '';
-#$lang['btn_backlink'] = '';
-#$lang['profna'] = '';
-$lang['btn_subscribe'] = 'Jälgi seda lehte (teated meilile)';
-$lang['btn_unsubscribe'] = 'Lõpeta lehe jälgimine';
-$lang['profnochange'] = 'Muutused puuduvad.';
-$lang['profnoempty'] = 'Tühi nimi ega meiliaadress pole lubatud.';
-$lang['profchanged'] = 'Kasutaja info edukalt muudetud';
-$lang['pwdforget'] = 'Unustasid parooli? Tee uus';
-$lang['resendna'] = 'See wiki ei toeta parooli taassaatmist.';
-$lang['resendpwd'] = 'Saada uus parool';
-$lang['resendpwdmissing'] = 'Khmm... Sa pead täitma kõik väljad.';
-$lang['resendpwdnouser'] = 'Aga sellist kasutajat ei ole.';
-$lang['resendpwdbadauth'] = 'See autentimiskood ei ole õige. Kontrolli, et kopeerisid terve lingi.';
-$lang['resendpwdconfirm'] = 'Kinnituslink saadeti meilile.';
-$lang['resendpwdsuccess'] = 'Uus parool saadeti Sinu meilile.';
-$lang['txt_overwrt'] = 'Kirjutan olemasoleva faili üle';
-$lang['metaedit'] = 'Muuda lisainfot';
-$lang['metasaveerr'] = 'Lisainfo salvestamine läks untsu.';
-$lang['metasaveok'] = 'Lisainfo salvestatud';
-$lang['img_backto'] = 'Tagasi';
-$lang['img_title'] = 'Tiitel';
-$lang['img_caption'] = 'Kirjeldus';
-$lang['img_date'] = 'Kuupäev';
-$lang['img_fname'] = 'Faili nimi';
-$lang['img_fsize'] = 'Suurus';
-$lang['img_artist'] = 'Autor';
-#$lang['img_copyr'] = '';
-$lang['img_format'] = 'Formaat';
-$lang['img_camera'] = 'Kaamera';
-$lang['img_keywords'] = 'Võtmesõnad';
-
-$lang['i_chooselang'] = 'Vali keel';
-$lang['i_installer'] = 'DokuWiki paigaldaja';
-$lang['i_wikiname'] = 'Wiki nimi';
-$lang['i_enableacl'] = 'Kas lubada kasutajate haldus (soovitatav)';
-$lang['i_superuser'] = 'Superkasutaja';
-$lang['i_problems'] = 'Paigaldaja leidis mõned vead, mis on allpool välja toodud. Enne vigade eemaldamist ei saa jätkata.';
-$lang['i_modified'] = 'Õnnetuste vältimiseks läheb see skript käima ainult värskelt paigaldatud ja muutmata Dokuwiki peal.
-                       Sa peaksid ilmselt kogu koodi uuesti lahti pakkima. Vaata ka <a href="http://dokuwiki.org/install">Dokuwiki installeerimis juhendit</a>';
-$lang['i_funcna'] = 'PHP funktsiooni <code>%s</code> ei ole olemas.võibolla sinu serveri hooldaja on selle mingil põhjusel keelanud?';
-$lang['i_permfail'] = 'Dokuwiki ei saa kirjutada faili <code>%s</code>. Kontrolli serveris failide õigused üle.';
-$lang['i_confexists'] = '<code>%s</code> on juba olemas';
-$lang['i_writeerr'] = 'Faili <code>%s</code> ei lubata tekitada. Kontrolli kataloogi ja faili õigusi.';
-#$lang['i_badhash'] = '';
-$lang['i_badval'] = '<code>%s</code> - lubamatu või tühi väärtus';
-$lang['i_success'] = 'Seadistamine on õnnelikult lõpule viidud. Sa võid nüüd kustutada faili install.php. Alusta oma <a href="doku.php">uue DokuWiki</a> täitmist.';
-$lang['i_failure'] = 'Konfiguratsiooni faili kirjutamisel esines vigu. Võimalik, et pead need käsitsi parandama enne <a href="doku.php">uue DokuWiki</a> täitma asumist.';
-$lang['i_policy'] = 'Wiki õiguste algne poliitika';
-$lang['i_pol0'] = 'Avatud (lugemine, kirjutamine ja üleslaadimine kõigile lubatud)';
-$lang['i_pol1'] = 'Avalikuks lugemiseks (lugeda saavad kõik, kirjutada ja üles laadida vaid registreeritud kasutajad)';
-$lang['i_pol2'] = 'Suletud (kõik õigused, kaasaarvatud lugemine on lubatud vaid registreeritud kasutajatele)';
-
-$lang['loggedinas'] = 'Logis sisse kui';
-$lang['user']       = 'Kasutaja';
-$lang['pass']       = 'Parool';
-$lang['remember']   = 'Pea mind meeles';
-$lang['fullname']   = 'Täielik nimi';
-$lang['email']      = 'E-post';
-$lang['register']   = 'Registreeri uus kasutaja';
-$lang['badlogin']   = 'Oops, Sinu kasutajanimi või parool oli vale.';
-
-$lang['regmissing'] = 'Kõik väljad tuleb ära täita.';
-$lang['reguexists'] = 'Tegelikult on sellise nimega kasutaja juba olemas.';
-$lang['regsuccess'] = 'Kasutaja sai tehtud. Parool saadeti Sulle e-posti aadressil.';
-$lang['regmailfail']= 'Ilmselt tekkis e-posti teel parooli saatmisel mingi tõrge. Palun suhtle sel teemal
+$lang['encoding']              = 'utf-8';
+$lang['direction']             = 'ltr';
+$lang['doublequoteopening']    = '„';
+$lang['doublequoteclosing']    = '“';
+$lang['singlequoteopening']    = '‚';
+$lang['singlequoteclosing']    = '‘';
+$lang['btn_edit']              = 'Toimeta seda lehte';
+$lang['btn_source']            = 'Näita lehepõhja';
+$lang['btn_show']              = 'Näita lehte';
+$lang['btn_create']            = 'Tekita selle lingi alla leht';
+$lang['btn_search']            = 'Otsi';
+$lang['btn_save']              = 'Salvesta';
+$lang['btn_preview']           = 'Eelvaade';
+$lang['btn_top']               = 'Tagasi lehe algusesse';
+$lang['btn_newer']             = '<< varajasemad';
+$lang['btn_older']             = '>> hilisemad';
+$lang['btn_revs']              = 'Eelmised versioonid';
+$lang['btn_recent']            = 'Viimased muudatused';
+$lang['btn_upload']            = 'Lae üles';
+$lang['btn_cancel']            = 'Katkesta';
+$lang['btn_index']             = 'Sisukord';
+$lang['btn_secedit']           = 'Toimeta';
+$lang['btn_login']             = 'Logi sisse';
+$lang['btn_logout']            = 'Logi välja';
+$lang['btn_admin']             = 'Administreeri';
+$lang['btn_update']            = 'Uuenda';
+$lang['btn_delete']            = 'Kustuta';
+$lang['btn_back']              = 'Tagasi';
+$lang['btn_backtomedia']       = 'Tagasi faili valikusse';
+$lang['btn_subscribe']         = 'Jälgi seda lehte (teated meilile)';
+$lang['btn_profile']           = 'Minu info';
+$lang['btn_reset']             = 'Taasta';
+$lang['btn_resendpwd']         = 'Saada uus parool';
+$lang['btn_draft']             = 'Toimeta mustandit';
+$lang['btn_recover']           = 'Taata mustand';
+$lang['btn_draftdel']          = 'Kustuta mustand';
+$lang['btn_revert']            = 'Taasta';
+$lang['btn_register']          = 'Registreeri uus kasutaja';
+$lang['loggedinas']            = 'Logis sisse kui';
+$lang['user']                  = 'Kasutaja';
+$lang['pass']                  = 'Parool';
+$lang['newpass']               = 'Uus parool';
+$lang['oldpass']               = 'Vana parool';
+$lang['passchk']               = 'Korda uut parooli';
+$lang['remember']              = 'Pea mind meeles';
+$lang['fullname']              = 'Täielik nimi';
+$lang['email']                 = 'E-post';
+$lang['profile']               = 'Kasutaja info';
+$lang['badlogin']              = 'Oops, Sinu kasutajanimi või parool oli vale.';
+$lang['minoredit']             = 'Ebaolulised muudatused';
+$lang['draftdate']             = 'Mustand automaatselt salvestatud';
+$lang['regmissing']            = 'Kõik väljad tuleb ära täita.';
+$lang['reguexists']            = 'Tegelikult on sellise nimega kasutaja juba olemas.';
+$lang['regsuccess']            = 'Kasutaja sai tehtud. Parool saadeti Sulle e-posti aadressil.';
+$lang['regsuccess2']           = 'Kasutaja sai tehtud.';
+$lang['regmailfail']           = 'Ilmselt tekkis e-posti teel parooli saatmisel mingi tõrge. Palun suhtle sel teemal
 oma serveri administraatoriga!';
-$lang['regbadmail'] = 'Tundub, et Sinu antud e-posti aadress ei toimi - kui Sa arvad, et tegemist on
+$lang['regbadmail']            = 'Tundub, et Sinu antud e-posti aadress ei toimi - kui Sa arvad, et tegemist on
 ekstitusega, suhtle oma serveri administraatoriga';
-$lang['regpwmail']  = 'Sinu DokuWiki parool';
-$lang['reghere']    = 'Sul ei olegi veel kasutajakontot? No aga tekita see siis endale!';
-
-$lang['txt_upload']   = 'Vali fail, mida üles laadida';
-$lang['txt_filename'] = 'Siseta oma Wikinimi (soovituslik)';
-$lang['lockedby']     = 'Praegu on selle lukustanud';
-$lang['lockexpire']   = 'Lukustus aegub';
-$lang['willexpire']   = 'Teie lukustus selle lehe toimetamisele aegub umbes minuti pärast.\nIgasugu  probleemide vältimiseks kasuta eelvaate nuppu, et lukustusarvesti taas tööle panna.';
-
-$lang['js']['notsavedyet'] = "Sul on seal salvestamata muudatusi, mis kohe kõige kaduva teed lähevad.\nKas Sa ikka tahad edasi liikuda?";
-$lang['rssfailed']   = 'Sinu soovitud info ammutamisel tekkis viga: ';
-$lang['nothingfound']= 'Oops, aga mitte muhvigi ei leitud.';
-
-$lang['mediaselect'] = 'Hunnik faile';
-$lang['fileupload']  = 'Faili üleslaadimine';
-$lang['uploadsucc']  = 'Üleslaadimine läks ootuspäraselt hästi';
-$lang['uploadfail']  = 'Üleslaadimine läks nässu. Äkki pole Sa selleks lihtsalt piisavalt võimukas tegija?';
-$lang['uploadwrong'] = 'Ei saa Sa midagi üles laadida. Oops, aga seda tüüpi faili sul lihtsalt ei lubata üles laadida';
-$lang['namespaces']  = 'Alajaotus';
-$lang['mediafiles']  = 'Failid on Sulle kättesaadavad';
-
-$lang['hits']       = 'Päringu tabamused';
-$lang['quickhits']  = 'Päringule vastavad lehed';
-$lang['toc']        = 'Sisujuht';
-$lang['current']    = 'Hetkel kehtiv';
-$lang['yours']      = 'Sinu versioon';
-$lang['diff']       = 'Näita erinevusi hetkel kehtiva versiooniga';
-$lang['line']       = 'Rida';
-$lang['breadcrumb'] = 'Käidud rada';
-$lang['lastmod']    = 'Viimati muutnud';
-$lang['by']         = 'persoon';
-$lang['deleted']    = 'eemaldatud';
-$lang['created']    = 'tekitatud';
-$lang['restored']   = 'vana versioon taastatud';
-$lang['summary']    = 'kokkuvõte muudatustest';
-
-$lang['mail_newpage'] = 'leht lisatud:';
-$lang['mail_changed'] = 'leht muudetud';
-
-$lang['nosmblinks'] = 'Windowsis võrguarvutiga ühendamine toimib ainult Internet Exploreris ja
-sisevõrgus.\nAga Sa saad õnneks omale lingi kopeerida ja hiljem kuhugi kleepida.';
-
-$lang['qb_bold']    = 'Rasvane kiri';
-$lang['qb_italic']  = 'Kaldkiri';
-$lang['qb_underl']  = 'Alajoonega kiri';
-$lang['qb_code']    = 'Koodi tekst';
-$lang['qb_h1']      = '1. astme pealkiri';
-$lang['qb_h2']      = '2. astme pealkiri';
-$lang['qb_h3']      = '3. astme pealkiri';
-$lang['qb_h4']      = '4. astme pealkiri';
-$lang['qb_h5']      = '5. astme pealkiri';
-$lang['qb_link']    = 'Siselink';
-$lang['qb_extlink'] = 'Välislink';
-$lang['qb_hr']      = 'Horisontaalne vahejoon';
-$lang['qb_ol']      = 'Nummerdatud nimikiri';
-$lang['qb_ul']      = 'Mummuga nimekiri';
-$lang['qb_media']   = 'Lisa pilte ja muid faile';
-$lang['qb_sig']     = 'Lisa allkiri!';
-
-$lang['authmodfailed'] = 'Vigane kasutajate autentimise konfiguratsioon. Palun teavita sellest serveri haldajat.';
-$lang['authtempfail'] = 'Kasutajate autentimine on ajutiselt rivist väljas. Kui see olukord mõne aja jooksul ei parane, siis teavita sellest serveri haldajat.';
-
-$lang['js']['del_confirm']= 'Kas kustutame selle kirje?';
-
-#$lang['subscribe_success'] = '';
-#$lang['subscribe_error'] = '';
-#$lang['subscribe_noaddress'] = '';
-#$lang['unsubscribe_success'] = '';
-#$lang['unsubscribe_error'] = '';
-
-//Setup VIM: ex: et ts=2 :
+$lang['regbadpass']            = 'Uus parool on kirjutatud erinevalt. Proovi uuesti.';
+$lang['regpwmail']             = 'Sinu DokuWiki parool';
+$lang['reghere']               = 'Sul ei olegi veel kasutajakontot? No aga tekita see siis endale!';
+$lang['profna']                = 'Viki ei toeta profiili muudatusi';
+$lang['profnochange']          = 'Muutused puuduvad.';
+$lang['profnoempty']           = 'Tühi nimi ega meiliaadress pole lubatud.';
+$lang['profchanged']           = 'Kasutaja info edukalt muudetud';
+$lang['pwdforget']             = 'Unustasid parooli? Tee uus';
+$lang['resendna']              = 'See wiki ei toeta parooli taassaatmist.';
+$lang['resendpwd']             = 'Saada uus parool';
+$lang['resendpwdmissing']      = 'Khmm... Sa pead täitma kõik väljad.';
+$lang['resendpwdnouser']       = 'Aga sellist kasutajat ei ole.';
+$lang['resendpwdbadauth']      = 'See autentimiskood ei ole õige. Kontrolli, et kopeerisid terve lingi.';
+$lang['resendpwdconfirm']      = 'Kinnituslink saadeti meilile.';
+$lang['resendpwdsuccess']      = 'Uus parool saadeti Sinu meilile.';
+$lang['searchmedia']           = 'Otsi failinime:';
+$lang['searchmedia_in']        = 'Otsi %s';
+$lang['txt_upload']            = 'Vali fail, mida üles laadida';
+$lang['txt_filename']          = 'Siseta oma Wikinimi (soovituslik)';
+$lang['txt_overwrt']           = 'Kirjutan olemasoleva faili üle';
+$lang['lockedby']              = 'Praegu on selle lukustanud';
+$lang['lockexpire']            = 'Lukustus aegub';
+$lang['willexpire']            = 'Teie lukustus selle lehe toimetamisele aegub umbes minuti pärast.\nIgasugu  probleemide vältimiseks kasuta eelvaate nuppu, et lukustusarvesti taas tööle panna.';
+$lang['js']['notsavedyet']     = 'Sul on seal salvestamata muudatusi, mis kohe kõige kaduva teed lähevad.
+Kas Sa ikka tahad edasi liikuda?';
+$lang['js']['searchmedia']     = 'Otsi faile';
+$lang['js']['keepopen']        = 'Jäta aken peale valiku sooritamist avatuks';
+$lang['js']['hidedetails']     = 'Peida detailid';
+$lang['js']['mediatitle']      = 'Lingi sätted';
+$lang['js']['mediadisplay']    = 'Lingi liik';
+$lang['js']['mediaalign']      = 'Joondus';
+$lang['js']['mediasize']       = 'Pildi mõõtmed';
+$lang['js']['mediatarget']     = 'Lingi siht';
+$lang['js']['mediaclose']      = 'Sulge';
+$lang['js']['mediainsert']     = 'Sisesta';
+$lang['js']['mediadisplayimg'] = 'Näita pilti.';
+$lang['js']['mediadisplaylnk'] = 'Näita ainult linki.';
+$lang['js']['mediasmall']      = 'Väiksem suurus';
+$lang['js']['mediamedium']     = 'Keskmine suurus';
+$lang['js']['medialarge']      = 'Suurem suurus';
+$lang['js']['mediaoriginal']   = 'Originaali suurus';
+$lang['js']['medialnk']        = 'Link üksikasjadele';
+$lang['js']['mediadirect']     = 'Otselink originaalile';
+$lang['js']['medianolnk']      = 'Ilma lingita';
+$lang['js']['medianolink']     = 'Ära lingi pilti';
+$lang['js']['medialeft']       = 'Joonda pilt vasakule.';
+$lang['js']['mediaright']      = 'Joonda pilt paremale.';
+$lang['js']['mediacenter']     = 'Joonda pilt keskele.';
+$lang['js']['medianoalign']    = 'Ära joonda.';
+$lang['js']['nosmblinks']      = 'Lingid \'Windows shares\'ile töötab ainult Microsoft Internet Exploreriga.
+Siiski võid kopeerida ja asetada lingi.';
+$lang['js']['linkwiz']         = 'Lingi nõustaja';
+$lang['js']['linkto']          = 'Lingi:';
+$lang['js']['del_confirm']     = 'Kas kustutame selle kirje?';
+$lang['js']['mu_btn']          = 'Laadi üles mittu faili';
+$lang['rssfailed']             = 'Sinu soovitud info ammutamisel tekkis viga: ';
+$lang['nothingfound']          = 'Oops, aga mitte muhvigi ei leitud.';
+$lang['mediaselect']           = 'Hunnik faile';
+$lang['fileupload']            = 'Faili üleslaadimine';
+$lang['uploadsucc']            = 'Üleslaadimine läks ootuspäraselt hästi';
+$lang['uploadfail']            = 'Üleslaadimine läks nässu. Äkki pole Sa selleks lihtsalt piisavalt võimukas tegija?';
+$lang['uploadwrong']           = 'Ei saa Sa midagi üles laadida. Oops, aga seda tüüpi faili sul lihtsalt ei lubata üles laadida';
+$lang['uploadexist']           = 'Fail on juba olemas. Midagi ei muudetud.';
+$lang['uploadbadcontent']      = 'Üles laaditu ei sobinud %s faililaiendiga.';
+$lang['uploadsize']            = 'Üles laaditud fail on liiga suur (maksimaalne suurus on %s).';
+$lang['deletesucc']            = 'Fail nimega "%s" sai kustutatud.';
+$lang['deletefail']            = 'Faili nimega "%s" ei kustutatud (kontrolli õigusi).';
+$lang['mediainuse']            = 'Faili nimega "%s" ei kustutatud, sest see on kasutuses.';
+$lang['namespaces']            = 'Alajaotus';
+$lang['mediafiles']            = 'Failid on Sulle kättesaadavad';
+$lang['accessdenied']          = 'Ligipääs keelatud.';
+$lang['mediausage']            = 'Kasuta järgmist kirjapilti sellele failile viitamaks:';
+$lang['mediaview']             = 'Vaata faili algsel kujul.';
+$lang['mediaroot']             = 'juur';
+$lang['mediaupload']           = 'Lae fail sellesse nimeruumi (kataloogi). Et tekitada veel alam nimeruum kasuta koolonit Wiki nimes.';
+$lang['mediaextchange']        = 'Faili laiend .%s-st %s-ks!';
+$lang['ref_inuse']             = 'Seda faili ei saa kustutada, sest teda kasutavad järgmised lehed:';
+$lang['ref_hidden']            = 'Mõned viidad failile on lehtedel, millele sul ei ole ligipääsu';
+$lang['hits']                  = 'Päringu tabamused';
+$lang['quickhits']             = 'Päringule vastavad lehed';
+$lang['toc']                   = 'Sisujuht';
+$lang['current']               = 'Hetkel kehtiv';
+$lang['yours']                 = 'Sinu versioon';
+$lang['diff']                  = 'Näita erinevusi hetkel kehtiva versiooniga';
+$lang['line']                  = 'Rida';
+$lang['breadcrumb']            = 'Käidud rada';
+$lang['youarehere']            = 'Sa oled siin';
+$lang['lastmod']               = 'Viimati muutnud';
+$lang['by']                    = 'persoon';
+$lang['deleted']               = 'eemaldatud';
+$lang['created']               = 'tekitatud';
+$lang['restored']              = 'vana versioon taastatud';
+$lang['summary']               = 'kokkuvõte muudatustest';
+$lang['mail_newpage']          = 'leht lisatud:';
+$lang['mail_changed']          = 'leht muudetud';
+$lang['mail_new_user']         = 'Uus kasutaja:';
+$lang['qb_bold']               = 'Rasvane kiri';
+$lang['qb_italic']             = 'Kaldkiri';
+$lang['qb_underl']             = 'Alajoonega kiri';
+$lang['qb_code']               = 'Koodi tekst';
+$lang['qb_strike']             = 'Läbijoonitud tekst';
+$lang['qb_h1']                 = '1. astme pealkiri';
+$lang['qb_h2']                 = '2. astme pealkiri';
+$lang['qb_h3']                 = '3. astme pealkiri';
+$lang['qb_h4']                 = '4. astme pealkiri';
+$lang['qb_h5']                 = '5. astme pealkiri';
+$lang['qb_link']               = 'Siselink';
+$lang['qb_extlink']            = 'Välislink';
+$lang['qb_hr']                 = 'Horisontaalne vahejoon';
+$lang['qb_ol']                 = 'Nummerdatud nimikiri';
+$lang['qb_ul']                 = 'Mummuga nimekiri';
+$lang['qb_media']              = 'Lisa pilte ja muid faile';
+$lang['qb_sig']                = 'Lisa allkiri!';
+$lang['qb_smileys']            = 'Emotikonid';
+$lang['qb_chars']              = 'Erisümbolid';
+$lang['admin_register']        = 'Lisa kasutaja';
+$lang['metaedit']              = 'Muuda lisainfot';
+$lang['metasaveerr']           = 'Lisainfo salvestamine läks untsu.';
+$lang['metasaveok']            = 'Lisainfo salvestatud';
+$lang['img_backto']            = 'Tagasi';
+$lang['img_title']             = 'Tiitel';
+$lang['img_caption']           = 'Kirjeldus';
+$lang['img_date']              = 'Kuupäev';
+$lang['img_fname']             = 'Faili nimi';
+$lang['img_fsize']             = 'Suurus';
+$lang['img_artist']            = 'Autor';
+$lang['img_format']            = 'Formaat';
+$lang['img_camera']            = 'Kaamera';
+$lang['img_keywords']          = 'Võtmesõnad';
+$lang['authmodfailed']         = 'Vigane kasutajate autentimise konfiguratsioon. Palun teavita sellest serveri haldajat.';
+$lang['authtempfail']          = 'Kasutajate autentimine on ajutiselt rivist väljas. Kui see olukord mõne aja jooksul ei parane, siis teavita sellest serveri haldajat.';
+$lang['i_chooselang']          = 'Vali keel';
+$lang['i_installer']           = 'DokuWiki paigaldaja';
+$lang['i_wikiname']            = 'Wiki nimi';
+$lang['i_enableacl']           = 'Kas lubada kasutajate haldus (soovitatav)';
+$lang['i_superuser']           = 'Superkasutaja';
+$lang['i_problems']            = 'Paigaldaja leidis mõned vead, mis on allpool välja toodud. Enne vigade eemaldamist ei saa jätkata.';
+$lang['i_modified']            = 'Õnnetuste vältimiseks läheb see skript käima ainult värskelt paigaldatud ja muutmata Dokuwiki peal.
+                       Sa peaksid ilmselt kogu koodi uuesti lahti pakkima. Vaata ka <a href="http://dokuwiki.org/install">Dokuwiki installeerimis juhendit</a>';
+$lang['i_funcna']              = 'PHP funktsiooni <code>%s</code> ei ole olemas.võibolla sinu serveri hooldaja on selle mingil põhjusel keelanud?';
+$lang['i_permfail']            = 'Dokuwiki ei saa kirjutada faili <code>%s</code>. Kontrolli serveris failide õigused üle.';
+$lang['i_confexists']          = '<code>%s</code> on juba olemas';
+$lang['i_writeerr']            = 'Faili <code>%s</code> ei lubata tekitada. Kontrolli kataloogi ja faili õigusi.';
+$lang['i_badval']              = '<code>%s</code> - lubamatu või tühi väärtus';
+$lang['i_success']             = 'Seadistamine on õnnelikult lõpule viidud. Sa võid nüüd kustutada faili install.php. Alusta oma <a href="doku.php">uue DokuWiki</a> täitmist.';
+$lang['i_failure']             = 'Konfiguratsiooni faili kirjutamisel esines vigu. Võimalik, et pead need käsitsi parandama enne <a href="doku.php">uue DokuWiki</a> täitma asumist.';
+$lang['i_policy']              = 'Wiki õiguste algne poliitika';
+$lang['i_pol0']                = 'Avatud (lugemine, kirjutamine ja üleslaadimine kõigile lubatud)';
+$lang['i_pol1']                = 'Avalikuks lugemiseks (lugeda saavad kõik, kirjutada ja üles laadida vaid registreeritud kasutajad)';
+$lang['i_pol2']                = 'Suletud (kõik õigused, kaasaarvatud lugemine on lubatud vaid registreeritud kasutajatele)';
diff --git a/inc/lang/eu/lang.php b/inc/lang/eu/lang.php
index 2efec00be3bc988881ce8f4515d41c8a44f51d46..503b20b302b8a64c717f17294cb21fd600694e3a 100644
--- a/inc/lang/eu/lang.php
+++ b/inc/lang/eu/lang.php
@@ -45,6 +45,7 @@ $lang['btn_draft']             = 'Editatu zirriborroa';
 $lang['btn_recover']           = 'Berreskuratu zirriborroa';
 $lang['btn_draftdel']          = 'Ezabatu zirriborroa';
 $lang['btn_revert']            = 'Berrezarri';
+$lang['btn_register']          = 'Erregistratu';
 $lang['loggedinas']            = 'Erabiltzailea';
 $lang['user']                  = 'Erabiltzailea';
 $lang['pass']                  = 'Pasahitza';
@@ -54,7 +55,6 @@ $lang['passchk']               = 'berriz';
 $lang['remember']              = 'Gogoratu';
 $lang['fullname']              = 'Izen Deiturak';
 $lang['email']                 = 'E-Maila';
-$lang['register']              = 'Erregistratu';
 $lang['profile']               = 'Erabiltzaile Profila';
 $lang['badlogin']              = 'Barkatu, prozesuak huts egin du; saiatu berriz';
 $lang['minoredit']             = 'Aldaketa Txikiak';
diff --git a/inc/lang/fa/lang.php b/inc/lang/fa/lang.php
index c5be8e1c01900472dd76eafe723fa835aa2a1e34..ceea28f8ed96ef2a19e6f397cfe2761a5ca43347 100644
--- a/inc/lang/fa/lang.php
+++ b/inc/lang/fa/lang.php
@@ -10,7 +10,6 @@
  * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesFa.php?view=co
  * @author behrad eslamifar <behrad_es@yahoo.com)
  * @author Mohsen Firoozmandan <info@mambolearn.com>
- * @author omidmr@gmail.com
  * @author Omid Mottaghi <omidmr@gmail.com>
  * @author Mohammad Reza Shoaei <shoaei@gmail.com>
  */
@@ -53,6 +52,7 @@ $lang['btn_draft']             = 'ویرایش پیش‌نویس';
 $lang['btn_recover']           = 'بازیابی پیش‌نویس';
 $lang['btn_draftdel']          = 'حذف پیش‌نویس';
 $lang['btn_revert']            = 'بازیابی';
+$lang['btn_register']          = 'یک حساب جدید بسازید';
 $lang['loggedinas']            = 'به عنوان کاربر روبرو وارد شده‌اید:';
 $lang['user']                  = 'نام کاربری:';
 $lang['pass']                  = 'گذرواژه‌ی شما';
@@ -62,7 +62,6 @@ $lang['passchk']               = 'گذرواژه را دوباره وارد کن
 $lang['remember']              = 'گذرواژه را به یاد بسپار.';
 $lang['fullname']              = '*نام واقعی شما';
 $lang['email']                 = 'ایمیل شما*';
-$lang['register']              = 'یک حساب جدید بسازید';
 $lang['profile']               = 'پروفایل کاربر';
 $lang['badlogin']              = 'خطا در ورود به سیستم';
 $lang['minoredit']             = 'این ویرایش خُرد است';
diff --git a/inc/lang/fi/lang.php b/inc/lang/fi/lang.php
index 2b1ddfa6ff2e87e553ea59f61b84e332773e62b6..bc52625e02188383200d581bbb4897793b9fbff3 100644
--- a/inc/lang/fi/lang.php
+++ b/inc/lang/fi/lang.php
@@ -5,7 +5,6 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Petteri <petteri@gmail.com>
  * @author Matti Pöllä <mpo@iki.fi>
- * @author otto@valjakko.net
  * @author Otto Vainio <otto@valjakko.net>
  * @author Teemu Mattila <ghcsystems@gmail.com>
  */
@@ -48,6 +47,7 @@ $lang['btn_draft']             = 'Muokkaa luonnosta';
 $lang['btn_recover']           = 'Palauta luonnos';
 $lang['btn_draftdel']          = 'Poista luonnos';
 $lang['btn_revert']            = 'palauta';
+$lang['btn_register']          = 'Rekisteröidy';
 $lang['loggedinas']            = 'Kirjautunut nimellä';
 $lang['user']                  = 'Käyttäjänimi';
 $lang['pass']                  = 'Salasana';
@@ -57,7 +57,6 @@ $lang['passchk']               = 'uudelleen';
 $lang['remember']              = 'Muista minut';
 $lang['fullname']              = 'Koko nimi';
 $lang['email']                 = 'Sähköposti';
-$lang['register']              = 'Rekisteröidy';
 $lang['profile']               = 'Käyttäjän profiili';
 $lang['badlogin']              = 'Käyttäjänimi tai salasana oli väärä.';
 $lang['minoredit']             = 'Pieni muutos';
diff --git a/inc/lang/fo/lang.php b/inc/lang/fo/lang.php
index 2bc5c3d53e6dd3c705af25b1a30461bb3b93d8ec..3d4d0455b5c473ed7126797fc1f53b6cd4448d6e 100644
--- a/inc/lang/fo/lang.php
+++ b/inc/lang/fo/lang.php
@@ -4,7 +4,7 @@
  *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Poul J. Clementsen <poul@diku.dk>
- * @author Einar Petersen einar.petersen@gmail.com
+ * @author Einar Petersen <einar.petersen@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -45,6 +45,7 @@ $lang['btn_draft']             = 'Broyt kladdu';
 $lang['btn_recover']           = 'Endurbygg kladdu';
 $lang['btn_draftdel']          = 'Sletta';
 $lang['btn_revert']            = 'Endurbygg';
+$lang['btn_register']          = 'Melda til';
 $lang['loggedinas']            = 'Ritavur inn sum';
 $lang['user']                  = 'Brúkaranavn';
 $lang['pass']                  = 'Loyniorð';
@@ -54,7 +55,6 @@ $lang['passchk']               = 'Endurtak nýtt loyniorð';
 $lang['remember']              = 'Minst til loyniorðið hjá mær';
 $lang['fullname']              = 'Navn';
 $lang['email']                 = 'T-postur';
-$lang['register']              = 'Melda til';
 $lang['profile']               = 'Brúkara vangamynd';
 $lang['badlogin']              = 'Skeivt brúkaranavn ella loyniorð.';
 $lang['minoredit']             = 'Smærri broytingar';
diff --git a/inc/lang/fr/lang.php b/inc/lang/fr/lang.php
index 17d35dfa9fb9ed1299861db9e4469b36269674a5..40384fecbdb92d154ffc9fa5f60974291ee3c7d2 100644
--- a/inc/lang/fr/lang.php
+++ b/inc/lang/fr/lang.php
@@ -12,7 +12,6 @@
  * @author Stéphane Chamberland <stephane.chamberland@ec.gc.ca>
  * @author Delassaux Julien <julien@delassaux.fr>
  * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca>
- * @author gb@isis.u-strasbg.fr
  * @author stephane.gully@gmail.com
  * @author Guillaume Turri <guillaume.turri@gmail.com>
  * @author Erik Pedersen <erik.pedersen@shaw.ca>
@@ -20,7 +19,7 @@
  * @author Vincent Feltz <psycho@feltzv.fr>
  * @author Philippe Bajoit <philippe.bajoit@gmail.com>
  * @author Florian Gaub <floriang@floriang.net>
- * @author Samuel Dorsaz samuel.dorsaz@novelion.net
+ * @author Samuel Dorsaz <samuel.dorsaz@novelion.net>
  * @author Johan Guilbaud <guilbaud.johan@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
@@ -62,6 +61,7 @@ $lang['btn_draft']             = 'Modifier le brouillon';
 $lang['btn_recover']           = 'Récupérer le brouillon';
 $lang['btn_draftdel']          = 'Effacer le brouillon';
 $lang['btn_revert']            = 'Restaurer';
+$lang['btn_register']          = 'S\'enregistrer';
 $lang['loggedinas']            = 'Connecté en tant que ';
 $lang['user']                  = 'Utilisateur';
 $lang['pass']                  = 'Mot de passe';
@@ -71,7 +71,6 @@ $lang['passchk']               = 'Répéter nouveau mot de passe';
 $lang['remember']              = 'Mémoriser';
 $lang['fullname']              = 'Nom';
 $lang['email']                 = 'Adresse de courriel';
-$lang['register']              = 'S\'enregistrer';
 $lang['profile']               = 'Profil utilisateur';
 $lang['badlogin']              = 'L\'utilisateur ou le mot de passe est incorrect.';
 $lang['minoredit']             = 'Modification mineure';
@@ -174,6 +173,9 @@ $lang['yours']                 = 'Votre version';
 $lang['diff']                  = 'Différences avec la version actuelle';
 $lang['diff2']                 = 'Différences entre les versions sélectionnées';
 $lang['difflink']              = 'Lien vers cette vue';
+$lang['diff_type']             = 'Voir les différences :';
+$lang['diff_inline']           = 'Sur une seule ligne';
+$lang['diff_side']             = 'Côte à côte';
 $lang['line']                  = 'Ligne';
 $lang['breadcrumb']            = 'Piste';
 $lang['youarehere']            = 'Vous êtes ici';
diff --git a/inc/lang/gl/lang.php b/inc/lang/gl/lang.php
index 9f1b4817344ea089bc37e7611812c01c1b237255..37cf55d226278b55f916a692b387e87951657365 100644
--- a/inc/lang/gl/lang.php
+++ b/inc/lang/gl/lang.php
@@ -44,6 +44,7 @@ $lang['btn_draft']             = 'Editar borrador';
 $lang['btn_recover']           = 'Recuperar borrador';
 $lang['btn_draftdel']          = 'Eliminar borrador';
 $lang['btn_revert']            = 'Restaurar';
+$lang['btn_register']          = 'Rexístrate';
 $lang['loggedinas']            = 'Iniciaches sesión como';
 $lang['user']                  = 'Nome de Usuario';
 $lang['pass']                  = 'Contrasinal';
@@ -53,7 +54,6 @@ $lang['passchk']               = 'de novo';
 $lang['remember']              = 'Lémbrame';
 $lang['fullname']              = 'Nome Completo';
 $lang['email']                 = 'Correo-e';
-$lang['register']              = 'Rexístrate';
 $lang['profile']               = 'Perfil de Usuario';
 $lang['badlogin']              = 'Sentímolo, mais o nome de usuario ou o contrasinal non son correctos.';
 $lang['minoredit']             = 'Trocos Menores';
diff --git a/inc/lang/he/lang.php b/inc/lang/he/lang.php
index 47310d4d19d7e337d0e0dfb7bc42520ebedb6b49..1a47ebcb8dd2b5e41542772bd80fac3adc70dea3 100644
--- a/inc/lang/he/lang.php
+++ b/inc/lang/he/lang.php
@@ -6,7 +6,6 @@
  * @link       http://sourceforge.net/projects/hebdokuwiki/
  * @author גיא שפר <guysoft@ort.org.il>
  * @author Denis Simakov <akinoame1@gmail.com>
- * @author DoK <kamberd@yahoo.com>
  * @author Dotan Kamber <kamberd@yahoo.com>
  * @author Moshe Kaplan <mokplan@gmail.com>
  * @author Yaron Yogev <yaronyogev@gmail.com>
@@ -51,6 +50,7 @@ $lang['btn_draft']             = 'עריכת טיוטה';
 $lang['btn_recover']           = 'שחזור טיוטה';
 $lang['btn_draftdel']          = 'מחיקת טיוטה';
 $lang['btn_revert']            = 'שחזור';
+$lang['btn_register']          = 'הרשמה';
 $lang['loggedinas']            = 'נכנסת בשם';
 $lang['user']                  = 'שם משתמש';
 $lang['pass']                  = 'ססמה';
@@ -60,7 +60,6 @@ $lang['passchk']               = 'פעם נוספת';
 $lang['remember']              = 'שמירת הפרטים שלי';
 $lang['fullname']              = 'שם מלא';
 $lang['email']                 = 'דוא״ל';
-$lang['register']              = 'הרשמה';
 $lang['profile']               = 'פרופיל המשתמש';
 $lang['badlogin']              = 'שם המשתמש או הססמה שגויים, עמך הסליחה';
 $lang['minoredit']             = 'שינוים מזעריים';
diff --git a/inc/lang/hi/lang.php b/inc/lang/hi/lang.php
index b8af3becd3d793b47109ff2d841aead2336bbd4f..00e5589d889449ea2b91c7c8329921f109f154f8 100644
--- a/inc/lang/hi/lang.php
+++ b/inc/lang/hi/lang.php
@@ -79,11 +79,8 @@ $lang['current']               = 'वर्तमान';
 $lang['yours']                 = 'आपका संस्करणः';
 $lang['diff']                  = 'वर्तमान संशोधन में मतभेद दिखाइये |';
 $lang['diff2']                 = 'चयनित संशोधन के बीच में मतभेद दिखाइये |';
-$lang['line']                  = 'रेखा
-';
-$lang['youarehere']            = 'आप यहाँ हैं |
-
-';
+$lang['line']                  = 'रेखा';
+$lang['youarehere']            = 'आप यहाँ हैं |';
 $lang['lastmod']               = 'अंतिम बार संशोधित';
 $lang['by']                    = 'के द्वारा';
 $lang['deleted']               = 'हटाया';
@@ -121,8 +118,7 @@ $lang['i_superuser']           = 'महाउपयोगकर्ता';
 $lang['i_retry']               = 'पुनःप्रयास';
 $lang['mu_gridsize']           = 'आकार';
 $lang['mu_gridstat']           = 'स्थिति';
-$lang['mu_browse']             = 'ब्राउज़
-';
+$lang['mu_browse']             = 'ब्राउज़';
 $lang['mu_toobig']             = 'बहुत बड़ा';
 $lang['mu_ready']              = 'अपलोड करने के लिए तैयार';
 $lang['mu_done']               = 'पूर्ण';
diff --git a/inc/lang/hr/lang.php b/inc/lang/hr/lang.php
index 545498dee65770a089a718d6bf863db7fe136acb..a42e8c96ffca9315c1a8165aaecde3d7b14ab883 100644
--- a/inc/lang/hr/lang.php
+++ b/inc/lang/hr/lang.php
@@ -48,6 +48,7 @@ $lang['btn_resendpwd']         = 'Pošalji novu lozinku';
 $lang['btn_draft']             = 'Uredi nacrt dokumenta';
 $lang['btn_recover']           = 'Vrati prijašnji nacrt dokumenta';
 $lang['btn_draftdel']          = 'Obriši nacrt dokumenta';
+$lang['btn_register']          = 'Registracija';
 $lang['loggedinas']            = 'Prijavljen kao';
 $lang['user']                  = 'Korisničko ime';
 $lang['pass']                  = 'Lozinka';
@@ -57,7 +58,6 @@ $lang['passchk']               = 'Ponoviti';
 $lang['remember']              = 'Zapamti me';
 $lang['fullname']              = 'Ime i prezime';
 $lang['email']                 = 'Email';
-$lang['register']              = 'Registracija';
 $lang['profile']               = 'Korisnički profil';
 $lang['badlogin']              = 'Ne ispravno korisničko ime ili lozinka.';
 $lang['minoredit']             = 'Manje izmjene';
diff --git a/inc/lang/hu/lang.php b/inc/lang/hu/lang.php
index b3cd87c29d76d31c33b4309e8d9bff79c9caca9a..fc21d1c8b980dff0c71206e3e74e60dfc00e65b5 100644
--- a/inc/lang/hu/lang.php
+++ b/inc/lang/hu/lang.php
@@ -5,10 +5,8 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Ziegler Gábor <gziegler@freemail.hu>
  * @author Sandor TIHANYI <stihanyi+dw@gmail.com>
- * @author Siaynoq Siaynoq <siaynoqmage@gmail.com>
  * @author Siaynoq Mage <siaynoqmage@gmail.com>
  * @author schilling.janos@gmail.com
- * @author Szabó Dávid (szabo.david@gyumolcstarhely.hu)
  * @author Szabó Dávid <szabo.david@gyumolcstarhely.hu>
  */
 $lang['encoding']              = 'utf-8';
@@ -50,6 +48,7 @@ $lang['btn_draft']             = 'Piszkozat szerkesztése';
 $lang['btn_recover']           = 'Piszkozat folytatása';
 $lang['btn_draftdel']          = 'Piszkozat törlése';
 $lang['btn_revert']            = 'Helyreállítás';
+$lang['btn_register']          = 'Regisztráció';
 $lang['loggedinas']            = 'Belépett felhasználó: ';
 $lang['user']                  = 'Azonosító';
 $lang['pass']                  = 'Jelszó';
@@ -59,7 +58,6 @@ $lang['passchk']               = 'még egyszer';
 $lang['remember']              = 'Emlékezz rám';
 $lang['fullname']              = 'Teljes név';
 $lang['email']                 = 'E-Mail';
-$lang['register']              = 'Regisztráció';
 $lang['profile']               = 'Személyes beállítások';
 $lang['badlogin']              = 'Sajnáljuk, az azonosító, vagy a jelszó nem jó.';
 $lang['minoredit']             = 'Apróbb változások';
diff --git a/inc/lang/ia/lang.php b/inc/lang/ia/lang.php
index f684675437a6a51efedd757ee5f3ffeb1a5bdc1c..bdfef88f4635f7b89bcf4bf0451f5883913f4994 100644
--- a/inc/lang/ia/lang.php
+++ b/inc/lang/ia/lang.php
@@ -50,6 +50,7 @@ $lang['btn_draft']             = 'Modificar version provisori';
 $lang['btn_recover']           = 'Recuperar version provisori';
 $lang['btn_draftdel']          = 'Deler version provisori';
 $lang['btn_revert']            = 'Restaurar';
+$lang['btn_register']          = 'Crear conto';
 $lang['loggedinas']            = 'Session aperite como';
 $lang['user']                  = 'Nomine de usator';
 $lang['pass']                  = 'Contrasigno';
@@ -59,7 +60,6 @@ $lang['passchk']               = 'un altere vice';
 $lang['remember']              = 'Memorar me';
 $lang['fullname']              = 'Nomine real';
 $lang['email']                 = 'E-mail';
-$lang['register']              = 'Crear conto';
 $lang['profile']               = 'Profilo de usator';
 $lang['badlogin']              = 'Le nomine de usator o le contrasigno es incorrecte.';
 $lang['minoredit']             = 'Modificationes minor';
diff --git a/inc/lang/id-ni/lang.php b/inc/lang/id-ni/lang.php
index 4e26677e09001139efb3b1090cf4a10e0eb52ff3..9c04f025983e069400efc8b260221c4ce12eb1f0 100644
--- a/inc/lang/id-ni/lang.php
+++ b/inc/lang/id-ni/lang.php
@@ -41,6 +41,7 @@ $lang['btn_reset']             = 'Fawu\'a';
 $lang['btn_resendpwd']         = 'Fa\'ohe\'ö kode sibohou';
 $lang['btn_draft']             = 'Fawu\'a wanura';
 $lang['btn_draftdel']          = 'Heta zura';
+$lang['btn_register']          = 'Fasura\'ö';
 $lang['loggedinas']            = 'Möi bakha zotöi';
 $lang['user']                  = 'Töi';
 $lang['pass']                  = 'Kode';
@@ -50,7 +51,6 @@ $lang['passchk']               = 'Sura sakalitö';
 $lang['remember']              = 'Töngöni ndra\'o';
 $lang['fullname']              = 'Töi safönu';
 $lang['email']                 = 'Imele';
-$lang['register']              = 'Fasura\'ö';
 $lang['profile']               = 'Töi pörofile';
 $lang['badlogin']              = 'Bologö dödöu, fasala döi faoma kode.';
 $lang['minoredit']             = 'Famawu\'a ma\'ifu';
diff --git a/inc/lang/id/lang.php b/inc/lang/id/lang.php
index 3ea1b394a8fe04e346372c873ab824682fee70cf..c1480f51869521ff02f872f40214ae7d182e6f60 100644
--- a/inc/lang/id/lang.php
+++ b/inc/lang/id/lang.php
@@ -45,6 +45,7 @@ $lang['btn_reset']             = 'Reset';
 $lang['btn_resendpwd']         = 'Kirim password baru';
 $lang['btn_draft']             = 'Edit draft';
 $lang['btn_draftdel']          = 'Hapus draft';
+$lang['btn_register']          = 'Daftar';
 $lang['loggedinas']            = 'Login sebagai ';
 $lang['user']                  = 'Username';
 $lang['pass']                  = 'Password';
@@ -54,7 +55,6 @@ $lang['passchk']               = 'sekali lagi';
 $lang['remember']              = 'Ingat saya';
 $lang['fullname']              = 'Nama lengkap';
 $lang['email']                 = 'E-Mail';
-$lang['register']              = 'Daftar';
 $lang['profile']               = 'Profil User';
 $lang['badlogin']              = 'Maaf, username atau password salah.';
 $lang['minoredit']             = 'Perubahan Minor';
diff --git a/inc/lang/is/lang.php b/inc/lang/is/lang.php
index ba1ab2c04268bf87467cac6d24ce3ae87f9533bc..7388e69089e296027de0c26c21465530a5ccc5ba 100644
--- a/inc/lang/is/lang.php
+++ b/inc/lang/is/lang.php
@@ -54,6 +54,7 @@ $lang['btn_draft']             = 'Breyta uppkasti';
 $lang['btn_recover']           = 'Endurheimta uppkast';
 $lang['btn_draftdel']          = 'Eyða uppkasti';
 $lang['btn_revert']            = 'Endurheimta';
+$lang['btn_register']          = 'Skráning';
 $lang['loggedinas']            = 'Innskráning sem';
 $lang['user']                  = 'Notendanafn';
 $lang['pass']                  = 'Aðgangsorð';
@@ -63,7 +64,6 @@ $lang['passchk']               = 'Aðgangsorð (aftur)';
 $lang['remember']              = 'Muna.';
 $lang['fullname']              = 'Fullt nafn þitt*';
 $lang['email']                 = 'Tölvupóstfangið þitt*';
-$lang['register']              = 'Skráning';
 $lang['profile']               = 'Notendastillingar';
 $lang['badlogin']              = 'Því miður, notandanafn eða aðgangsorð var rangur.';
 $lang['minoredit']             = 'Minniháttar breyting';
diff --git a/inc/lang/it/lang.php b/inc/lang/it/lang.php
index 419b7053ba77ce3010dc6770d4f51d1ad53e1dfc..682f5b8c2f77b795718b7869add882919f1ceeec 100644
--- a/inc/lang/it/lang.php
+++ b/inc/lang/it/lang.php
@@ -4,16 +4,14 @@
  *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Giorgio Vecchiocattivi <giorgio@vecchio.it>
- * @author Roberto Bolli <http://www.rbnet.it/>
+ * @author Roberto Bolli [http://www.rbnet.it/]
  * @author Silvia Sargentoni <polinnia@tin.it>
  * @author Diego Pierotto <ita.translations@tiscali.it>
- * @author Diego Pierotto ita.translations@tiscali.it
- * @author ita.translations@tiscali.it
  * @author Lorenzo Breda <lbreda@gmail.com>
  * @author snarchio@alice.it
  * @author robocap <robocap1@gmail.com>
  * @author Matteo Carnevali <rekstorm@gmail.com>
- * @author Osman Tekin osman.tekin93@hotmail.it
+ * @author Osman Tekin <osman.tekin93@hotmail.it>
  * @author Jacopo Corbetta <jacopo.corbetta@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
@@ -55,6 +53,7 @@ $lang['btn_draft']             = 'Modifica bozza';
 $lang['btn_recover']           = 'Ripristina bozza';
 $lang['btn_draftdel']          = 'Elimina bozza';
 $lang['btn_revert']            = 'Ripristina';
+$lang['btn_register']          = 'Registrazione';
 $lang['loggedinas']            = 'Collegato come';
 $lang['user']                  = 'Nome utente';
 $lang['pass']                  = 'Password';
@@ -64,7 +63,6 @@ $lang['passchk']               = 'Ripeti password';
 $lang['remember']              = 'Memorizza nome utente e password';
 $lang['fullname']              = 'Nome completo';
 $lang['email']                 = 'Email';
-$lang['register']              = 'Registrazione';
 $lang['profile']               = 'Profilo utente';
 $lang['badlogin']              = 'Il nome utente o la password non sono validi.';
 $lang['minoredit']             = 'Modifiche minori';
@@ -248,7 +246,7 @@ $lang['i_enableacl']           = 'Abilita ACL (consigliato)';
 $lang['i_superuser']           = 'Amministratore';
 $lang['i_problems']            = 'Si sono verificati problemi durante l\'installazione, indicati di seguito. Non è possibile continuare finché non saranno risolti.';
 $lang['i_modified']            = 'Per motivi di sicurezza questa procedura funziona solamente con un\'installazione Dokuwiki nuova e non modificata.
-Prova a estrarre di nuovo i file dal pacchetto scaricato oppure consulta le 
+Prova a estrarre di nuovo i file dal pacchetto scaricato oppure consulta le
 <a href="http://dokuwiki.org/install">istruzioni per l\'installazione di Dokuwiki</a>';
 $lang['i_funcna']              = 'La funzione PHP <code>%s</code> non è disponibile. Forse è stata disabilitata dal tuo provider per qualche motivo?';
 $lang['i_phpver']              = 'La versione di PHP <code>%s</code> è inferiore a quella richiesta <code>%s</code>. Devi aggiornare l\'installazione di PHP.';
diff --git a/inc/lang/ja/lang.php b/inc/lang/ja/lang.php
index d9c02764a0754700bf635894891a4ae5fecccbe8..d503bae316a01f5a1f3ed13612043748ac9520bc 100644
--- a/inc/lang/ja/lang.php
+++ b/inc/lang/ja/lang.php
@@ -47,6 +47,7 @@ $lang['btn_draft']             = 'ドラフトを編集';
 $lang['btn_recover']           = 'ドラフトを復元';
 $lang['btn_draftdel']          = 'ドラフトを削除';
 $lang['btn_revert']            = '元に戻す';
+$lang['btn_register']          = 'ユーザー登録';
 $lang['loggedinas']            = 'ようこそ';
 $lang['user']                  = 'ユーザー名';
 $lang['pass']                  = 'パスワード';
@@ -56,7 +57,6 @@ $lang['passchk']               = '確認';
 $lang['remember']              = 'ユーザー名とパスワードを記憶する';
 $lang['fullname']              = 'フルネーム';
 $lang['email']                 = 'メールアドレス';
-$lang['register']              = 'ユーザー登録';
 $lang['profile']               = 'ユーザー情報';
 $lang['badlogin']              = 'ユーザー名かパスワードが違います。';
 $lang['minoredit']             = '小変更';
diff --git a/inc/lang/km/lang.php b/inc/lang/km/lang.php
index 3519a484ef7ad8f943ec05e0187194f01ec8c213..90cad3133c61b979f8c4c2513249e30add51f85f 100644
--- a/inc/lang/km/lang.php
+++ b/inc/lang/km/lang.php
@@ -1,9 +1,6 @@
 <?php
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @author     Andreas Gohr <andi@splitbrain.org>
- * @author     Anika Henke <henke@cosmocode.de>
- * @author     Matthias Grimm <matthiasgrimm@users.sourceforge.net>
  * @author     Ratana Lim <aerorat@yahoo.com>
  */
 $lang['encoding']   = 'utf-8';
@@ -46,6 +43,7 @@ $lang['btn_resendpwd']   = 'ផ្ញើពាក្សសម្ងាត់';
 $lang['btn_draft']    = 'កែគំរោង';
 $lang['btn_recover']  = 'ស្រោះគំរោងឡើង';
 $lang['btn_draftdel'] = 'លុបគំរោង';
+$lang['btn_register'] = 'ចុះឈ្មោះ';//'Register';
 
 $lang['loggedinas'] = 'អ្នកប្រើ';
 $lang['user']       = 'នាមបម្រើ';
@@ -56,7 +54,6 @@ $lang['passchk']    = 'ម្ដងទាត';
 $lang['remember']   = 'ចំណាំខ្ញុំ';
 $lang['fullname']   = 'នាមត្រគោល';
 $lang['email']      = 'អ៊ីមែល';
-$lang['register']   = 'ចុះឈ្មោះ';//'Register';
 $lang['profile']    = 'ប្រវត្តិរូប';// 'User Profile';
 $lang['badlogin']   = 'សុំអាទោស​ នាមបំរើ ឬ ពាក្សសម្ងាតមិនត្រវទេ។';
 $lang['minoredit']  = 'កែបបណ្តិចបណ្តួច';// 'Minor Changes';
diff --git a/inc/lang/ko/lang.php b/inc/lang/ko/lang.php
index 3765dd0114b912faa9e010d61c428e9f068c3992..0b45c6ce08fd511ddcbd392eb9bc7345c57f3361 100644
--- a/inc/lang/ko/lang.php
+++ b/inc/lang/ko/lang.php
@@ -7,7 +7,6 @@
  * @author jk Lee
  * @author dongnak@gmail.com
  * @author Song Younghwan <purluno@gmail.com>
- * @author SONG Younghwan <purluno@gmail.com>
  * @author Seung-Chul Yoo  <dryoo@live.com>
  */
 $lang['encoding']              = 'utf-8';
@@ -49,6 +48,7 @@ $lang['btn_draft']             = '문서초안 편집';
 $lang['btn_recover']           = '문서초안 복구';
 $lang['btn_draftdel']          = '문서초안 삭제';
 $lang['btn_revert']            = '복원';
+$lang['btn_register']          = '등록';
 $lang['loggedinas']            = '다음 사용자로 로그인';
 $lang['user']                  = '사용자';
 $lang['pass']                  = '패스워드';
@@ -58,7 +58,6 @@ $lang['passchk']               = '패스워드 다시 확인';
 $lang['remember']              = '기억하기';
 $lang['fullname']              = '실제 이름';
 $lang['email']                 = '이메일';
-$lang['register']              = '등록';
 $lang['profile']               = '개인 정보';
 $lang['badlogin']              = '잘못된 사용자 이름이거나 패스워드입니다.';
 $lang['minoredit']             = '일부 내용 변경';
diff --git a/inc/lang/ku/lang.php b/inc/lang/ku/lang.php
index 0ff2ca4ca675f14f2e2cb65a84d2dd9132caac18..9bed43cd101d06e5400bf4c98f44bcf5765137d6 100644
--- a/inc/lang/ku/lang.php
+++ b/inc/lang/ku/lang.php
@@ -34,6 +34,7 @@ $lang['btn_backlink']    = "Girêdanên paş";
 $lang['btn_backtomedia'] = 'Back to Mediafile Selection';
 $lang['btn_subscribe']   = 'Subscribe Changes';
 $lang['btn_unsubscribe'] = 'Unsubscribe Changes';
+$lang['btn_register'] = 'Register';
 
 $lang['loggedinas'] = 'Logged in as';
 $lang['user']       = 'Username';
@@ -42,7 +43,6 @@ $lang['passchk']    = 'once again';
 $lang['remember']   = 'Remember me';
 $lang['fullname']   = 'Full name';
 $lang['email']      = 'E-Mail';
-$lang['register']   = 'Register';
 $lang['badlogin']   = 'Sorry, username or password was wrong.';
 
 $lang['regmissing'] = 'Sorry, you must fill in all fields.';
diff --git a/inc/lang/la/lang.php b/inc/lang/la/lang.php
index ec80ac4d1ef0aed8eaf73f08363cf9eeab5e0cf8..d10c094f8dc9d642081ca794ab2ecc73b4822d08 100644
--- a/inc/lang/la/lang.php
+++ b/inc/lang/la/lang.php
@@ -49,6 +49,7 @@ $lang['btn_draft']             = 'Propositum recensere';
 $lang['btn_recover']           = 'Propositum reficere';
 $lang['btn_draftdel']          = 'Propositum delere';
 $lang['btn_revert']            = 'Reficere';
+$lang['btn_register']          = 'Te adscribere';
 $lang['loggedinas']            = 'Nomen sodalis:';
 $lang['user']                  = 'Nomen sodalis:';
 $lang['pass']                  = 'Tessera tua';
@@ -58,7 +59,6 @@ $lang['passchk']               = 'Tesseram tuam adfirmare';
 $lang['remember']              = 'Tesseram meam sodalitatis memento';
 $lang['fullname']              = 'Nomen tuom uerum:';
 $lang['email']                 = 'Cursus interretialis:';
-$lang['register']              = 'Te adscribere';
 $lang['profile']               = 'Tabella Sodalis';
 $lang['badlogin']              = 'Error in ineundo est, rectum nomen uel tessera cedo.';
 $lang['minoredit']             = 'Recensio minor';
diff --git a/inc/lang/lb/lang.php b/inc/lang/lb/lang.php
index 7152b65b177daf58c04f593e330ee8c48f60ac56..09fc41f0897d32e6f4843a6392881e30942875c9 100644
--- a/inc/lang/lb/lang.php
+++ b/inc/lang/lb/lang.php
@@ -41,6 +41,7 @@ $lang['btn_resendpwd']         = 'Nei Passwuert schécken';
 $lang['btn_draft']             = 'Entworf änneren';
 $lang['btn_recover']           = 'Entworf zeréckhuelen';
 $lang['btn_draftdel']          = 'Entworf läschen';
+$lang['btn_register']          = 'Registréieren';
 $lang['loggedinas']            = 'Ageloggt als';
 $lang['user']                  = 'Benotzernumm';
 $lang['pass']                  = 'Passwuert';
@@ -50,7 +51,6 @@ $lang['passchk']               = 'nach eng Kéier';
 $lang['remember']              = 'Verhal mech';
 $lang['fullname']              = 'Richtegen Numm';
 $lang['email']                 = 'E-Mail';
-$lang['register']              = 'Registréieren';
 $lang['profile']               = 'Benotzerprofil';
 $lang['badlogin']              = 'Entschëllegt, de Benotzernumm oder d\'Passwuert war falsch';
 $lang['minoredit']             = 'Kleng Ännerungen';
diff --git a/inc/lang/lt/lang.php b/inc/lang/lt/lang.php
index 639ad474965f6d6857e50ebb918f6972a5ec1575..6ae5f6c7309ad33b2b8300d91832ccf46cc8da73 100644
--- a/inc/lang/lt/lang.php
+++ b/inc/lang/lt/lang.php
@@ -7,7 +7,6 @@
  * @author Edmondas Girkantas <eg@zemaitija.net>
  * @author Arūnas Vaitekūnas <aras@fan.lt>
  * @author audrius.klevas@gmail.com
- * @author Arunas Vaitekunas <aras@fan.lt>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -50,6 +49,7 @@ $lang['btn_resendpwd']         = 'Išsiųsti naują slaptažodį';
 $lang['btn_draft']             = 'Redaguoti juodraštį';
 $lang['btn_recover']           = 'Atkurti juodraštį';
 $lang['btn_draftdel']          = 'Šalinti juodraštį';
+$lang['btn_register']          = 'Registruotis';
 $lang['loggedinas']            = 'Prisijungęs kaip';
 $lang['user']                  = 'Vartotojo vardas';
 $lang['pass']                  = 'Slaptažodis';
@@ -59,7 +59,6 @@ $lang['passchk']               = 'dar kartÄ…';
 $lang['remember']              = 'Prisiminti mane';
 $lang['fullname']              = 'Visas vardas';
 $lang['email']                 = 'El. pašto adresas';
-$lang['register']              = 'Registruotis';
 $lang['profile']               = 'Vartotojo profilis';
 $lang['badlogin']              = 'Nurodėte blogą vartotojo vardą arba slaptažodį.';
 $lang['minoredit']             = 'Nedidelis pataisymas';
diff --git a/inc/lang/lv/lang.php b/inc/lang/lv/lang.php
index 21c4606b3bdb82f43b3a8a5efc11ac0a1839f315..73559c0f8174a2c5c1d68499ba28f2731a3d28cc 100644
--- a/inc/lang/lv/lang.php
+++ b/inc/lang/lv/lang.php
@@ -44,6 +44,7 @@ $lang['btn_draft']             = 'Labot melnrakstu';
 $lang['btn_recover']           = 'Atjaunot melnrakstu';
 $lang['btn_draftdel']          = 'Dzēst melnrakstu';
 $lang['btn_revert']            = 'Atjaunot';
+$lang['btn_register']          = 'Reģistrēties';
 $lang['loggedinas']            = 'Pieteicies kā';
 $lang['user']                  = 'Lietotājvārds';
 $lang['pass']                  = 'Parole';
@@ -53,7 +54,6 @@ $lang['passchk']               = 'vēlreiz';
 $lang['remember']              = 'Atceries mani';
 $lang['fullname']              = 'Pilns vārds';
 $lang['email']                 = 'E-pasts';
-$lang['register']              = 'Reģistrēties';
 $lang['profile']               = 'Lietotāja vārds';
 $lang['badlogin']              = 'Atvaino, lietotājvārds vai parole aplama.';
 $lang['minoredit']             = 'Sīki labojumi';
diff --git a/inc/lang/mg/lang.php b/inc/lang/mg/lang.php
index 3727cfe9af9f7edee39fb59c7f96e1b7197272f3..8c95a9e02517115ca73d9d2fd1cd16f9f25f023d 100644
--- a/inc/lang/mg/lang.php
+++ b/inc/lang/mg/lang.php
@@ -28,6 +28,7 @@ $lang['btn_update'] = 'Update';
 $lang['btn_delete'] = 'Fafao';
 $lang['btn_back']   = 'Miverina';
 $lang['btn_backtomedia'] = 'Fitsongana fichier Media';
+$lang['btn_register'] = 'Hisoratra';
 
 $lang['loggedinas'] = 'Anaranao:';
 $lang['user']       = 'Anarana';
@@ -36,7 +37,6 @@ $lang['passchk']    = 'Ataovy indray';
 $lang['remember']   = 'Tsarovy';
 $lang['fullname']   = 'Anarana feno';
 $lang['email']      = 'Imailaka';
-$lang['register']   = 'Hisoratra';
 $lang['badlogin']   = 'Miala tsiny fa misy diso ny anarana na ny alahidy.';
 
 $lang['regmissing'] = 'Tsy maintsy fenoina ny saha rehetra.';
diff --git a/inc/lang/mk/lang.php b/inc/lang/mk/lang.php
index ddd734e229e61361238e033ce46679e96f2fe956..456a5a3d49c82ea619a61dd174e0404251f3dc8e 100644
--- a/inc/lang/mk/lang.php
+++ b/inc/lang/mk/lang.php
@@ -47,6 +47,7 @@ $lang['btn_draft']             = 'Уреди скица';
 $lang['btn_recover']           = 'Поврати скица';
 $lang['btn_draftdel']          = 'Избриши скица';
 $lang['btn_revert']            = 'Обнови';
+$lang['btn_register']          = 'Регистрирај се';
 $lang['loggedinas']            = 'Најавен/а како';
 $lang['user']                  = 'Корисничко име';
 $lang['pass']                  = 'Лозинка';
@@ -56,7 +57,6 @@ $lang['passchk']               = 'уште еднаш';
 $lang['remember']              = 'Запомни ме';
 $lang['fullname']              = 'Вистинско име';
 $lang['email']                 = 'Е-пошта';
-$lang['register']              = 'Регистрирај се';
 $lang['profile']               = 'Кориснички профил';
 $lang['badlogin']              = 'Жалам, корисничкото име или лозинката се погрешни.';
 $lang['minoredit']             = 'Мали измени';
diff --git a/inc/lang/mr/lang.php b/inc/lang/mr/lang.php
index 99561f064119b04c9323f3754846be0f5b5c60a0..d991d46cf930f89a27bb82a6b343a6d8055aac5b 100644
--- a/inc/lang/mr/lang.php
+++ b/inc/lang/mr/lang.php
@@ -10,7 +10,6 @@
  * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesMr.php?view=co
  * @author ghatothkach@hotmail.com
  * @author Padmanabh Kulkarni <kulkarnipadmanabh@gmail.com>
- * @author Padmanabh Kulkarni<kulkarnipadmanabh@gmail.com>
  * @author shantanoo@gmail.com
  */
 $lang['encoding']              = 'utf-8';
@@ -54,6 +53,7 @@ $lang['btn_resendpwd']         = 'कृपया परवलीचा नव
 $lang['btn_draft']             = 'प्रत संपादन';
 $lang['btn_recover']           = 'प्रत परत मिळवा';
 $lang['btn_draftdel']          = 'प्रत रद्द';
+$lang['btn_register']          = 'नोंदणी';
 $lang['loggedinas']            = 'लॉगिन नाव';
 $lang['user']                  = 'वापरकर्ता';
 $lang['pass']                  = 'परवलीचा शब्द';
@@ -63,7 +63,6 @@ $lang['passchk']               = 'परत एकदा';
 $lang['remember']              = 'लक्षात ठेवा';
 $lang['fullname']              = 'पूर्ण नावं';
 $lang['email']                 = 'इमेल';
-$lang['register']              = 'नोंदणी';
 $lang['profile']               = 'वापरकर्त्याची माहिती';
 $lang['badlogin']              = 'माफ़ करा, वापरकर्ता नावात किंवा परवलीच्या शब्दात चूक झाली आहे.';
 $lang['minoredit']             = 'छोटे बदल';
diff --git a/inc/lang/ne/lang.php b/inc/lang/ne/lang.php
index 6c00610ea2d5e67e85f9c233357f499e96a3b4f1..e5b30ceafd45c75c1c3f6d6fe9a181e65998c2b2 100644
--- a/inc/lang/ne/lang.php
+++ b/inc/lang/ne/lang.php
@@ -3,8 +3,7 @@
  * Nepali language file
  *
  * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com>
- * @author SarojKumar Dhakal <lotusnagarkot@yahoo.com>
- * @author Saroj Dhakal<lotusnagarkot@yahoo.com>
+ * @author Saroj Kumar Dhakal <lotusnagarkot@yahoo.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -47,6 +46,7 @@ $lang['btn_resendpwd']         = 'नयाँ प्रवेश शव्द(
 $lang['btn_draft']             = ' ड्राफ्ट सम्पादन गर्नुहोस् ';
 $lang['btn_recover']           = 'पहिलेको ड्राफ्ट हासिल गर्नुहोस ';
 $lang['btn_draftdel']          = ' ड्राफ्ट मेटाउनुहोस् ';
+$lang['btn_register']          = 'दर्ता  गर्नुहोस्';
 $lang['loggedinas']            = 'प्रवेश गर्नुहोस् ';
 $lang['user']                  = 'प्रयोगकर्ता ';
 $lang['pass']                  = 'प्रवेशशव्द';
@@ -56,7 +56,6 @@ $lang['passchk']               = 'एकपटक पुन:';
 $lang['remember']              = 'मलाई सम्झनु';
 $lang['fullname']              = 'पूरा नाम';
 $lang['email']                 = 'इमेल';
-$lang['register']              = 'दर्ता  गर्नुहोस्';
 $lang['profile']               = 'प्रयोगकर्ताको प्रोफाइल';
 $lang['badlogin']              = 'माफ गर्नुहोस् , प्रयोगकर्तानाम वा प्रवेशशव्द गलत भयो  ';
 $lang['minoredit']             = 'सामान्य परिवर्तन';
diff --git a/inc/lang/nl/lang.php b/inc/lang/nl/lang.php
index 9d81d0ff4c24de9895db6c0eb4ff39d83d6066d5..7dbde5ac83ae7e116a4161a3589a4884d18fedf3 100644
--- a/inc/lang/nl/lang.php
+++ b/inc/lang/nl/lang.php
@@ -11,8 +11,7 @@
  * @author John de Graaff <john@de-graaff.net>
  * @author Dion Nicolaas <dion@nicolaas.net>
  * @author Danny Rotsaert <danny.rotsaert@edpnet.be>
- * @author Marijn Hofstra hofstra.m@gmail.com
- * @author Matthias Carchon webmaster@c-mattic.be
+ * @author Matthias Carchon <webmaster@c-mattic.be>
  * @author Marijn Hofstra <hofstra.m@gmail.com>
  * @author Timon Van Overveldt <timonvo@gmail.com>
  */
@@ -55,6 +54,7 @@ $lang['btn_draft']             = 'Bewerk concept';
 $lang['btn_recover']           = 'Herstel concept';
 $lang['btn_draftdel']          = 'Verwijder concept';
 $lang['btn_revert']            = 'Herstellen';
+$lang['btn_register']          = 'Registreren';
 $lang['loggedinas']            = 'Ingelogd als';
 $lang['user']                  = 'Gebruikersnaam';
 $lang['pass']                  = 'Wachtwoord';
@@ -64,7 +64,6 @@ $lang['passchk']               = 'nogmaals';
 $lang['remember']              = 'Bewaar';
 $lang['fullname']              = 'Volledige naam';
 $lang['email']                 = 'E-mail';
-$lang['register']              = 'Registreren';
 $lang['profile']               = 'Gebruikersprofiel';
 $lang['badlogin']              = 'Sorry, gebruikersnaam of wachtwoord onjuist';
 $lang['minoredit']             = 'Kleine wijziging';
@@ -167,6 +166,9 @@ $lang['yours']                 = 'Jouw versie';
 $lang['diff']                  = 'Toon verschillen met huidige revisie';
 $lang['diff2']                 = 'Toon verschillen tussen geselecteerde revisies';
 $lang['difflink']              = 'Link naar deze vergelijking';
+$lang['diff_type']             = 'Bekijk verschillen:';
+$lang['diff_inline']           = 'Inline';
+$lang['diff_side']             = 'Zij aan zij';
 $lang['line']                  = 'Regel';
 $lang['breadcrumb']            = 'Spoor';
 $lang['youarehere']            = 'Je bent hier';
diff --git a/inc/lang/no/lang.php b/inc/lang/no/lang.php
index ca63c0094e0fbaae7ee725cbbd7b63c7260a18ab..d2be945e6ae440b71a829b0ecd4138a4ad6dd141 100644
--- a/inc/lang/no/lang.php
+++ b/inc/lang/no/lang.php
@@ -5,17 +5,16 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Reidar Mosvold <Reidar.Mosvold@hit.no>
  * @author Jorge Barrera Grandon <jorge@digitalwolves.org>
- * @author Rune Rasmussen http://www.syntaxerror.no/
+ * @author Rune Rasmussen [http://www.syntaxerror.no/]
  * @author Thomas Nygreen <nygreen@gmail.com>
  * @author Arild Burud <arildb@met.no>
  * @author Torkill Bruland <torkar-b@online.no>
  * @author Rune M. Andersen <rune.andersen@gmail.com>
- * @author Jakob Vad Nielsen (me@jakobnielsen.net)
+ * @author Jakob Vad Nielsen <me@jakobnielsen.net>
  * @author Kjell Tore Næsgaard  <kjell.t.nasgaard@ntnu.no>
  * @author Knut Staring <knutst@gmail.com>
  * @author Lisa Ditlefsen <lisa@vervesearch.com>
  * @author Erik Pedersen <erik.pedersen@shaw.ca>
- * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -59,6 +58,7 @@ $lang['btn_draft']             = 'Rediger kladd';
 $lang['btn_recover']           = 'Gjennvinn kladd';
 $lang['btn_draftdel']          = 'Slett kladd';
 $lang['btn_revert']            = 'Gjenopprette';
+$lang['btn_register']          = 'Registrer deg';
 $lang['loggedinas']            = 'Innlogget som';
 $lang['user']                  = 'Brukernavn';
 $lang['pass']                  = 'Passord';
@@ -68,7 +68,6 @@ $lang['passchk']               = 'Bekreft passord';
 $lang['remember']              = 'Husk meg';
 $lang['fullname']              = 'Fullt navn';
 $lang['email']                 = 'E-post';
-$lang['register']              = 'Registrer deg';
 $lang['profile']               = 'Brukerprofil';
 $lang['badlogin']              = 'Ugyldig brukernavn og/eller passord.';
 $lang['minoredit']             = 'Mindre endringer';
diff --git a/inc/lang/pl/lang.php b/inc/lang/pl/lang.php
index 5a366fbb57ab802a3c9493999bd06b67560aeee5..bc0509df31921e16fcbe96502751be1c8945efca 100644
--- a/inc/lang/pl/lang.php
+++ b/inc/lang/pl/lang.php
@@ -51,6 +51,7 @@ $lang['btn_draft']             = 'Edytuj szkic';
 $lang['btn_recover']           = 'Przywróć szkic';
 $lang['btn_draftdel']          = 'Usuń szkic';
 $lang['btn_revert']            = 'Przywróć';
+$lang['btn_register']          = 'Zarejestruj siÄ™!';
 $lang['loggedinas']            = 'Zalogowany jako';
 $lang['user']                  = 'Użytkownik';
 $lang['pass']                  = 'Hasło';
@@ -60,7 +61,6 @@ $lang['passchk']               = 'Powtórz hasło';
 $lang['remember']              = 'Zapamiętaj';
 $lang['fullname']              = 'ImiÄ™ i nazwisko';
 $lang['email']                 = 'E-mail';
-$lang['register']              = 'Zarejestruj siÄ™!';
 $lang['profile']               = 'Profil użytkownika';
 $lang['badlogin']              = 'Nazwa użytkownika lub hasło są nieprawidłowe.';
 $lang['minoredit']             = 'Mniejsze zmiany';
diff --git a/inc/lang/pt-br/lang.php b/inc/lang/pt-br/lang.php
index fb05361f0a11874bac0cdf34488cff76f1ac3ad0..e3568b56bcfb8971297e4dc8e6383eee2f6302d8 100644
--- a/inc/lang/pt-br/lang.php
+++ b/inc/lang/pt-br/lang.php
@@ -13,10 +13,9 @@
  * @author Jeferson Propheta <jeferson.propheta@gmail.com>
  * @author jair.henrique@gmail.com
  * @author Luis Dantas <luis@dantas.com>
- * @author Frederico Guimarães <frederico@teia.bio.br>
- * @author Jair Henrique <jair.henrique@gmail.com>
  * @author Luis Dantas <luisdantas@gmail.com>
- * @author Sergio Motta sergio@cisne.com.br
+ * @author Jair Henrique <jair.henrique@gmail.com>
+ * @author Sergio Motta <sergio@cisne.com.br>
  * @author Isaias Masiero Filho <masiero@masiero.org>
  */
 $lang['encoding']              = 'utf-8';
@@ -58,6 +57,7 @@ $lang['btn_draft']             = 'Editar o rascunho';
 $lang['btn_recover']           = 'Recuperar o rascunho';
 $lang['btn_draftdel']          = 'Excluir o rascunho';
 $lang['btn_revert']            = 'Restaure';
+$lang['btn_register']          = 'Registrar';
 $lang['loggedinas']            = 'Autenticado(a) como';
 $lang['user']                  = 'Nome de usuário';
 $lang['pass']                  = 'Senha';
@@ -67,7 +67,6 @@ $lang['passchk']               = 'mais uma vez';
 $lang['remember']              = 'Lembre-se de mim';
 $lang['fullname']              = 'Nome completo';
 $lang['email']                 = 'E-mail';
-$lang['register']              = 'Registrar';
 $lang['profile']               = 'Perfil do usuário';
 $lang['badlogin']              = 'Desculpe, mas o nome de usuário ou a senha estão incorretos.';
 $lang['minoredit']             = 'Alterações mínimas';
diff --git a/inc/lang/pt/lang.php b/inc/lang/pt/lang.php
index 6b68c5fefb1613965fcf103b001dc387a3260844..976077d4030846c1638f9c5103dc74737bfd973c 100644
--- a/inc/lang/pt/lang.php
+++ b/inc/lang/pt/lang.php
@@ -48,6 +48,7 @@ $lang['btn_draft']             = 'Editar rascunho';
 $lang['btn_recover']           = 'Recuperar rascunho';
 $lang['btn_draftdel']          = 'Apagar rascunho';
 $lang['btn_revert']            = 'Restaurar';
+$lang['btn_register']          = 'Registar';
 $lang['loggedinas']            = 'Está em sessão como';
 $lang['user']                  = 'Utilizador';
 $lang['pass']                  = 'Senha';
@@ -57,7 +58,6 @@ $lang['passchk']               = 'Confirmar novamente';
 $lang['remember']              = 'Memorizar?';
 $lang['fullname']              = 'Nome completo';
 $lang['email']                 = 'Email';
-$lang['register']              = 'Registar';
 $lang['profile']               = 'Perfil do Utilizador';
 $lang['badlogin']              = 'O utilizador inválido ou senha inválida.';
 $lang['minoredit']             = 'Alterações Menores';
diff --git a/inc/lang/ro/lang.php b/inc/lang/ro/lang.php
index d21249d911acbf0b5ca65b992ab424bf8f66a740..cbecf6f6c323255b132ac8924f47e83213c2a8e3 100644
--- a/inc/lang/ro/lang.php
+++ b/inc/lang/ro/lang.php
@@ -5,11 +5,8 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Tiberiu Micu <tibimicu@gmx.net>
  * @author Sergiu Baltariu <s_baltariu@yahoo.com>
- * @author s_baltariu@yahoo.com
- * @author Emanuel-Emeric Andrasi <n30@mandrivausers.ro>
  * @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
  * @author Emanuel-Emeric AndraÅŸi <em.andrasi@mandrivausers.ro>
- * @author Emanuel-Emeric Andrasi <em.andrasi@mandrivausers.ro>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -50,6 +47,7 @@ $lang['btn_draft']             = 'Editează schiţă';
 $lang['btn_recover']           = 'Recuperează schiţă';
 $lang['btn_draftdel']          = 'Şterge schiţă';
 $lang['btn_revert']            = 'Revenire';
+$lang['btn_register']          = 'Înregistrează';
 $lang['loggedinas']            = 'Logat ca ÅŸi';
 $lang['user']                  = 'Utilizator';
 $lang['pass']                  = 'Parola';
@@ -59,7 +57,6 @@ $lang['passchk']               = 'încă o dată';
 $lang['remember']              = 'Ţine-mă minte';
 $lang['fullname']              = 'Nume complet';
 $lang['email']                 = 'E-Mail';
-$lang['register']              = 'Înregistrează';
 $lang['profile']               = 'Profil Utilizator';
 $lang['badlogin']              = 'Imi pare rău, utilizatorul şi/sau parola au fost greşite.';
 $lang['minoredit']             = 'Modificare Minoră';
@@ -162,6 +159,9 @@ $lang['yours']                 = 'Versiunea ta';
 $lang['diff']                  = 'arată diferenţele faţă de versiunea curentă';
 $lang['diff2']                 = 'Arată diferenţele dintre versiunile selectate';
 $lang['difflink']              = 'Link către această vizualizare comparativă';
+$lang['diff_type']             = 'Vezi diferențe:';
+$lang['diff_inline']           = 'Succesiv';
+$lang['diff_side']             = 'Alăturate';
 $lang['line']                  = 'Linia';
 $lang['breadcrumb']            = 'Traseu';
 $lang['youarehere']            = 'Sunteţi aici';
diff --git a/inc/lang/ru/lang.php b/inc/lang/ru/lang.php
index fc9e53b3a320c596438b8a99e89d00c1c90f2ae7..1eaa488ec9ef0a5947db1dcc6aa7f1fda75f6da4 100644
--- a/inc/lang/ru/lang.php
+++ b/inc/lang/ru/lang.php
@@ -8,16 +8,17 @@
  * @author Denis Simakov <akinoame1@gmail.com>
  * @author Kaens Bard <kaens@mail.ru>
  * @author Andrew Pleshakov <beotiger@mail.ru>
- * @author Змей Этерийский evil_snake@eternion.ru
+ * @author Змей Этерийский <evil_snake@eternion.ru>
  * @author Hikaru Nakajima <jisatsu@mail.ru>
  * @author Alexei Tereschenko <alexeitlex@yahoo.com>
- * @author Irina Ponomareva irinaponomareva@webperfectionist.com
+ * @author Irina Ponomareva <irinaponomareva@webperfectionist.com>
  * @author Alexander Sorkin <kibizoid@gmail.com>
  * @author Kirill Krasnov <krasnovforum@gmail.com>
  * @author Vlad Tsybenko <vlad.development@gmail.com>
  * @author Aleksey Osadchiy <rfc@nm.ru>
  * @author Aleksandr Selivanov <alexgearbox@gmail.com>
  * @author Ladyko Andrey <fylh@succexy.spb.ru>
+ * @author Eugene <windy.wanderer@gmail.com>
  */
 $lang['encoding']              = ' utf-8';
 $lang['direction']             = 'ltr';
@@ -58,6 +59,7 @@ $lang['btn_draft']             = 'Править черновик';
 $lang['btn_recover']           = 'Восстановить черновик';
 $lang['btn_draftdel']          = 'Удалить черновик';
 $lang['btn_revert']            = 'Восстановить';
+$lang['btn_register']          = 'Зарегистрироваться';
 $lang['loggedinas']            = 'Зашли как';
 $lang['user']                  = 'Логин';
 $lang['pass']                  = 'Пароль';
@@ -67,7 +69,6 @@ $lang['passchk']               = 'повторите';
 $lang['remember']              = 'Запомнить меня';
 $lang['fullname']              = 'Полное имя';
 $lang['email']                 = 'Эл. адрес';
-$lang['register']              = 'Зарегистрироваться';
 $lang['profile']               = 'Профиль пользователя';
 $lang['badlogin']              = 'Извините, неверное имя пользователя или пароль.';
 $lang['minoredit']             = 'Небольшие изменения';
@@ -168,6 +169,9 @@ $lang['yours']                 = 'Ваша версия';
 $lang['diff']                  = 'показать отличия от текущей версии';
 $lang['diff2']                 = 'Показать различия между ревизиями  ';
 $lang['difflink']              = 'Ссылка на это сравнение';
+$lang['diff_type']             = 'Посмотреть отличия';
+$lang['diff_inline']           = 'Встроенный';
+$lang['diff_side']             = 'Бок о бок';
 $lang['line']                  = 'Строка';
 $lang['breadcrumb']            = 'Вы посетили';
 $lang['youarehere']            = 'Вы находитесь здесь';
diff --git a/inc/lang/sk/lang.php b/inc/lang/sk/lang.php
index dde10c543b339ba15ac3b930a4cfbd22b31ffdbc..eaef4b6795b39512edf120b60dbebe1b8ae934df 100644
--- a/inc/lang/sk/lang.php
+++ b/inc/lang/sk/lang.php
@@ -47,6 +47,7 @@ $lang['btn_draft']             = 'Upraviť koncept';
 $lang['btn_recover']           = 'Obnoviť koncept';
 $lang['btn_draftdel']          = 'Zmazať koncept';
 $lang['btn_revert']            = 'Obnoviť';
+$lang['btn_register']          = 'Registrovať';
 $lang['loggedinas']            = 'Prihlásený(á) ako';
 $lang['user']                  = 'Užívateľské meno';
 $lang['pass']                  = 'Heslo';
@@ -56,7 +57,6 @@ $lang['passchk']               = 'Ešte raz znovu';
 $lang['remember']              = 'Zapamätaj si ma';
 $lang['fullname']              = 'Celé meno';
 $lang['email']                 = 'E-Mail';
-$lang['register']              = 'Registrovať';
 $lang['profile']               = 'Užívateľský profil';
 $lang['badlogin']              = 'Zadané užívateľské meno a heslo nie je správne.';
 $lang['minoredit']             = 'Menšie zmeny';
diff --git a/inc/lang/sl/admin.txt b/inc/lang/sl/admin.txt
index 89b924e08cd6d39b4198d5aa743fe8ce892a341c..cee19deff2f830a972cffd73ff40f8481e913b52 100644
--- a/inc/lang/sl/admin.txt
+++ b/inc/lang/sl/admin.txt
@@ -1,3 +1,3 @@
-===== Skrbništvo =====
+===== Skrbništvo =====
 
-Spodaj je naveden seznam skrbniških opravil sistema DokuWiki.
\ No newline at end of file
+Navedene možnosti omogočajo skrbniško prilagajanje nastavitev sistema DokuWiki.
diff --git a/inc/lang/sl/backlinks.txt b/inc/lang/sl/backlinks.txt
index 466f96cf4c1aead7663f077763ee3311dfc82a3e..5e4d8ffa72257ff02133255ca7a9a4939c8ab6e1 100644
--- a/inc/lang/sl/backlinks.txt
+++ b/inc/lang/sl/backlinks.txt
@@ -1,4 +1,3 @@
 ====== Povratne povezave ======
 
-Spodaj je naveden seznam strani, ki so povezane na trenutno stran. CamelCase povezave niso zaznane kot povratne povezave.
-
+Spodaj je naveden seznam strani, ki so povezane na trenutno stran. EnoBesedne povezave niso zaznane kot povratne povezave.
diff --git a/inc/lang/sl/index.txt b/inc/lang/sl/index.txt
index 81ccd47ad1866a245146ddd160cc3d4a39c9d9f8..dd54d2bed96a9731d0cda0134d0b7d26e0bb83ea 100644
--- a/inc/lang/sl/index.txt
+++ b/inc/lang/sl/index.txt
@@ -1,4 +1,4 @@
 ====== Kazalo ======
 
-Na spodnjem seznamu so izpisane vse wiki strani, ki so na voljo, urejene pa so skladno z [[doku>namespaces|imenskimi prostori]].
+Na spodnjem seznamu so izpisane vse wiki strani, ki so na voljo, razvrščene pa so po posameznih [[doku>namespaces|imenskih prostorih]].
 
diff --git a/inc/lang/sl/install.html b/inc/lang/sl/install.html
new file mode 100644
index 0000000000000000000000000000000000000000..6fb6bead3d9b29d0b8c6c53c598b6de1119950a1
--- /dev/null
+++ b/inc/lang/sl/install.html
@@ -0,0 +1,20 @@
+<p>Stran je namenjena pomoči pri prvi namestitvi in nastavitvi spletišča
+<a href="http://dokuwiki.org">Dokuwiki</a>. Več podrobnosti o tem je mogoče najti na straneh dokumentacije
+<a href="http://dokuwiki.org/installer">namestitve</a>.</p>
+
+<p>Sistem DokuWiki uporablja običajne besedilne datoteke za shranjevanje
+wiki strani in drugih podrobnosti o teh straneh (npr. slike, kazalo, stare
+različice in drugo). Za pravilno delovanje <strong>mora</strong> imeti sistem DokuWiki prost
+dostop do map in datotek, zato je ključno, da so dovoljenja določena pravilno.
+Z namestilnikom ni mogoče spreminjanje dovoljenj map. To je običajno najlažje
+narediti v ukazni lupini ali pa, če spletišče Wiki gostuje na zunanjih
+strežnikih, preko nadzornika FTP povezave (npr. cPanel).</p>
+
+<p>Z namestilnikom lahko spremenite nastavitve dostopa sistema Dokuwiki
+<acronym title="access control list">ACL</acronym>, ki omogoča skrbniško prijavo in dostop do upravljanja z vstavki,
+uporabniki, dovoljenji dostopa uporabnikov do določenih strani in do nekaterih
+nastavitev. Za delovanje sistema ACL ni bistven, vendar pa močno vpliva na
+enostavnost upravljanja strani in nastavitev.</p>
+
+<p>Zahtevnejši uporabniki ali skrbniki s posebnimi zahtevami namestitve sistema
+si lahko več podrobnosti ogledajo na straneh <a href="http://dokuwiki.org/install">navodil namestitve</a> in <a href="http://dokuwiki.org/config">nastavitve</a>.</p>
\ No newline at end of file
diff --git a/inc/lang/sl/lang.php b/inc/lang/sl/lang.php
index ed6b6db817360fe4822ebb9f0094617d444ddc75..0e6c0a706b042c3cb3ae784dcf87219365eff3ed 100644
--- a/inc/lang/sl/lang.php
+++ b/inc/lang/sl/lang.php
@@ -10,7 +10,7 @@
  * @author Matej Urbančič (mateju@svn.gnome.org)
  */
 $lang['encoding']              = 'utf-8';
-$lang['direction']             = 'L-D';
+$lang['direction']             = 'ltr';
 $lang['doublequoteopening']    = '„';
 $lang['doublequoteclosing']    = '“';
 $lang['singlequoteopening']    = '‚';
@@ -53,7 +53,7 @@ $lang['user']                  = 'Uporabniško ime';
 $lang['pass']                  = 'Geslo';
 $lang['newpass']               = 'Novo geslo';
 $lang['oldpass']               = 'Potrdi trenutno geslo';
-$lang['passchk']               = 'znova';
+$lang['passchk']               = 'Ponovi novo geslo';
 $lang['remember']              = 'Zapomni si me';
 $lang['fullname']              = 'Pravo ime';
 $lang['email']                 = 'Elektronski naslov';
@@ -99,7 +99,7 @@ $lang['js']['searchmedia']     = 'Poišči datoteke';
 $lang['js']['keepopen']        = 'Od izbiri ohrani okno odprto';
 $lang['js']['hidedetails']     = 'Skrij podrobnosti';
 $lang['js']['mediatitle']      = 'Nastavitve povezave';
-$lang['js']['mediadisplay']    = 'Vrsta povezaave';
+$lang['js']['mediadisplay']    = 'Vrsta povezave';
 $lang['js']['mediaalign']      = 'Poravnava';
 $lang['js']['mediasize']       = 'Velikost slike';
 $lang['js']['mediatarget']     = 'Mesto povezave';
@@ -119,7 +119,7 @@ $lang['js']['medialeft']       = 'Poravnaj sliko na levo.';
 $lang['js']['mediaright']      = 'Poravnaj sliko na desno.';
 $lang['js']['mediacenter']     = 'Poravnaj sliko na sredini.';
 $lang['js']['medianoalign']    = 'Ne uporabi poravnave.';
-$lang['js']['nosmblinks']      = 'Povezovanje do souporabenih datotek sistema Windows deluje le pri uporabi brskalnika Microsoft Internet Explorer. Povezavo je mogoče kopirati ročno.';
+$lang['js']['nosmblinks']      = 'Povezovanje do souporabnih datotek sistema Windows deluje le pri uporabi brskalnika Microsoft Internet Explorer. Povezavo je mogoče kopirati ročno.';
 $lang['js']['linkwiz']         = 'ÄŒarovnik za povezave';
 $lang['js']['linkto']          = 'Poveži na:';
 $lang['js']['del_confirm']     = 'Ali naj se res izbrišejo izbrani predmeti?';
diff --git a/inc/lang/sl/login.txt b/inc/lang/sl/login.txt
index 297cd53f5ed7b09d0300dff2ae769c0dd72fcbfa..eeae0c96ca936992bbdb61bc7ecb21767cbe4ba4 100644
--- a/inc/lang/sl/login.txt
+++ b/inc/lang/sl/login.txt
@@ -1,3 +1,3 @@
 ====== Prijava ======
 
-Niste prijavljeni! Spodaj vnesite ustrezne podatke in se prijavite. Prijaviti se je mogoče, če so omogočeni piškotki.
+Niste prijavljeni! Spodaj vnesite ustrezne podatke in se prijavite. Prijaviti se je mogoče le, če so omogočeni piškotki.
diff --git a/inc/lang/sl/stopwords.txt b/inc/lang/sl/stopwords.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5d61539e7a3c3c6156d98eeb46433ac621baebd1
--- /dev/null
+++ b/inc/lang/sl/stopwords.txt
@@ -0,0 +1,18 @@
+# To je seznam besed, ki jih ustvarjalnik kazala prezre. Seznam je sestavljen iz
+# besede, ki so zapisane vsaka v svoji vrstici. Datoteka mora biti zapisana s konènim
+# UNIX znakom vrstice. Besede krajše od treh znakov so iz kazala izloèene samodejno
+# zaradi preglednosti. Seznam se s bo s èasom spreminjal in dopolnjeval.
+moja
+moje
+moji
+mojo
+njegovi
+njegove
+njegovo
+njeno
+njeni
+njene
+njihova
+njihove
+njihovi
+njihovo
diff --git a/inc/lang/sl/subscr_single.txt b/inc/lang/sl/subscr_single.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9fd64be0e536052f8a0aceda04b099c2849d544d
--- /dev/null
+++ b/inc/lang/sl/subscr_single.txt
@@ -0,0 +1,22 @@
+Pozdravljeni!
+
+Stran @PAGE@ na spletišču Wiki @TITLE@ je spremenjena.
+Spremenjeno je:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Datum            : @DATE@
+Uporabnik        : @USER@
+Povzetek urejanja: @SUMMARY@
+Stara različica  : @OLDPAGE@
+Nova različica   : @NEWPAGE@
+
+Preklic obveščanja o spremembah strani je mogoče določiti
+na Wiki naslovu @DOKUWIKIURL@ in z obiskom @NEWPAGE@,
+kjer se je mogoče odjaviti od spremljanja strani ali
+imenskega prostora.
+
+--
+Sporočilo je samodejno ustvarjeno na spletišču @DOKUWIKIURL@
\ No newline at end of file
diff --git a/inc/lang/sq/lang.php b/inc/lang/sq/lang.php
index 0213ba28bc0697ce83e10a9ad101585a5116c1e0..47a54d2eaed67b199cf7c9a0f523908a7bfdf86f 100644
--- a/inc/lang/sq/lang.php
+++ b/inc/lang/sq/lang.php
@@ -8,7 +8,7 @@
  * lines starting with @author
  *
  * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesSq.php?view=co
- * @author Leonard Elezi leonard.elezi@depinfo.info
+ * @author Leonard Elezi <leonard.elezi@depinfo.info>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -49,6 +49,7 @@ $lang['btn_draft']             = 'Redakto skicën';
 $lang['btn_recover']           = 'Rekupero skicën';
 $lang['btn_draftdel']          = 'Fshi skicën';
 $lang['btn_revert']            = 'Kthe si më parë';
+$lang['btn_register']          = 'Regjsitrohuni';
 $lang['loggedinas']            = 'Regjistruar si ';
 $lang['user']                  = 'Nofka e përdoruesit:';
 $lang['pass']                  = 'Fjalëkalimi';
@@ -58,7 +59,6 @@ $lang['passchk']               = 'Edhe një herë';
 $lang['remember']              = 'Më mbaj mend';
 $lang['fullname']              = 'Emri i vërtetë';
 $lang['email']                 = 'Adresa e email-it*';
-$lang['register']              = 'Regjsitrohuni';
 $lang['profile']               = 'Profili i përdoruesit';
 $lang['badlogin']              = 'Na vjen keq, emri ose fjalëkalimi është gabim.';
 $lang['minoredit']             = 'Ndryshime të Vogla';
diff --git a/inc/lang/sr/lang.php b/inc/lang/sr/lang.php
index 71dde4062823f185807f87fff1f250fb2865cf9d..b35956f03326987a96b177b37eef3bbe80629b40 100644
--- a/inc/lang/sr/lang.php
+++ b/inc/lang/sr/lang.php
@@ -4,8 +4,7 @@
  *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Filip Brcic <brcha@users.sourceforge.net>
- * @author Иван Петровић petrovicivan@ubuntusrbija.org
- * @author Ivan Petrovic <petrovicivan@ubuntusrbija.org>
+ * @author Иван Петровић (Ivan Petrovic) <petrovicivan@ubuntusrbija.org>
  * @author Miroslav Å olti <solti.miroslav@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
@@ -47,6 +46,7 @@ $lang['btn_draft']             = 'Измени нацрт';
 $lang['btn_recover']           = 'Опорави нацрт';
 $lang['btn_draftdel']          = 'Обриши нацрт';
 $lang['btn_revert']            = 'Врати на пређашњу верзију';
+$lang['btn_register']          = 'Региструј се';
 $lang['loggedinas']            = 'Пријављен као';
 $lang['user']                  = 'Корисничко име';
 $lang['pass']                  = 'Лозинка';
@@ -56,7 +56,6 @@ $lang['passchk']               = 'поново';
 $lang['remember']              = 'Запамти ме';
 $lang['fullname']              = 'Име и презиме';
 $lang['email']                 = 'Е-адреса';
-$lang['register']              = 'Региструј се';
 $lang['profile']               = 'Кориснички профил';
 $lang['badlogin']              = 'Извините, није добро корисничко име или шифра.';
 $lang['minoredit']             = 'Мала измена';
diff --git a/inc/lang/sv/lang.php b/inc/lang/sv/lang.php
index 09dec8edd5d6e19a5aa50b857d3679149306ae6b..801e2d879b69b9b4e493d3da3c51f1cf23fc786b 100644
--- a/inc/lang/sv/lang.php
+++ b/inc/lang/sv/lang.php
@@ -7,15 +7,15 @@
  * @author Per Foreby <per@foreby.se>
  * @author Nicklas Henriksson <nicklas[at]nihe.se>
  * @author HÃ¥kan Sandell <hakan.sandell[at]mydata.se>
+ * @author HÃ¥kan Sandell <hakan.sandell@home.se>
  * @author Dennis Karlsson
  * @author Tormod Otter Johansson <tormod@latast.se>
+ * @author Tormod Johansson <tormod.otter.johansson@gmail.com>
  * @author emil@sys.nu
  * @author Pontus Bergendahl <pontus.bergendahl@gmail.com>
- * @author Tormod Johansson tormod.otter.johansson@gmail.com
  * @author Emil Lind <emil@sys.nu>
  * @author Bogge Bogge <bogge@bogge.com>
  * @author Peter Åström <eaustreum@gmail.com>
- * @author HÃ¥kan Sandell <hakan.sandell@home.se>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -49,10 +49,6 @@ $lang['btn_back']              = 'Tillbaka';
 $lang['btn_backlink']          = 'Tillbakalänkar';
 $lang['btn_backtomedia']       = 'Tillbaka till val av Mediafil';
 $lang['btn_subscribe']         = 'Prenumerera på ändringar';
-$lang['btn_unsubscribe']       = 'Säg upp prenumeration på ändringar';
-$lang['btn_subscribens']       = 'Prenumerera på namnrymdsändringar';
-$lang['btn_unsubscribens']     = 'Sluta prenumerera på namnrymdsändringar
-';
 $lang['btn_profile']           = 'Uppdatera profil';
 $lang['btn_reset']             = 'Återställ';
 $lang['btn_resendpwd']         = 'Skicka nytt lösenord';
@@ -60,6 +56,7 @@ $lang['btn_draft']             = 'Redigera utkast';
 $lang['btn_recover']           = 'Ã…terskapa utkast';
 $lang['btn_draftdel']          = 'Radera utkast';
 $lang['btn_revert']            = 'Återställ';
+$lang['btn_register']          = 'Registrera';
 $lang['loggedinas']            = 'Inloggad som';
 $lang['user']                  = 'Användarnamn';
 $lang['pass']                  = 'Lösenord';
@@ -69,7 +66,6 @@ $lang['passchk']               = 'en gång till';
 $lang['remember']              = 'Kom ihåg mig';
 $lang['fullname']              = 'Namn';
 $lang['email']                 = 'E-post';
-$lang['register']              = 'Registrera';
 $lang['profile']               = 'Användarprofil';
 $lang['badlogin']              = 'Felaktigt användarnamn eller lösenord.';
 $lang['minoredit']             = 'Små ändringar';
@@ -106,7 +102,35 @@ $lang['txt_overwrt']           = 'Skriv över befintlig fil';
 $lang['lockedby']              = 'LÃ¥st av';
 $lang['lockexpire']            = 'Lås upphör att gälla';
 $lang['willexpire']            = 'Ditt redigeringslås för detta dokument kommer snart att upphöra.\nFör att undvika versionskonflikter bör du förhandsgranska ditt dokument för att förlänga redigeringslåset.';
-$lang['js']['notsavedyet']     = "Det finns ändringar som inte är sparade.\nÄr du säker på att du vill fortsätta?";
+$lang['js']['notsavedyet']     = 'Det finns ändringar som inte är sparade.
+Är du säker på att du vill fortsätta?';
+$lang['js']['searchmedia']     = 'Sök efter filer';
+$lang['js']['keepopen']        = 'Lämna fönstret öppet efter val av fil';
+$lang['js']['hidedetails']     = 'Dölj detaljer';
+$lang['js']['mediatitle']      = 'Länkinställningar';
+$lang['js']['mediadisplay']    = 'Länktyp';
+$lang['js']['mediaalign']      = 'Justering';
+$lang['js']['mediasize']       = 'Bildstorlek';
+$lang['js']['mediatarget']     = 'Länköppning';
+$lang['js']['mediaclose']      = 'Stäng';
+$lang['js']['mediadisplayimg'] = 'Visa bilden.';
+$lang['js']['mediadisplaylnk'] = 'Visa endast länken.';
+$lang['js']['mediasmall']      = 'Liten storlek';
+$lang['js']['mediamedium']     = 'Mellanstor storlek';
+$lang['js']['medialarge']      = 'Stor storlek';
+$lang['js']['mediaoriginal']   = 'Originalstorlek';
+$lang['js']['mediadirect']     = 'Direktlänk till originalet';
+$lang['js']['medianolnk']      = 'Ingen länk';
+$lang['js']['medianolink']     = 'Länka inte bilden';
+$lang['js']['medialeft']       = 'Justera bilden till vänster.';
+$lang['js']['mediaright']      = 'Justera bilden till höger.';
+$lang['js']['mediacenter']     = 'Centrera bilden.';
+$lang['js']['nosmblinks']      = 'Länkning till Windowsresurser fungerar bara med Microsofts Internet Explorer.
+Du kan fortfarande klippa och klistra in länken om du använder en annan webbläsare än MSIE.';
+$lang['js']['linkwiz']         = 'Snabbguide Länkar';
+$lang['js']['linkto']          = 'Länk till:';
+$lang['js']['del_confirm']     = 'Vill du verkligen radera?';
+$lang['js']['mu_btn']          = 'Ladda upp flera filer samtidigt';
 $lang['rssfailed']             = 'Ett fel uppstod när detta RSS-flöde skulle hämtas: ';
 $lang['nothingfound']          = 'Inga filer hittades.';
 $lang['mediaselect']           = 'Mediafiler';
@@ -124,15 +148,7 @@ $lang['deletefail']            = 'Kunde inte radera "%s" - kontrollera filskydd.
 $lang['mediainuse']            = 'Filen "%s" har inte raderats - den används fortfarande.';
 $lang['namespaces']            = 'Namnrymder';
 $lang['mediafiles']            = 'Tillgängliga filer i';
-$lang['js']['searchmedia']     = 'Sök efter filer';
-$lang['js']['keepopen']        = 'Lämna fönstret öppet efter val av fil';
-$lang['js']['hidedetails']     = 'Dölj detaljer';
-$lang['js']['nosmblinks']      = 'Länkning till Windowsresurser fungerar bara med Microsofts Internet Explorer.
-Du kan fortfarande klippa och klistra in länken om du använder en annan webbläsare än MSIE.';
-$lang['js']['linkwiz']         = 'Snabbguide Länkar';
-$lang['js']['linkto']          = 'Länk till:';
-$lang['js']['del_confirm']     = 'Vill du verkligen radera?';
-$lang['js']['mu_btn']          = 'Ladda upp flera filer samtidigt';
+$lang['accessdenied']          = 'Du får inte läsa den här sidan.';
 $lang['mediausage']            = 'Använd följande syntax för att referera till denna fil:';
 $lang['mediaview']             = 'Visa originalfilen';
 $lang['mediaroot']             = 'rot';
@@ -148,6 +164,9 @@ $lang['current']               = 'aktuell';
 $lang['yours']                 = 'Din version';
 $lang['diff']                  = 'visa skillnader mot aktuell version';
 $lang['diff2']                 = 'Visa skillnader mellan valda versioner';
+$lang['difflink']              = 'Länk till den här jämförelsesidan';
+$lang['diff_type']             = 'Visa skillnader:';
+$lang['diff_side']             = 'Sida vid sida';
 $lang['line']                  = 'Rad';
 $lang['breadcrumb']            = 'Spår';
 $lang['youarehere']            = 'Här är du';
@@ -204,11 +223,12 @@ $lang['img_copyr']             = 'Copyright';
 $lang['img_format']            = 'Format';
 $lang['img_camera']            = 'Kamera';
 $lang['img_keywords']          = 'Nyckelord';
-$lang['subscribe_success']     = 'Lade till %s i prenumerationslistan för %s';
-$lang['subscribe_error']       = 'Fel vid tillägg av %s i prenumerationslistan för %s';
-$lang['subscribe_noaddress']   = 'Det finns ingen adress knuten till ditt konto, det går inte att lägga till dig i prenumerationslistan';
-$lang['unsubscribe_success']   = 'Tog bort %s från prenumerationslistan för %s';
-$lang['unsubscribe_error']     = 'Fel vid borttagning %s från prenumerationslistan list för %s';
+$lang['subscr_m_new_header']   = 'Lägg till prenumeration';
+$lang['subscr_m_current_header'] = 'Nuvarande prenumerationer';
+$lang['subscr_m_unsubscribe']  = 'Prenumerera';
+$lang['subscr_m_subscribe']    = 'Avsluta prenumeration';
+$lang['subscr_m_receive']      = 'Ta emot';
+$lang['subscr_style_every']    = 'skicka epost vid varje ändring';
 $lang['authmodfailed']         = 'Felaktiga inställningar för användarautentisering. Var vänlig meddela wikiadministratören.';
 $lang['authtempfail']          = 'Tillfälligt fel på användarautentisering. Om felet kvarstår, var vänlig meddela wikiadministratören.';
 $lang['i_chooselang']          = 'Välj språk';
@@ -259,3 +279,4 @@ $lang['days']                  = '%d dagar sedan';
 $lang['hours']                 = '%d timmar sedan';
 $lang['minutes']               = '%d minuter sedan';
 $lang['seconds']               = '%d sekunder sedan';
+$lang['wordblock']             = 'Din ändring sparades inte för att den innehåller otillåten text (spam).';
diff --git a/inc/lang/th/lang.php b/inc/lang/th/lang.php
index ea27793b8f02ba7deeb4d9728a0c01b9a9881246..d40f30f4abae27c4dbbf181b9380dce860e112a4 100644
--- a/inc/lang/th/lang.php
+++ b/inc/lang/th/lang.php
@@ -9,7 +9,6 @@
  *
  * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesTh.php?view=co
  * @author Komgrit Niyomrath <n.komgrit@gmail.com>
- * @author Kittithat Arnontavilas mrtomyum@gmail.com
  * @author Arthit Suriyawongkul <arthit@gmail.com>
  * @author Kittithat Arnontavilas <mrtomyum@gmail.com>
  * @author Thanasak Sompaisansin <jombthep@gmail.com>
@@ -56,6 +55,7 @@ $lang['btn_draft']             = 'แก้ไขเอกสารฉบับ
 $lang['btn_recover']           = 'กู้คืนเอกสารฉบับร่าง';
 $lang['btn_draftdel']          = 'ลบเอกสารฉบับร่าง';
 $lang['btn_revert']            = 'กู้คืน';
+$lang['btn_register']          = 'สร้างบัญชีผู้ใช้';
 $lang['loggedinas']            = 'ลงชื่อเข้าใช้เป็น';
 $lang['user']                  = 'ชื่อผู้ใช้:';
 $lang['pass']                  = 'รหัสผ่าน';
@@ -65,7 +65,6 @@ $lang['passchk']               = 'พิมพ์รหัสผ่านอี
 $lang['remember']              = 'จำชื่อและรหัสผ่าน';
 $lang['fullname']              = 'ชื่อจริง:';
 $lang['email']                 = 'อีเมล:';
-$lang['register']              = 'สร้างบัญชีผู้ใช้';
 $lang['profile']               = 'ข้อมูลส่วนตัวผู้ใช้';
 $lang['badlogin']              = 'ขัดข้อง:';
 $lang['minoredit']             = 'เป็นการแก้ไขเล็กน้อย';
diff --git a/inc/lang/tr/lang.php b/inc/lang/tr/lang.php
index 0c8c1ff3fe64fb565fed132ed0391c34838b4584..0509113b0f934e6552de17111624aca105c27707 100644
--- a/inc/lang/tr/lang.php
+++ b/inc/lang/tr/lang.php
@@ -48,6 +48,7 @@ $lang['btn_draft']             = 'Taslağı düzenle';
 $lang['btn_recover']           = 'Taslağı geri yükle';
 $lang['btn_draftdel']          = 'Taslağı sil';
 $lang['btn_revert']            = 'Geri Yükle';
+$lang['btn_register']          = 'Kayıt ol';
 $lang['loggedinas']            = 'GiriÅŸ ismi';
 $lang['user']                  = 'Kullanıcı ismi';
 $lang['pass']                  = 'Parola';
@@ -57,7 +58,6 @@ $lang['passchk']               = 'Bir kez daha girin';
 $lang['remember']              = 'Beni hatırla';
 $lang['fullname']              = 'Tam isim';
 $lang['email']                 = 'E-posta';
-$lang['register']              = 'Kayıt ol';
 $lang['profile']               = 'Kullanıcı Bilgileri';
 $lang['badlogin']              = 'Üzgünüz, Kullanıcı adı veya şifre yanlış oldu.';
 $lang['minoredit']             = 'Küçük Değişiklikler';
diff --git a/inc/lang/uk/lang.php b/inc/lang/uk/lang.php
index d3d5d7acff44a8bbdee5511906883b7b95aa071f..e5f14879f84fdd69012f27a17775d6f2f60c3961 100644
--- a/inc/lang/uk/lang.php
+++ b/inc/lang/uk/lang.php
@@ -5,10 +5,9 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Oleksiy Voronin <ovoronin@gmail.com>
  * @author serg_stetsuk@ukr.net
- * @author okunia@gmail.com
  * @author Oleksandr Kunytsia <okunia@gmail.com>
- * @author Uko uko@uar.net
- * @author Ulrikhe Lukoie  <lukoie@gmail>.com
+ * @author Uko <uko@uar.net>
+ * @author Ulrikhe Lukoie  <lukoie@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -49,6 +48,7 @@ $lang['btn_draft']             = 'Редагувати чернетку';
 $lang['btn_recover']           = 'Відновити чернетку';
 $lang['btn_draftdel']          = 'Знищити чернетку';
 $lang['btn_revert']            = 'Відновити';
+$lang['btn_register']          = 'Реєстрація';
 $lang['loggedinas']            = 'Ви';
 $lang['user']                  = 'Користувач';
 $lang['pass']                  = 'Пароль';
@@ -58,7 +58,6 @@ $lang['passchk']               = 'ще раз';
 $lang['remember']              = 'Запам\'ятати мене';
 $lang['fullname']              = 'Повне ім\'я';
 $lang['email']                 = 'E-Mail';
-$lang['register']              = 'Реєстрація';
 $lang['profile']               = 'Профіль користувача';
 $lang['badlogin']              = 'Вибачте, невірне ім\'я чи пароль.';
 $lang['minoredit']             = 'Незначні зміни';
diff --git a/inc/lang/vi/lang.php b/inc/lang/vi/lang.php
index 750433910208625dd3e872d7da46711d5da88a7d..89c9e9cfcb1a56132a9ab7bae2b814efc1f44f10 100644
--- a/inc/lang/vi/lang.php
+++ b/inc/lang/vi/lang.php
@@ -27,6 +27,7 @@ $lang['btn_logout'] = 'Thoát';
 $lang['btn_admin']  = 'Quản lý';
 $lang['btn_update'] = 'Cập nhật';
 $lang['btn_delete'] = 'Xoá';
+$lang['btn_register'] = 'Đăng ký';
 
 $lang['loggedinas'] = 'Username đang dùng';
 $lang['user']       = 'Username';
@@ -34,7 +35,6 @@ $lang['pass']       = 'Password';
 $lang['remember']   = 'Lưu username/password lại';
 $lang['fullname']   = 'Họ và tên';
 $lang['email']      = 'E-Mail';
-$lang['register']   = 'Đăng ký';
 $lang['badlogin']   = 'Username hoặc password không đúng.';
 
 $lang['regmissing'] = 'Bạn cần điền vào tất cả các trường';
diff --git a/inc/lang/zh-tw/lang.php b/inc/lang/zh-tw/lang.php
index 62996ea8a13188fe3d75a03d000fe9700f17df13..074c510e9061adb15a87621183b06720acf6b688 100644
--- a/inc/lang/zh-tw/lang.php
+++ b/inc/lang/zh-tw/lang.php
@@ -7,9 +7,9 @@
  * @author Li-Jiun Huang <ljhuang.tw@gmail.com>
  * @author http://www.chinese-tools.com/tools/converter-simptrad.html
  * @author Wayne San <waynesan@zerozone.tw>
- * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
  * @author Cheng-Wei Chien <e.cwchien@gmail.com>
  * @author Danny Lin
+ * @author Shuo-Ting Jian <shoting@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -50,6 +50,7 @@ $lang['btn_draft']             = '編輯草稿';
 $lang['btn_recover']           = '復原草稿';
 $lang['btn_draftdel']          = '捨棄草稿';
 $lang['btn_revert']            = '復原';
+$lang['btn_register']          = '註冊';
 $lang['loggedinas']            = '登入為';
 $lang['user']                  = '帳號';
 $lang['pass']                  = '密碼';
@@ -59,7 +60,6 @@ $lang['passchk']               = '確認密碼';
 $lang['remember']              = '記住帳號密碼';
 $lang['fullname']              = '真實姓名';
 $lang['email']                 = 'E-Mail';
-$lang['register']              = '註冊';
 $lang['profile']               = '使用者個人資料';
 $lang['badlogin']              = '很抱歉,您的使用者名稱或密碼可能有錯誤';
 $lang['minoredit']             = '小修改';
@@ -161,6 +161,9 @@ $lang['yours']                 = '您的版本';
 $lang['diff']                  = '顯示與目前版本的差異';
 $lang['diff2']                 = '顯示選擇版本間的差異';
 $lang['difflink']              = '連向這個比對檢視';
+$lang['diff_type']             = '檢視差異:';
+$lang['diff_inline']           = '行內';
+$lang['diff_side']             = '並排';
 $lang['line']                  = '行';
 $lang['breadcrumb']            = '足跡';
 $lang['youarehere']            = '您在這裡';
diff --git a/inc/lang/zh/lang.php b/inc/lang/zh/lang.php
index f819aff9aa5174fc9d16948cd2f8a07271ab9965..ea677ac2ead8cd03204c6a9d16f54b13c36cdf2c 100644
--- a/inc/lang/zh/lang.php
+++ b/inc/lang/zh/lang.php
@@ -5,12 +5,13 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author ZDYX <zhangduyixiong@gmail.com>
  * @author http://www.chinese-tools.com/tools/converter-tradsimp.html
- * @author George Sheraton guxd@163.com
+ * @author George Sheraton <guxd@163.com>
  * @author Simon zhan <simonzhan@21cn.com>
  * @author mr.jinyi@gmail.com
  * @author ben <ben@livetom.com>
  * @author lainme <lainme993@gmail.com>
  * @author caii <zhoucaiqi@gmail.com>
+ * @author Hiphen Lee <jacob.b.leung@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -51,6 +52,7 @@ $lang['btn_draft']             = '编辑草稿';
 $lang['btn_recover']           = '恢复草稿';
 $lang['btn_draftdel']          = '删除草稿';
 $lang['btn_revert']            = '恢复';
+$lang['btn_register']          = '注册';
 $lang['loggedinas']            = '登录为';
 $lang['user']                  = '用户名';
 $lang['pass']                  = '密码';
@@ -60,7 +62,6 @@ $lang['passchk']               = '请再输一次';
 $lang['remember']              = '记住我';
 $lang['fullname']              = '全名';
 $lang['email']                 = 'E-Mail';
-$lang['register']              = '注册';
 $lang['profile']               = '用户信息';
 $lang['badlogin']              = '对不起,用户名或密码错误。';
 $lang['minoredit']             = '细微修改';
@@ -163,6 +164,7 @@ $lang['yours']                 = '您的版本';
 $lang['diff']                  = '显示与当前版本的差别';
 $lang['diff2']                 = '显示跟目前版本的差异';
 $lang['difflink']              = '到此差别页面的链接';
+$lang['diff_type']             = '查看差异:';
 $lang['line']                  = '行';
 $lang['breadcrumb']            = '您的足迹';
 $lang['youarehere']            = '您在这里';
diff --git a/inc/mail.php b/inc/mail.php
index aa9d195d13f233cab3e5f15392ed6a7f9b4ecbc0..bd6c0db6a507f1f461555d553e1b6b5d4cca359c 100644
--- a/inc/mail.php
+++ b/inc/mail.php
@@ -11,7 +11,6 @@ if(!defined('DOKU_INC')) die('meh.');
 // end of line for mail lines - RFC822 says CRLF but postfix (and other MTAs?)
 // think different
 if(!defined('MAILHEADER_EOL')) define('MAILHEADER_EOL',"\n");
-if(!defined('QUOTEDPRINTABLE_EOL')) define('QUOTEDPRINTABLE_EOL',"\015\012");
 #define('MAILHEADER_ASCIIONLY',1);
 
 /**
@@ -113,9 +112,16 @@ function _mail_send_action($data) {
     }
 
     if(!utf8_isASCII($subject)) {
-        $subject = '=?UTF-8?Q?'.mail_quotedprintable_encode($subject,0).'?=';
+        $enc_subj = '=?UTF-8?Q?'.mail_quotedprintable_encode($subject,0).'?=';
         // Spaces must be encoded according to rfc2047. Use the "_" shorthand
-        $subject = preg_replace('/ /', '_', $subject);
+        $enc_sub = preg_replace('/ /', '_', $enc_sub);
+
+        // quoted printable has length restriction, use base64 if needed
+        if(strlen($subject) > 74){
+            $enc_subj = '=?UTF-8?B?'.base64_encode($subject).'?=';
+        }
+
+        $subject = $enc_subj;
     }
 
     $header  = '';
@@ -197,7 +203,16 @@ function mail_encode_address($string,$header='',$names=true){
             }
 
             if(!utf8_isASCII($text)){
-                $text = '=?UTF-8?Q?'.mail_quotedprintable_encode($text,0).'?=';
+                // put the quotes outside as in =?UTF-8?Q?"Elan Ruusam=C3=A4e"?= vs "=?UTF-8?Q?Elan Ruusam=C3=A4e?="
+                if (preg_match('/^"(.+)"$/', $text, $matches)) {
+                  $text = '"=?UTF-8?Q?'.mail_quotedprintable_encode($matches[1], 0).'?="';
+                } else {
+                  $text = '=?UTF-8?Q?'.mail_quotedprintable_encode($text, 0).'?=';
+                }
+                // additionally the space character should be encoded as =20 (or each
+                // word QP encoded separately).
+                // however this is needed only in mail headers, not globally in mail_quotedprintable_encode().
+                $text = str_replace(" ", "=20", $text);
             }
         }else{
             $text = '';
@@ -290,11 +305,11 @@ function mail_quotedprintable_encode($sText,$maxlen=74,$bEmulate_imap_8bit=true)
         // but this wouldn't be caught by such an easy RegExp
         if($maxlen){
             preg_match_all( '/.{1,'.($maxlen - 2).'}([^=]{0,2})?/', $sLine, $aMatch );
-            $sLine = implode( '=' . QUOTEDPRINTABLE_EOL, $aMatch[0] ); // add soft crlf's
+            $sLine = implode( '=' . MAILHEADER_EOL, $aMatch[0] ); // add soft crlf's
         }
     }
 
     // join lines into text
-    return implode(QUOTEDPRINTABLE_EOL,$aLines);
+    return implode(MAILHEADER_EOL,$aLines);
 }
 
diff --git a/inc/parser/handler.php b/inc/parser/handler.php
index 26a560c3c71742b30d768f5cfe6514deb8f3045d..22a50d1b78680132446c8929e45064ca6f929d28 100644
--- a/inc/parser/handler.php
+++ b/inc/parser/handler.php
@@ -1489,10 +1489,10 @@ class Doku_Handler_Block {
         }
     }
 
-    function openParagraph($pos){
+    function openParagraph($pos){
         if ($this->inParagraph) return;
         $this->calls[] = array('p_open',array(), $pos);
-        $this->inParagraph = true;
+        $this->inParagraph = true;
         $this->skipEol = true;
     }
 
@@ -1503,7 +1503,7 @@ class Doku_Handler_Block {
      *
      * @author Andreas Gohr <andi@splitbrain.org>
      */
-    function closeParagraph($pos){
+    function closeParagraph($pos){
         if (!$this->inParagraph) return;
         // look back if there was any content - we don't want empty paragraphs
         $content = '';
@@ -1521,14 +1521,14 @@ class Doku_Handler_Block {
         if(trim($content)==''){
             //remove the whole paragraph
             array_splice($this->calls,$i);
-        }else{
-            // remove ending linebreaks in the paragraph
-            $i=count($this->calls)-1;
+        }else{
+            // remove ending linebreaks in the paragraph
+            $i=count($this->calls)-1;
             if ($this->calls[$i][0] == 'cdata') $this->calls[$i][1][0] = rtrim($this->calls[$i][1][0],DOKU_PARSER_EOL);
             $this->calls[] = array('p_close',array(), $pos);
         }
 
-        $this->inParagraph = false;
+        $this->inParagraph = false;
         $this->skipEol = true;
     }
     
@@ -1553,7 +1553,7 @@ class Doku_Handler_Block {
      * @author Andreas Gohr <andi@splitbrain.org>
      */
     function process($calls) {
-        // open first paragraph
+        // open first paragraph
         $this->openParagraph(0);
         foreach ( $calls as $key => $call ) {
             $cname = $call[0];
diff --git a/inc/parser/metadata.php b/inc/parser/metadata.php
index bd396e2b442716813961e7e1477fe6106cc1eb71..fc2c8cbc5e9fd34633a4ce5d25359be31b03204c 100644
--- a/inc/parser/metadata.php
+++ b/inc/parser/metadata.php
@@ -455,16 +455,16 @@ class Doku_Renderer_metadata extends Doku_Renderer {
     global $conf;
 
     $isImage = false;
-    if (is_array($title)){
-      if($title['title']) return '['.$title['title'].']';
-    } else if (is_null($title) || trim($title)==''){
+    if (is_null($title)){
       if (useHeading('content') && $id){
         $heading = p_get_first_heading($id,false);
         if ($heading) return $heading;
       }
       return $default;
-    } else {
+    } else if (is_string($title)){
       return $title;
+    } else if (is_array($title)){
+      if($title['title']) return '['.$title['title'].']';
     }
   }
 
diff --git a/inc/parser/parser.php b/inc/parser/parser.php
index a7764ee9c35ff900a97d9372a681785403b99da9..e47ce56fa3dab93de895c3404bd6a7f940d6a03d 100644
--- a/inc/parser/parser.php
+++ b/inc/parser/parser.php
@@ -828,7 +828,7 @@ class Doku_Parser_Mode_internallink extends Doku_Parser_Mode {
 
     function connectTo($mode) {
         // Word boundaries?
-        $this->Lexer->addSpecialPattern("\[\[(?:(?:.*?\[.*?\])|.+?)\]\]",$mode,'internallink');
+        $this->Lexer->addSpecialPattern("\[\[(?:(?:[^[\]]*?\[.*?\])|.+?)\]\]",$mode,'internallink');
     }
 
     function getSort() {
diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php
index b502b4f6be7044b8ef8dc7e789ca175023f73ad7..9405d94208967f35b4bdcdbb97eefc70e22b9870 100644
--- a/inc/parser/xhtml.php
+++ b/inc/parser/xhtml.php
@@ -29,7 +29,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
     var $doc = '';        // will contain the whole document
     var $toc = array();   // will contain the Table of Contents
 
-    var $sectionedits = array(); // A stack of section edit data
+    private $sectionedits = array(); // A stack of section edit data
 
     var $headers = array();
     var $footnotes = array();
diff --git a/inc/plugin.php b/inc/plugin.php
index 628ae39b03a9b88a4eed369f0be545882a810971..ec94433b65801e23f9b2d6a2bbb2411ad7258456 100644
--- a/inc/plugin.php
+++ b/inc/plugin.php
@@ -33,7 +33,15 @@ class DokuWiki_Plugin {
         $parts = explode('_',get_class($this));
         $info  = DOKU_PLUGIN.'/'.$parts[2].'/plugin.info.txt';
         if(@file_exists($info)) return confToHash($info);
-        trigger_error('getInfo() not implemented in '.get_class($this).' and '.$info.' not found', E_USER_WARNING);
+
+        msg('getInfo() not implemented in '.get_class($this).
+               ' and '.$info.' not found.<br />This is a bug in the '.
+               $parts[2].' plugin and should be reported to the '.
+               'plugin author.',-1);
+        return array(
+            'date'   => '0000-00-00',
+            'name'   => $parts[2].' plugin',
+        );
     }
 
     // plugin introspection methods
diff --git a/inc/plugincontroller.class.php b/inc/plugincontroller.class.php
index 6e361e172a7d3751efd5166a52098c36a6d43a04..cec5c73a94bbb0897553562c5bd39950129f6720 100644
--- a/inc/plugincontroller.class.php
+++ b/inc/plugincontroller.class.php
@@ -96,7 +96,15 @@ class Doku_Plugin_Controller {
 
         //construct class and instantiate
         $class = $type.'_plugin_'.$name;
-        if (!class_exists($class)) return null;
+        if (!class_exists($class)){
+            # the plugin might be in the wrong directory
+            $inf = confToHash(DOKU_PLUGIN."$dir/plugin.info.txt");
+            if($inf['base'] && $inf['base'] != $plugin){
+                msg("Plugin installed incorrectly. Rename plugin directory '".
+                    hsc($plugin)."' to '".hsc($inf['base'])."'.",-1);
+            }
+            return null;
+        }
 
         $DOKU_PLUGINS[$type][$name] = new $class;
         return $DOKU_PLUGINS[$type][$name];
diff --git a/inc/template.php b/inc/template.php
index 7ac3437fb7ad5944c2e5b7b63c3c0a601d1d919b..0f0fb92a0d3487f0b8d816b9fa0ba8fb3ab9d2a5 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -93,7 +93,7 @@ function tpl_content_core(){
             break;
         case 'index':
             html_index($IDX); #FIXME can this be pulled from globals? is it sanitized correctly?
-                break;
+            break;
         case 'backlink':
             html_backlinks();
             break;
@@ -209,14 +209,9 @@ function tpl_admin(){
     }
 
     if ($plugin !== null){
-        if($plugin->forAdminOnly() && !$INFO['isadmin']){
-            msg('For admins only',-1);
-            html_admin();
-        }else{
-            if(!is_array($TOC)) $TOC = $plugin->getTOC(); //if TOC wasn't requested yet
-            if($INFO['prependTOC']) tpl_toc();
-            $plugin->html();
-        }
+        if(!is_array($TOC)) $TOC = $plugin->getTOC(); //if TOC wasn't requested yet
+        if($INFO['prependTOC']) tpl_toc();
+        $plugin->html();
     }else{
         html_admin();
     }
@@ -581,18 +576,25 @@ function tpl_get_action($type) {
             $accesskey = 'b';
             break;
         case 'login':
-            if(!$conf['useacl'] || !$auth){
-                return false;
-            }
             $params['sectok'] = getSecurityToken();
             if(isset($_SERVER['REMOTE_USER'])){
-                if (!$auth->canDo('logout')) {
+                if (!actionOK('logout')) {
                     return false;
                 }
                 $params['do'] = 'logout';
                 $type = 'logout';
             }
             break;
+        case 'register':
+            if($_SERVER['REMOTE_USER']){
+                return false;
+            }
+            break;
+        case 'resendpwd':
+            if($_SERVER['REMOTE_USER']){
+                return false;
+            }
+            break;
         case 'admin':
             if(!$INFO['ismanager']){
                 return false;
@@ -609,20 +611,19 @@ function tpl_get_action($type) {
             $type = 'subscribe';
             $params['do'] = 'subscribe';
         case 'subscribe':
-            if(!$conf['useacl'] || !$auth  || !$conf['subscribers'] || !$_SERVER['REMOTE_USER']){
+            if(!$_SERVER['REMOTE_USER']){
                 return false;
             }
             break;
         case 'backlink':
             break;
         case 'profile':
-            if(!$conf['useacl'] || !$auth || !isset($_SERVER['REMOTE_USER']) ||
-                    !$auth->canDo('Profile')){
+            if(!isset($_SERVER['REMOTE_USER'])){
                 return false;
             }
             break;
         case 'subscribens':
-            // Superseeded by subscribe/subscription
+            // Superseded by subscribe/subscription
             return '';
             break;
         default:
diff --git a/lib/_fla/.htaccess b/lib/_fla/.htaccess
index 9a7d38c121dabd8256a70cda5cc6f2604ab9039a..055d099c772b155fa0749e628b58e7f49b649c30 100644
--- a/lib/_fla/.htaccess
+++ b/lib/_fla/.htaccess
@@ -1,3 +1,4 @@
 ## no access to the fla directory
 order allow,deny
 deny from all
+Satisfy All
diff --git a/lib/exe/ajax.php b/lib/exe/ajax.php
index 1939a7bcb166577fe9c1b6c5192e7a55eb472315..7d594dc046ca923574a1decc19b3c2d8c93b7967 100644
--- a/lib/exe/ajax.php
+++ b/lib/exe/ajax.php
@@ -238,7 +238,7 @@ function ajax_linkwiz(){
     global $conf;
     global $lang;
 
-    $q  = ltrim($_POST['q'],':');
+    $q  = ltrim(trim($_POST['q']),':');
     $id = noNS($q);
     $ns = getNS($q);
 
diff --git a/lib/exe/css.php b/lib/exe/css.php
index 4db81de0b4835cddc60c2f8b03c56d4ff96b48eb..03f900034c1dab877bca5a344395b0320f61aa99 100644
--- a/lib/exe/css.php
+++ b/lib/exe/css.php
@@ -30,10 +30,10 @@ function css_out(){
     global $lang;
     global $config_cascade;
 
-    $style = '';
+    $mediatype = 'screen';
     if (isset($_REQUEST['s']) &&
         in_array($_REQUEST['s'], array('all', 'print', 'feed'))) {
-        $style = $_REQUEST['s'];
+        $mediatype = $_REQUEST['s'];
     }
 
     $tpl = trim(preg_replace('/[^\w-]+/','',$_REQUEST['t']));
@@ -46,7 +46,7 @@ function css_out(){
     }
 
     // The generated script depends on some dynamic options
-    $cache = getCacheName('styles'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'].DOKU_BASE.$tplinc.$style,'.css');
+    $cache = getCacheName('styles'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'].DOKU_BASE.$tplinc.$mediatype,'.css');
 
     // load template styles
     $tplstyles = array();
@@ -60,27 +60,29 @@ function css_out(){
     // Array of needed files and their web locations, the latter ones
     // are needed to fix relative paths in the stylesheets
     $files   = array();
-    //if (isset($tplstyles['all'])) $files = array_merge($files, $tplstyles['all']);
-    if(!empty($style)){
-        $files[DOKU_INC.'lib/styles/'.$style.'.css'] = DOKU_BASE.'lib/styles/';
-        // load plugin, template, user styles
-        $files = array_merge($files, css_pluginstyles($style));
-        if (isset($tplstyles[$style])) $files = array_merge($files, $tplstyles[$style]);
-
-        if(isset($config_cascade['userstyle'][$style])){
-            $files[$config_cascade['userstyle'][$style]] = DOKU_BASE;
-        }
-    }else{
-        $files[DOKU_INC.'lib/styles/style.css'] = DOKU_BASE.'lib/styles/';
-        // load plugin, template, user styles
-        $files = array_merge($files, css_pluginstyles('screen'));
-        if (isset($tplstyles['screen'])) $files = array_merge($files, $tplstyles['screen']);
+    // load core styles
+    $files[DOKU_INC.'lib/styles/'.$mediatype.'.css'] = DOKU_BASE.'lib/styles/';
+    // load plugin styles
+    $files = array_merge($files, css_pluginstyles($mediatype));
+    // load template styles
+    if (isset($tplstyles[$mediatype])) {
+        $files = array_merge($files, $tplstyles[$mediatype]);
+    }
+    // if old 'default' userstyle setting exists, make it 'screen' userstyle for backwards compatibility
+    if (isset($config_cascade['userstyle']['default'])) {
+        $config_cascade['userstyle']['screen'] = $config_cascade['userstyle']['default'];
+    }
+    // load user styles
+    if(isset($config_cascade['userstyle'][$mediatype])){
+        $files[$config_cascade['userstyle'][$mediatype]] = DOKU_BASE;
+    }
+    // load rtl styles
+    // @todo: this currently adds the rtl styles only to the 'screen' media type
+    //        but 'print' and 'all' should also be supported
+    if ($mediatype=='screen') {
         if($lang['direction'] == 'rtl'){
             if (isset($tplstyles['rtl'])) $files = array_merge($files, $tplstyles['rtl']);
         }
-        if(isset($config_cascade['userstyle']['default'])){
-            $files[$config_cascade['userstyle']['default']] = DOKU_BASE;
-        }
     }
 
     // check cache age & handle conditional request
@@ -122,7 +124,7 @@ function css_out(){
 
     // apply style replacements
     $css = css_applystyle($css,$tplinc);
-    
+
     // place all @import statements at the top of the file
     $css = css_moveimports($css);
 
@@ -202,7 +204,7 @@ function css_interwiki(){
     // default style
     echo 'a.interwiki {';
     echo ' background: transparent url('.DOKU_BASE.'lib/images/interwiki.png) 0px 1px no-repeat;';
-    echo ' padding-left: 16px;';
+    echo ' padding: 1px 0px 1px 16px;';
     echo '}';
 
     // additional styles when icon available
@@ -278,20 +280,15 @@ function css_loadfile($file,$location=''){
  *
  * @author Andreas Gohr <andi@splitbrain.org>
  */
-function css_pluginstyles($mode='screen'){
+function css_pluginstyles($mediatype='screen'){
     global $lang;
     $list = array();
     $plugins = plugin_list();
     foreach ($plugins as $p){
-        if($mode == 'all'){
-            $list[DOKU_PLUGIN."$p/all.css"]  = DOKU_BASE."lib/plugins/$p/";
-        }elseif($mode == 'print'){
-            $list[DOKU_PLUGIN."$p/print.css"]  = DOKU_BASE."lib/plugins/$p/";
-        }elseif($mode == 'feed'){
-            $list[DOKU_PLUGIN."$p/feed.css"]  = DOKU_BASE."lib/plugins/$p/";
-        }else{
+        $list[DOKU_PLUGIN."$p/$mediatype.css"]  = DOKU_BASE."lib/plugins/$p/";
+        // alternative for screen.css
+        if ($mediatype=='screen') {
             $list[DOKU_PLUGIN."$p/style.css"]  = DOKU_BASE."lib/plugins/$p/";
-            $list[DOKU_PLUGIN."$p/screen.css"] = DOKU_BASE."lib/plugins/$p/";
         }
         if($lang['direction'] == 'rtl'){
             $list[DOKU_PLUGIN."$p/rtl.css"] = DOKU_BASE."lib/plugins/$p/";
@@ -302,7 +299,7 @@ function css_pluginstyles($mode='screen'){
 
 /**
  * Move all @import statements in a combined stylesheet to the top so they
- * aren't ignored by the browser. 
+ * aren't ignored by the browser.
  *
  * @author Gabriel Birke <birke@d-scribe.de>
  */
diff --git a/lib/exe/indexer.php b/lib/exe/indexer.php
index 0042e92d23e931fb7bfbbfd5d043a765b02093c6..95e2af05ba10e10d164b4e603595411be5eeb78f 100644
--- a/lib/exe/indexer.php
+++ b/lib/exe/indexer.php
@@ -11,9 +11,6 @@ require_once(DOKU_INC.'inc/init.php');
 session_write_close();  //close session
 if(!defined('NL')) define('NL',"\n");
 
-// Version tag used to force rebuild on upgrade
-define('INDEXER_VERSION', 3);
-
 // keep running after browser closes connection
 @ignore_user_abort(true);
 
@@ -136,47 +133,8 @@ function runIndexer(){
 
     if(!$ID) return false;
 
-    // check if indexing needed
-    $idxtag = metaFN($ID,'.indexed');
-    if(@file_exists($idxtag)){
-        if(io_readFile($idxtag) >= INDEXER_VERSION){
-            $last = @filemtime($idxtag);
-            if($last > @filemtime(wikiFN($ID))){
-                print "runIndexer(): index for $ID up to date".NL;
-                return false;
-            }
-        }
-    }
-
-    // try to aquire a lock
-    $run = 0;
-    $lock = $conf['lockdir'].'/_indexer.lock';
-    while(!@mkdir($lock,$conf['dmode'])){
-        usleep(50);
-        if(is_dir($lock) && time()-@filemtime($lock) > 60*5){
-            // looks like a stale lock - remove it
-            if (!@rmdir($lock)) {
-                print "runIndexer(): removing the stale lock failed".NL;
-                return false;
-            } else {
-                print "runIndexer(): stale lock removed".NL;
-            }
-        }elseif($run++ == 1000){
-            // we waited 5 seconds for that lock
-            print "runIndexer(): indexer locked".NL;
-            return false;
-        }
-    }
-    if($conf['dperm']) chmod($lock, $conf['dperm']);
-
     // do the work
-    idx_addPage($ID);
-
-    // we're finished - save and free lock
-    io_saveFile(metaFN($ID,'.indexed'),INDEXER_VERSION);
-    @rmdir($lock);
-    print "runIndexer(): finished".NL;
-    return true;
+    return idx_addPage($ID, true);
 }
 
 /**
diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php
index 6f2add2bedcf8ce237f31e36b7346c4553844f79..02fde5a8d4908c818d3cf211f668797c99783c3b 100644
--- a/lib/exe/mediamanager.php
+++ b/lib/exe/mediamanager.php
@@ -91,7 +91,7 @@
             if ($res & DOKU_MEDIA_EMPTY_NS) {
                 // current namespace was removed. redirecting to root ns passing msg along
                 send_redirect(DOKU_URL.'lib/exe/mediamanager.php?msg1='.
-                        rawurlencode($msg));
+                        rawurlencode($msg).'&edid='.$_REQUEST['edid']);
             }
             msg($msg,1);
         } elseif ($res & DOKU_MEDIA_INUSE) {
diff --git a/lib/exe/xmlrpc.php b/lib/exe/xmlrpc.php
index 9749a2e16259c6496d9d55dd159418a662352c68..108dd8fd1b3a0b3970917c72603b3c8f95cd0c18 100644
--- a/lib/exe/xmlrpc.php
+++ b/lib/exe/xmlrpc.php
@@ -1,7 +1,7 @@
 <?php
 if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
 
-// fix when '<?xml' isn't on the very first line
+// fix when '< ?xml' isn't on the very first line
 if(isset($HTTP_RAW_POST_DATA)) $HTTP_RAW_POST_DATA = trim($HTTP_RAW_POST_DATA);
 
 /**
@@ -364,9 +364,8 @@ class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer {
      */
     function listPages(){
         $list  = array();
-        $pages = array_filter(array_filter(idx_getIndex('page', ''),
-                                           'isVisiblePage'),
-                              'page_exists');
+        $pages = idx_get_indexer()->getPages();
+        $pages = array_filter(array_filter($pages,'isVisiblePage'),'page_exists');
 
         foreach(array_keys($pages) as $idx) {
             $perm = auth_quickaclcheck($pages[$idx]);
@@ -562,27 +561,7 @@ class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer {
         unlock($id);
 
         // run the indexer if page wasn't indexed yet
-        if(!@file_exists(metaFN($id, '.indexed'))) {
-            // try to aquire a lock
-            $lock = $conf['lockdir'].'/_indexer.lock';
-            while(!@mkdir($lock,$conf['dmode'])){
-                usleep(50);
-                if(time()-@filemtime($lock) > 60*5){
-                    // looks like a stale lock - remove it
-                    @rmdir($lock);
-                }else{
-                    return false;
-                }
-            }
-            if($conf['dperm']) chmod($lock, $conf['dperm']);
-
-            // do the work
-            idx_addPage($id);
-
-            // we're finished - save and free lock
-            io_saveFile(metaFN($id,'.indexed'),INDEXER_VERSION);
-            @rmdir($lock);
-        }
+        idx_addPage($id);
 
         return 0;
     }
diff --git a/lib/images/admin/acl.png b/lib/images/admin/acl.png
index 96fb4cd5643fd43141cf32f776f5b81d596f4d89..c8f610c12df1ee977d82fd4af08e084ddff67058 100644
Binary files a/lib/images/admin/acl.png and b/lib/images/admin/acl.png differ
diff --git a/lib/images/admin/config.png b/lib/images/admin/config.png
index e4d376d853915ec231b6f95135cb8743478e87f9..3ec3923d114d829f57eafec58a1e525ddb65edb6 100644
Binary files a/lib/images/admin/config.png and b/lib/images/admin/config.png differ
diff --git a/lib/images/admin/plugin.png b/lib/images/admin/plugin.png
index e2823bac78a00ec97e96bc4817aed6ed1dff37b1..6896a13656d77b0192fe839438a968b5e5b388fd 100644
Binary files a/lib/images/admin/plugin.png and b/lib/images/admin/plugin.png differ
diff --git a/lib/images/admin/popularity.png b/lib/images/admin/popularity.png
index 4e22aaf0def484b2f5013ed715c8d73ea2fe828c..f7fe254f83236014ff6af5de26b4b30d79d21d2a 100644
Binary files a/lib/images/admin/popularity.png and b/lib/images/admin/popularity.png differ
diff --git a/lib/images/admin/revert.png b/lib/images/admin/revert.png
index 002d3a75bfa7ce3f1dc14819c43877fc5e656947..76cc3e9bc9fd8876c88b72b210517e2111069866 100644
Binary files a/lib/images/admin/revert.png and b/lib/images/admin/revert.png differ
diff --git a/lib/images/admin/usermanager.png b/lib/images/admin/usermanager.png
index c5c8dc6d64e1d03f10f0a9f4352c5a2386bd921c..e1edff2fcc259b5ca40e9797023111dc3e9340ff 100644
Binary files a/lib/images/admin/usermanager.png and b/lib/images/admin/usermanager.png differ
diff --git a/lib/images/close.png b/lib/images/close.png
index e1b498c14bba4598ef24e84ce73837b0ad5163ec..4ccef060329d35cfda449c01c1c2e22fe46b3339 100644
Binary files a/lib/images/close.png and b/lib/images/close.png differ
diff --git a/lib/images/del.png b/lib/images/del.png
index a3260d718e65db8c0ca981b1ae420c2327510bff..e59ded55f5b2deb045764cea1c03c1bb10ffd956 100644
Binary files a/lib/images/del.png and b/lib/images/del.png differ
diff --git a/lib/images/diff.png b/lib/images/diff.png
index 0b98d79ace182dced94e8774feeede3b2f5280d8..657b109994d3c2d3f3f74c2a761cdf854f942c91 100644
Binary files a/lib/images/diff.png and b/lib/images/diff.png differ
diff --git a/lib/images/error.png b/lib/images/error.png
index 8a1ba4c664158550952084ce4e6d8ab72d21de05..7bd84f7a36dedfa8107314e54836462ab93e5f7a 100644
Binary files a/lib/images/error.png and b/lib/images/error.png differ
diff --git a/lib/images/fileicons/bz2.png b/lib/images/fileicons/bz2.png
index d48cae038410aa43e668acdb49b9dddeb98ea07e..6ec2f98ef0a4af92666ee816bc442543ccc4f4bc 100644
Binary files a/lib/images/fileicons/bz2.png and b/lib/images/fileicons/bz2.png differ
diff --git a/lib/images/fileicons/c.png b/lib/images/fileicons/c.png
index 9446afcb410887bebd4ddd633c2c1f5275bcc805..6f57337c7ffd6a6cd5e9b5d7a9fd57f5f0c670a6 100644
Binary files a/lib/images/fileicons/c.png and b/lib/images/fileicons/c.png differ
diff --git a/lib/images/fileicons/conf.png b/lib/images/fileicons/conf.png
index ddffe6fd1aad01e342cacc7fb5bb53cd4699c9ca..20c20fa3d35e13a1ec2f17b5d8777d25c37997be 100644
Binary files a/lib/images/fileicons/conf.png and b/lib/images/fileicons/conf.png differ
diff --git a/lib/images/fileicons/cpp.png b/lib/images/fileicons/cpp.png
index 2dc51b16dfc1785b1b3980b3b2cfb98841c1c4de..6f2797da5103ba3dc3ed81ca7851966e16b6503c 100644
Binary files a/lib/images/fileicons/cpp.png and b/lib/images/fileicons/cpp.png differ
diff --git a/lib/images/fileicons/cs.png b/lib/images/fileicons/cs.png
index d5db29ba5dbcb554b41d0091fe4e2aea3abcdc69..d3afa112cbf6e2e40cdb8f067b9d4d6498d9f2c6 100644
Binary files a/lib/images/fileicons/cs.png and b/lib/images/fileicons/cs.png differ
diff --git a/lib/images/fileicons/csv.png b/lib/images/fileicons/csv.png
index 3a8835360e22920fdd75d004920f54f12ffdb9fc..b604453c47ba8f38849dfb4df8f58be459b55ad1 100644
Binary files a/lib/images/fileicons/csv.png and b/lib/images/fileicons/csv.png differ
diff --git a/lib/images/fileicons/deb.png b/lib/images/fileicons/deb.png
index 9229d878382ccdfb62f76d448bd16c86a4bfee05..e61300de90d41be3ac260b323eca0b8ac2b12d57 100644
Binary files a/lib/images/fileicons/deb.png and b/lib/images/fileicons/deb.png differ
diff --git a/lib/images/fileicons/doc.png b/lib/images/fileicons/doc.png
index 932567f8a9368cd42cf25dfe911c1530f932fd19..b48fdac8981aa32073eaa2118d415c1f31487822 100644
Binary files a/lib/images/fileicons/doc.png and b/lib/images/fileicons/doc.png differ
diff --git a/lib/images/fileicons/docx.png b/lib/images/fileicons/docx.png
index 932567f8a9368cd42cf25dfe911c1530f932fd19..b48fdac8981aa32073eaa2118d415c1f31487822 100644
Binary files a/lib/images/fileicons/docx.png and b/lib/images/fileicons/docx.png differ
diff --git a/lib/images/fileicons/file.png b/lib/images/fileicons/file.png
index 817014fa7363a3fc5b91f6a9abb9fdc9e392ade7..c1a7ef1b44e1f31765bdb7884f18cbfdcc2d4c1c 100644
Binary files a/lib/images/fileicons/file.png and b/lib/images/fileicons/file.png differ
diff --git a/lib/images/fileicons/gif.png b/lib/images/fileicons/gif.png
index aa4cc23a5b0d88cd17a4fbfa8260e71bf64a6f35..1d9dd562a4b27328ef9ca0ca516361d2d8da2e29 100644
Binary files a/lib/images/fileicons/gif.png and b/lib/images/fileicons/gif.png differ
diff --git a/lib/images/fileicons/gz.png b/lib/images/fileicons/gz.png
index 2426bd169c0268c06f3d41aaad94fddcba25e72f..48f19596cce36e65472b4c2123b0631eb2b146f2 100644
Binary files a/lib/images/fileicons/gz.png and b/lib/images/fileicons/gz.png differ
diff --git a/lib/images/fileicons/htm.png b/lib/images/fileicons/htm.png
index 1a6812185b9ab0a4dc7f5d568df09704132ebc97..d45e4c19adbdc1d0b6d8055f05b9e5e96509ec48 100644
Binary files a/lib/images/fileicons/htm.png and b/lib/images/fileicons/htm.png differ
diff --git a/lib/images/fileicons/html.png b/lib/images/fileicons/html.png
index 1a6812185b9ab0a4dc7f5d568df09704132ebc97..d45e4c19adbdc1d0b6d8055f05b9e5e96509ec48 100644
Binary files a/lib/images/fileicons/html.png and b/lib/images/fileicons/html.png differ
diff --git a/lib/images/fileicons/jpeg.png b/lib/images/fileicons/jpeg.png
index aa4cc23a5b0d88cd17a4fbfa8260e71bf64a6f35..1d9dd562a4b27328ef9ca0ca516361d2d8da2e29 100644
Binary files a/lib/images/fileicons/jpeg.png and b/lib/images/fileicons/jpeg.png differ
diff --git a/lib/images/fileicons/jpg.png b/lib/images/fileicons/jpg.png
index aa4cc23a5b0d88cd17a4fbfa8260e71bf64a6f35..1d9dd562a4b27328ef9ca0ca516361d2d8da2e29 100644
Binary files a/lib/images/fileicons/jpg.png and b/lib/images/fileicons/jpg.png differ
diff --git a/lib/images/fileicons/lua.png b/lib/images/fileicons/lua.png
index 7c07d023f91855f31cc77fa5470e4a616dd12543..dd72770bb81ed28d1cc2db229912f4041157e2fa 100644
Binary files a/lib/images/fileicons/lua.png and b/lib/images/fileicons/lua.png differ
diff --git a/lib/images/fileicons/mp3.png b/lib/images/fileicons/mp3.png
index 928705d7a54e7958e2ad2f2cb1da1f15f97782fd..d5d3ec1e4d468de61131d974550a1f8a125c5bac 100644
Binary files a/lib/images/fileicons/mp3.png and b/lib/images/fileicons/mp3.png differ
diff --git a/lib/images/fileicons/odc.png b/lib/images/fileicons/odc.png
index 47f65c84d34cbb0792340815a9bb1b19dabb337f..4d6676c3a02237d9db48e79581085395ca47a0c3 100644
Binary files a/lib/images/fileicons/odc.png and b/lib/images/fileicons/odc.png differ
diff --git a/lib/images/fileicons/odf.png b/lib/images/fileicons/odf.png
index a2fbc5195a2c1ff0c785ab5498ffe985bc25e704..65c62ebbe6fd6087fbb4f79bc9789bfecaeddc03 100644
Binary files a/lib/images/fileicons/odf.png and b/lib/images/fileicons/odf.png differ
diff --git a/lib/images/fileicons/odg.png b/lib/images/fileicons/odg.png
index 74f6303d3dce3bc6bc2174efbdbba176b2ada991..a07216f4af3cabf92105a7deaf8170af8ee4d848 100644
Binary files a/lib/images/fileicons/odg.png and b/lib/images/fileicons/odg.png differ
diff --git a/lib/images/fileicons/odi.png b/lib/images/fileicons/odi.png
index 74f6303d3dce3bc6bc2174efbdbba176b2ada991..a07216f4af3cabf92105a7deaf8170af8ee4d848 100644
Binary files a/lib/images/fileicons/odi.png and b/lib/images/fileicons/odi.png differ
diff --git a/lib/images/fileicons/odp.png b/lib/images/fileicons/odp.png
index 2a94290d708248b3da0b3ac5f5d08b78b411c582..ed51fcaf14d9e92f6675d6b213fb372520f6f4c7 100644
Binary files a/lib/images/fileicons/odp.png and b/lib/images/fileicons/odp.png differ
diff --git a/lib/images/fileicons/ods.png b/lib/images/fileicons/ods.png
index 47f65c84d34cbb0792340815a9bb1b19dabb337f..4d6676c3a02237d9db48e79581085395ca47a0c3 100644
Binary files a/lib/images/fileicons/ods.png and b/lib/images/fileicons/ods.png differ
diff --git a/lib/images/fileicons/odt.png b/lib/images/fileicons/odt.png
index b0c21fc1fd1d5f43ca6e15146d74960677300e14..67ef1a42d2297b747e3852df6bf01f004f017034 100644
Binary files a/lib/images/fileicons/odt.png and b/lib/images/fileicons/odt.png differ
diff --git a/lib/images/fileicons/ogg.png b/lib/images/fileicons/ogg.png
index 62cea6aaa4ba65a9bc57c2fd7d4676d3d2a55183..0a21eae65cb981ecd54bfa888bae11b58529318a 100644
Binary files a/lib/images/fileicons/ogg.png and b/lib/images/fileicons/ogg.png differ
diff --git a/lib/images/fileicons/pdf.png b/lib/images/fileicons/pdf.png
index 638066dea602dc90953200c59158d02a95446b7f..f40f228264bd5e9a9d9949ceca814302f83efb9d 100644
Binary files a/lib/images/fileicons/pdf.png and b/lib/images/fileicons/pdf.png differ
diff --git a/lib/images/fileicons/php.png b/lib/images/fileicons/php.png
index e735f875b44a1006b7c5bcb66e26e63f7b7d6644..f81e405de3f6d47a5513d3e12e8493ba0c535494 100644
Binary files a/lib/images/fileicons/php.png and b/lib/images/fileicons/php.png differ
diff --git a/lib/images/fileicons/pl.png b/lib/images/fileicons/pl.png
index 6ac381cd7d1327b2ecdb85100a40b75de746da6b..92f3f97546236dcf5625086a58aa6c38e6015437 100644
Binary files a/lib/images/fileicons/pl.png and b/lib/images/fileicons/pl.png differ
diff --git a/lib/images/fileicons/png.png b/lib/images/fileicons/png.png
index aa4cc23a5b0d88cd17a4fbfa8260e71bf64a6f35..1d9dd562a4b27328ef9ca0ca516361d2d8da2e29 100644
Binary files a/lib/images/fileicons/png.png and b/lib/images/fileicons/png.png differ
diff --git a/lib/images/fileicons/ppt.png b/lib/images/fileicons/ppt.png
index adaefc6025a7e9dcceaa275652d5988d818505c6..b7afb2266cc0b79fc47d091b68441a49e2feb9dd 100644
Binary files a/lib/images/fileicons/ppt.png and b/lib/images/fileicons/ppt.png differ
diff --git a/lib/images/fileicons/pptx.png b/lib/images/fileicons/pptx.png
index adaefc6025a7e9dcceaa275652d5988d818505c6..b7afb2266cc0b79fc47d091b68441a49e2feb9dd 100644
Binary files a/lib/images/fileicons/pptx.png and b/lib/images/fileicons/pptx.png differ
diff --git a/lib/images/fileicons/ps.png b/lib/images/fileicons/ps.png
index c51c763ab3b5f7ad4a951a71484d9b053ff1816e..78e3af8fb5be19987adcafb54341e1cf93a2be21 100644
Binary files a/lib/images/fileicons/ps.png and b/lib/images/fileicons/ps.png differ
diff --git a/lib/images/fileicons/py.png b/lib/images/fileicons/py.png
index a21b8da4984f4baf06d15cbccca2e50e5ed3108a..15a727c5469429434715fb6fdcc0961e6a0d997d 100644
Binary files a/lib/images/fileicons/py.png and b/lib/images/fileicons/py.png differ
diff --git a/lib/images/fileicons/rar.png b/lib/images/fileicons/rar.png
index a6af4d1cac16975bc6eff1bd9c1a02905e99db64..c761a4f7fdc3bfea15a52b1a224c0867c3345be7 100644
Binary files a/lib/images/fileicons/rar.png and b/lib/images/fileicons/rar.png differ
diff --git a/lib/images/fileicons/rb.png b/lib/images/fileicons/rb.png
index 45f4489780f6758a96c1242bcec00acbab5259ac..408f708a1df128e25d79e4a1684c5efddd34fde8 100644
Binary files a/lib/images/fileicons/rb.png and b/lib/images/fileicons/rb.png differ
diff --git a/lib/images/fileicons/rpm.png b/lib/images/fileicons/rpm.png
index 22212eafacc69e139622065067fbd64284d059de..5cf727de025e37dad60bb2d3463b1826362426a1 100644
Binary files a/lib/images/fileicons/rpm.png and b/lib/images/fileicons/rpm.png differ
diff --git a/lib/images/fileicons/rtf.png b/lib/images/fileicons/rtf.png
index d8bada5fe143ec1f3d13a958cf89ca762a1ffd3f..a1170af7fb4b3792b1e2792902f032f96aaa90f7 100644
Binary files a/lib/images/fileicons/rtf.png and b/lib/images/fileicons/rtf.png differ
diff --git a/lib/images/fileicons/sql.png b/lib/images/fileicons/sql.png
index f60054a3af72ed4ae2809f513064dcde5416fd50..13772b73ce68a54443d3ec1d093b88da91cc62cb 100644
Binary files a/lib/images/fileicons/sql.png and b/lib/images/fileicons/sql.png differ
diff --git a/lib/images/fileicons/swf.png b/lib/images/fileicons/swf.png
index 0729ed0203ea2b0b6c4402d9af5fccbdc2e6397f..ecc7309ad52bca2ff1387fad5f066e36de59e9c6 100644
Binary files a/lib/images/fileicons/swf.png and b/lib/images/fileicons/swf.png differ
diff --git a/lib/images/fileicons/sxc.png b/lib/images/fileicons/sxc.png
index 47f65c84d34cbb0792340815a9bb1b19dabb337f..4d6676c3a02237d9db48e79581085395ca47a0c3 100644
Binary files a/lib/images/fileicons/sxc.png and b/lib/images/fileicons/sxc.png differ
diff --git a/lib/images/fileicons/sxd.png b/lib/images/fileicons/sxd.png
index 74f6303d3dce3bc6bc2174efbdbba176b2ada991..a07216f4af3cabf92105a7deaf8170af8ee4d848 100644
Binary files a/lib/images/fileicons/sxd.png and b/lib/images/fileicons/sxd.png differ
diff --git a/lib/images/fileicons/sxi.png b/lib/images/fileicons/sxi.png
index 2a94290d708248b3da0b3ac5f5d08b78b411c582..ed51fcaf14d9e92f6675d6b213fb372520f6f4c7 100644
Binary files a/lib/images/fileicons/sxi.png and b/lib/images/fileicons/sxi.png differ
diff --git a/lib/images/fileicons/sxw.png b/lib/images/fileicons/sxw.png
index b0c21fc1fd1d5f43ca6e15146d74960677300e14..67ef1a42d2297b747e3852df6bf01f004f017034 100644
Binary files a/lib/images/fileicons/sxw.png and b/lib/images/fileicons/sxw.png differ
diff --git a/lib/images/fileicons/tar.png b/lib/images/fileicons/tar.png
index 5a2f717fc54e604ef5bb82b8a5d463c0073a7357..a28c86f2de27465a78dc45db99bec9c8f1eb82d7 100644
Binary files a/lib/images/fileicons/tar.png and b/lib/images/fileicons/tar.png differ
diff --git a/lib/images/fileicons/tgz.png b/lib/images/fileicons/tgz.png
index 2426bd169c0268c06f3d41aaad94fddcba25e72f..48f19596cce36e65472b4c2123b0631eb2b146f2 100644
Binary files a/lib/images/fileicons/tgz.png and b/lib/images/fileicons/tgz.png differ
diff --git a/lib/images/fileicons/txt.png b/lib/images/fileicons/txt.png
index da20009c6ebc28d8286577735f0a2aed9402fdf5..bb94949f6205b348e4b98e9b527fa03d934c01e5 100644
Binary files a/lib/images/fileicons/txt.png and b/lib/images/fileicons/txt.png differ
diff --git a/lib/images/fileicons/wav.png b/lib/images/fileicons/wav.png
index 79e80760e2cade44dde7c0b5b5f1e6342754bd45..46ff63f0f9e30d43eeaa6ba42ef9ce3d7f2fee97 100644
Binary files a/lib/images/fileicons/wav.png and b/lib/images/fileicons/wav.png differ
diff --git a/lib/images/fileicons/xls.png b/lib/images/fileicons/xls.png
index e8cd58dc0f1912e3379db02a75077bcd8ad2320e..24911b802d8f52f966552d450f177d62bec5f940 100644
Binary files a/lib/images/fileicons/xls.png and b/lib/images/fileicons/xls.png differ
diff --git a/lib/images/fileicons/xlsx.png b/lib/images/fileicons/xlsx.png
index e8cd58dc0f1912e3379db02a75077bcd8ad2320e..24911b802d8f52f966552d450f177d62bec5f940 100644
Binary files a/lib/images/fileicons/xlsx.png and b/lib/images/fileicons/xlsx.png differ
diff --git a/lib/images/fileicons/xml.png b/lib/images/fileicons/xml.png
index eb46323979ced7663447f2c6315be1f824e60eb4..ae9831b34f7d9d18325cf787e68e240f53ae1ce0 100644
Binary files a/lib/images/fileicons/xml.png and b/lib/images/fileicons/xml.png differ
diff --git a/lib/images/fileicons/zip.png b/lib/images/fileicons/zip.png
index 999ffbe80707d6c2bd3674895f62e824a2668522..f4a10bf9ca0d6d718cddb61e76f67307c78038ed 100644
Binary files a/lib/images/fileicons/zip.png and b/lib/images/fileicons/zip.png differ
diff --git a/lib/images/history.png b/lib/images/history.png
index ef9e311d30496eb650df6c10fed83d4194e5820d..82a418d44d01b72ecfb6ffbec87decf58aacf539 100644
Binary files a/lib/images/history.png and b/lib/images/history.png differ
diff --git a/lib/images/info.png b/lib/images/info.png
index a237c178299c3f414d9e51b807a925b294372cd3..121c7336dc5d7e72080980b934618d6608ee979f 100644
Binary files a/lib/images/info.png and b/lib/images/info.png differ
diff --git a/lib/images/interwiki.png b/lib/images/interwiki.png
index 73d6f8d39af227acbcea9e06952694703183170c..f9c73d505a941c77a1d43c7bd228cae2cbee75d9 100644
Binary files a/lib/images/interwiki.png and b/lib/images/interwiki.png differ
diff --git a/lib/images/interwiki/callto.gif b/lib/images/interwiki/callto.gif
new file mode 100644
index 0000000000000000000000000000000000000000..880e9d8e7dad0be16ec0baa57bd8adc87d383b79
Binary files /dev/null and b/lib/images/interwiki/callto.gif differ
diff --git a/lib/images/interwiki/skype.png b/lib/images/interwiki/skype.png
new file mode 100644
index 0000000000000000000000000000000000000000..c70216702b21067eb154a0a965c672782a5dcea0
Binary files /dev/null and b/lib/images/interwiki/skype.png differ
diff --git a/lib/images/license/badge/cc-by-nc-nd.png b/lib/images/license/badge/cc-by-nc-nd.png
index 49f272f828c17c9f52b64c27fa6a3c399bee9344..3231da3a364090b16935ce005214cb3c774534b1 100644
Binary files a/lib/images/license/badge/cc-by-nc-nd.png and b/lib/images/license/badge/cc-by-nc-nd.png differ
diff --git a/lib/images/license/badge/cc-by-nc-sa.png b/lib/images/license/badge/cc-by-nc-sa.png
index 0f2a0f10722d3fabffe8af5d5eed09866e25909a..6bcf6a11d6f753f59dd882c1f8ba9203ec65d114 100644
Binary files a/lib/images/license/badge/cc-by-nc-sa.png and b/lib/images/license/badge/cc-by-nc-sa.png differ
diff --git a/lib/images/license/badge/cc-by-nc.png b/lib/images/license/badge/cc-by-nc.png
index 5f982147075ad08691e3b3c53e92633ca0ddcb2f..6d646321fd22d16fc7b1c9898a6f8ebd7181051a 100644
Binary files a/lib/images/license/badge/cc-by-nc.png and b/lib/images/license/badge/cc-by-nc.png differ
diff --git a/lib/images/license/badge/cc-by-nd.png b/lib/images/license/badge/cc-by-nd.png
index 8f317035e677affa946516c82baa17f896e8a866..442353808be9fe4c59c5b6b3d0bc76dc17453c43 100644
Binary files a/lib/images/license/badge/cc-by-nd.png and b/lib/images/license/badge/cc-by-nd.png differ
diff --git a/lib/images/license/badge/cc-by-sa.png b/lib/images/license/badge/cc-by-sa.png
index f0a944e0b89642ae282047846e55393007b04686..e9fb436af8c6baf488c61795196883e6c6d3daf6 100644
Binary files a/lib/images/license/badge/cc-by-sa.png and b/lib/images/license/badge/cc-by-sa.png differ
diff --git a/lib/images/license/badge/cc-by.png b/lib/images/license/badge/cc-by.png
index 822491edb993b072fc183a2ce23adfa8c94cee7c..cdc1f58fa3d396801adf4efe4144769fa8a822b7 100644
Binary files a/lib/images/license/badge/cc-by.png and b/lib/images/license/badge/cc-by.png differ
diff --git a/lib/images/license/badge/cc-zero.png b/lib/images/license/badge/cc-zero.png
index 8a0ef3e3bcc8e2846a74c4b5dda4318fc18e6991..fd3dff422a3fddc4b72208a29b15740ce2e16d20 100644
Binary files a/lib/images/license/badge/cc-zero.png and b/lib/images/license/badge/cc-zero.png differ
diff --git a/lib/images/license/badge/cc.png b/lib/images/license/badge/cc.png
index a66f4d1a010e16aacf1a8538fd0e624a5c0d2586..8ac73aa4e390ae1e35fdd8e811e447910d242468 100644
Binary files a/lib/images/license/badge/cc.png and b/lib/images/license/badge/cc.png differ
diff --git a/lib/images/license/badge/gnufdl.png b/lib/images/license/badge/gnufdl.png
index 1371aba886e5fbefc5b9ea6749a893ba440729e1..e9291012894865482b300cb7f6326896b75e2975 100644
Binary files a/lib/images/license/badge/gnufdl.png and b/lib/images/license/badge/gnufdl.png differ
diff --git a/lib/images/license/badge/publicdomain.png b/lib/images/license/badge/publicdomain.png
index cedc39c62b5d18558b9970c5879aae9f0dfe7b68..ea8eeb4e1267715efd69557833ab76acffa57d02 100644
Binary files a/lib/images/license/badge/publicdomain.png and b/lib/images/license/badge/publicdomain.png differ
diff --git a/lib/images/license/button/cc-by-nc-nd.png b/lib/images/license/button/cc-by-nc-nd.png
index b27ead2f68a9287280f207532682e73acd941ef7..e1344a95496d01cd7420fdc895be9852bf7df156 100644
Binary files a/lib/images/license/button/cc-by-nc-nd.png and b/lib/images/license/button/cc-by-nc-nd.png differ
diff --git a/lib/images/license/button/cc-by-nc-sa.png b/lib/images/license/button/cc-by-nc-sa.png
index 1c54f994df06341ae0d3f460eda0c55fa0f92801..6855a7586981a2f57dd7598a82b8047976e8d408 100644
Binary files a/lib/images/license/button/cc-by-nc-sa.png and b/lib/images/license/button/cc-by-nc-sa.png differ
diff --git a/lib/images/license/button/cc-by-nc.png b/lib/images/license/button/cc-by-nc.png
index 33c7b1fa411da0653be64c5f468116564fd3b8d0..0b4d972682869fcbff13690284eda7c8ae591211 100644
Binary files a/lib/images/license/button/cc-by-nc.png and b/lib/images/license/button/cc-by-nc.png differ
diff --git a/lib/images/license/button/cc-by-nd.png b/lib/images/license/button/cc-by-nd.png
index 52073c043abb52d477a41f0f379cc703054ac9a3..cdd3da9cce907448dc03d3deca40a8d9a15149ff 100644
Binary files a/lib/images/license/button/cc-by-nd.png and b/lib/images/license/button/cc-by-nd.png differ
diff --git a/lib/images/license/button/cc-by-sa.png b/lib/images/license/button/cc-by-sa.png
index 0b1880f91ec62252ff0829f87fa99811f7177282..c512da0c4ef0b9ef5b693d0055ea74b752532442 100644
Binary files a/lib/images/license/button/cc-by-sa.png and b/lib/images/license/button/cc-by-sa.png differ
diff --git a/lib/images/license/button/cc-by.png b/lib/images/license/button/cc-by.png
index 99d8efd35451b5bf544c4fe0bba80688e5533559..9179e2f57707c8508992eddb07426e40fa7955ff 100644
Binary files a/lib/images/license/button/cc-by.png and b/lib/images/license/button/cc-by.png differ
diff --git a/lib/images/license/button/cc-zero.png b/lib/images/license/button/cc-zero.png
index fc99eff61142612c3c9c826fb7b3b290fdaca459..9243a80977eb9f70fce58b7c2543399e2a01786f 100644
Binary files a/lib/images/license/button/cc-zero.png and b/lib/images/license/button/cc-zero.png differ
diff --git a/lib/images/license/button/cc.png b/lib/images/license/button/cc.png
index adfa085bdb708d26d06c07f6b2ed78ec2458d8ed..087115aa6678669644a21a2a4a9307a107f078e8 100644
Binary files a/lib/images/license/button/cc.png and b/lib/images/license/button/cc.png differ
diff --git a/lib/images/license/button/gnufdl.png b/lib/images/license/button/gnufdl.png
index cb815ac13d21e0be37ba4fa8bf429764114410c4..d26e95f77900dc53cbb99808d854a547afd47085 100644
Binary files a/lib/images/license/button/gnufdl.png and b/lib/images/license/button/gnufdl.png differ
diff --git a/lib/images/license/button/publicdomain.png b/lib/images/license/button/publicdomain.png
index f78e73d02686df17a61a29bc2d7f22145c7983d4..1dcde15ebbba138aa46042ed5f51491dc482fb11 100644
Binary files a/lib/images/license/button/publicdomain.png and b/lib/images/license/button/publicdomain.png differ
diff --git a/lib/images/magnifier.png b/lib/images/magnifier.png
index cf3d97f75e9cde9c143980d89272fe61fc2d64ee..89febff1035e680c0ef2b4182f09e46e09949011 100644
Binary files a/lib/images/magnifier.png and b/lib/images/magnifier.png differ
diff --git a/lib/images/media_align_center.png b/lib/images/media_align_center.png
index 3db90fc17e12cc56de55b491b5c845b91a291532..807f9d9a883f52156c75d51ffc82e5d376166787 100644
Binary files a/lib/images/media_align_center.png and b/lib/images/media_align_center.png differ
diff --git a/lib/images/media_align_left.png b/lib/images/media_align_left.png
index cebbb1a9ab330b3009cd5c2fecdb0fb075f6d2c7..fa6cf33ca0bf10e4ac179c6474939588bb0e02e6 100644
Binary files a/lib/images/media_align_left.png and b/lib/images/media_align_left.png differ
diff --git a/lib/images/media_align_noalign.png b/lib/images/media_align_noalign.png
index 74f34e5f1c015d1bdbf1b8fba25d7166dfd9495b..263e090fed529615aa0606b6acb12c0fa542289a 100644
Binary files a/lib/images/media_align_noalign.png and b/lib/images/media_align_noalign.png differ
diff --git a/lib/images/media_align_right.png b/lib/images/media_align_right.png
index 5f54a4a499db6c5579e59d45df9dfc944e85a2fc..33539dbdb1f2600d38befe6cd92a539b3c1b6409 100644
Binary files a/lib/images/media_align_right.png and b/lib/images/media_align_right.png differ
diff --git a/lib/images/media_link_direct.png b/lib/images/media_link_direct.png
index 4bdb3541ecb728c1e2b0bef1b0546fa0878c99fa..4350b803d0dc0727e7bc206471cf91464d1942e7 100644
Binary files a/lib/images/media_link_direct.png and b/lib/images/media_link_direct.png differ
diff --git a/lib/images/media_link_displaylnk.png b/lib/images/media_link_displaylnk.png
index 25eacb7c2524142262d68bf729c5e2b61adfd6d4..53927566a1be29e67155c4ba4a7dc4878ef2d6a5 100644
Binary files a/lib/images/media_link_displaylnk.png and b/lib/images/media_link_displaylnk.png differ
diff --git a/lib/images/media_link_lnk.png b/lib/images/media_link_lnk.png
index 1209164ca5567328ea8c386e577af4f47b031e71..5ff4ee182f79eb9ca9ce396a0390a16fb4e866c1 100644
Binary files a/lib/images/media_link_lnk.png and b/lib/images/media_link_lnk.png differ
diff --git a/lib/images/media_link_nolnk.png b/lib/images/media_link_nolnk.png
index fc3c393caa3bc4371d12d0c67ffd6d333ecf1d8e..c9378c7fd072761d8f1f724df1fc7b6403ba21fa 100644
Binary files a/lib/images/media_link_nolnk.png and b/lib/images/media_link_nolnk.png differ
diff --git a/lib/images/media_size_large.png b/lib/images/media_size_large.png
index e2fb548d92320a2a5207d8ef6ac54765c014bf33..012a418c36fd5f2455c4c7f4b7b23a3284fbc8a5 100644
Binary files a/lib/images/media_size_large.png and b/lib/images/media_size_large.png differ
diff --git a/lib/images/media_size_medium.png b/lib/images/media_size_medium.png
index b33157256423439e3f1cff01e02d7606bd934ae6..1469f519fe25bb4ac261075082c072f229497d24 100644
Binary files a/lib/images/media_size_medium.png and b/lib/images/media_size_medium.png differ
diff --git a/lib/images/media_size_original.png b/lib/images/media_size_original.png
index d179aa2dbe2e180ec31814c1502a5cf5998a0cdd..f58d056aa5de557f17288828baf8adcf11e0ca31 100644
Binary files a/lib/images/media_size_original.png and b/lib/images/media_size_original.png differ
diff --git a/lib/images/media_size_small.png b/lib/images/media_size_small.png
index 04efe7080fac7dfa27bdc9d9b55a41f6d3751683..a0aafa4a7f0810b48571ecd1001244d54ee67480 100644
Binary files a/lib/images/media_size_small.png and b/lib/images/media_size_small.png differ
diff --git a/lib/images/multiupload.png b/lib/images/multiupload.png
index 1e8efa063f773bd1cc79ac29f157e9af8f8e7d66..bc16c76d6f010d05ffd49058887501351fc52f8f 100644
Binary files a/lib/images/multiupload.png and b/lib/images/multiupload.png differ
diff --git a/lib/images/notify.png b/lib/images/notify.png
index 6e0015df4f737ded7e7e14b546616e704f023226..c18ef1001be7f5eebc88ad22a3b60938e1860018 100644
Binary files a/lib/images/notify.png and b/lib/images/notify.png differ
diff --git a/lib/images/ns.png b/lib/images/ns.png
index da3c2a2d74bab159ba0f65d7db601768258afcb2..c35e832da26a01c0a1a54ca6c88b8ae9423c8b00 100644
Binary files a/lib/images/ns.png and b/lib/images/ns.png differ
diff --git a/lib/images/page.png b/lib/images/page.png
index 03ddd799fa0a3aec561c75d4221f195db65d6eb9..b1b7ebe941933c67b3db758ffbc4149f3043631f 100644
Binary files a/lib/images/page.png and b/lib/images/page.png differ
diff --git a/lib/images/pencil.png b/lib/images/pencil.png
index 0bfecd50ee9f5bc5828f0c0745aa3e0effcbe250..3ea75412065c410bacd7f88278bc176bd4e9fe0e 100644
Binary files a/lib/images/pencil.png and b/lib/images/pencil.png differ
diff --git a/lib/images/smileys/facepalm.gif b/lib/images/smileys/facepalm.gif
new file mode 100644
index 0000000000000000000000000000000000000000..4ce005e633f4ac24ea1f9ab312330bb9af4e33b6
Binary files /dev/null and b/lib/images/smileys/facepalm.gif differ
diff --git a/lib/images/success.png b/lib/images/success.png
index a5ae9f11b815739b7606eb9b2d36dd4e26069bfb..9241adbb2f94a1f792e150f0284806149d4ae5e5 100644
Binary files a/lib/images/success.png and b/lib/images/success.png differ
diff --git a/lib/images/toolbar/bold.png b/lib/images/toolbar/bold.png
index 7ebe99ee926f1bd73fac1200598de09ecdd87a12..1fc8a9cc4d900145c1eea84a883d9896a71a5269 100644
Binary files a/lib/images/toolbar/bold.png and b/lib/images/toolbar/bold.png differ
diff --git a/lib/images/toolbar/chars.png b/lib/images/toolbar/chars.png
index 3f3396aebccf9d1e3f205d46f1338120013b339d..bad37e503ea9e21d5f82952bb70e811d94959898 100644
Binary files a/lib/images/toolbar/chars.png and b/lib/images/toolbar/chars.png differ
diff --git a/lib/images/toolbar/h.png b/lib/images/toolbar/h.png
index aae0524625c047c43f5a4f6a59f1b2819d70e728..6a48cbbc0159248d72c70947667fd0bc6e64bc08 100644
Binary files a/lib/images/toolbar/h.png and b/lib/images/toolbar/h.png differ
diff --git a/lib/images/toolbar/h1.png b/lib/images/toolbar/h1.png
index 93dae935f8e05111a94f56b6c8cc69dfcc6f6020..85bd06e6cca083f1fb4d2a05e8dccca58d2ef20a 100644
Binary files a/lib/images/toolbar/h1.png and b/lib/images/toolbar/h1.png differ
diff --git a/lib/images/toolbar/h2.png b/lib/images/toolbar/h2.png
index f0eee3bd03a77c91976cd05ff551f4479722296b..be2c60031b0de8e1e1a19a50a40f5a136c20ca6b 100644
Binary files a/lib/images/toolbar/h2.png and b/lib/images/toolbar/h2.png differ
diff --git a/lib/images/toolbar/h3.png b/lib/images/toolbar/h3.png
index 8cfd4c077a4430fcf7483bd4b64b12d0cb517bdd..350da88b698c9d90a288f837d977122787fefb27 100644
Binary files a/lib/images/toolbar/h3.png and b/lib/images/toolbar/h3.png differ
diff --git a/lib/images/toolbar/h4.png b/lib/images/toolbar/h4.png
index 7b8f51a1bba3e73f01ddb92f2a8939f388d922b7..bc1b7038f8ad49c4bc29c14e7a8d11cedbd6b254 100644
Binary files a/lib/images/toolbar/h4.png and b/lib/images/toolbar/h4.png differ
diff --git a/lib/images/toolbar/h5.png b/lib/images/toolbar/h5.png
index 44b00d9c8e1af3818b6edbe3156e19656860eca6..b6c263dfb347a14beef7e4c5a61acfd03a7ba135 100644
Binary files a/lib/images/toolbar/h5.png and b/lib/images/toolbar/h5.png differ
diff --git a/lib/images/toolbar/hequal.png b/lib/images/toolbar/hequal.png
index 8fc6b0d759406b1fe0e8a3b1d56461043e5b7e6b..da4e921ff33cec7cc51c121ba4608110f124e1a7 100644
Binary files a/lib/images/toolbar/hequal.png and b/lib/images/toolbar/hequal.png differ
diff --git a/lib/images/toolbar/hminus.png b/lib/images/toolbar/hminus.png
index f9d67adcb847d7886ea13c43d3db2b2c9d439587..c00f70223fbc8238a1e5722622bb43dcf05f348b 100644
Binary files a/lib/images/toolbar/hminus.png and b/lib/images/toolbar/hminus.png differ
diff --git a/lib/images/toolbar/hplus.png b/lib/images/toolbar/hplus.png
index 66f3d5e3394608f1740449671176c04a3ab3ec6a..6124b5c33a8274de9894ec6a49c01332d8c68e72 100644
Binary files a/lib/images/toolbar/hplus.png and b/lib/images/toolbar/hplus.png differ
diff --git a/lib/images/toolbar/hr.png b/lib/images/toolbar/hr.png
index f86a8ec9428680e20892aa2ae7a96756de66877e..de3a8a55bd0bb30dd5b8fd4539eb41e1b5ddb7b0 100644
Binary files a/lib/images/toolbar/hr.png and b/lib/images/toolbar/hr.png differ
diff --git a/lib/images/toolbar/image.png b/lib/images/toolbar/image.png
index 1aab5d7dee36f4d61d356bd3ac96f675072dd85d..70b12fcc21831685ddd5e3e95e77844a0f55946d 100644
Binary files a/lib/images/toolbar/image.png and b/lib/images/toolbar/image.png differ
diff --git a/lib/images/toolbar/italic.png b/lib/images/toolbar/italic.png
index 324e7c03659ef06877a5f4df023a72fcda44e91e..d69e66070eb0fda4cd24a9e8507cc3de86f2eadf 100644
Binary files a/lib/images/toolbar/italic.png and b/lib/images/toolbar/italic.png differ
diff --git a/lib/images/toolbar/link.png b/lib/images/toolbar/link.png
index 41e52c6ab58416529da365a7e8a4e6c39be0294c..01105b0d37b1d5d74980509d8fec7f5ea88f11a1 100644
Binary files a/lib/images/toolbar/link.png and b/lib/images/toolbar/link.png differ
diff --git a/lib/images/toolbar/linkextern.png b/lib/images/toolbar/linkextern.png
index 75afd3dc22e71a9b06a66a09153386ad05bbbb0b..acc0c6fc5c9ed87c0b4966de0eb14543efd37d1b 100644
Binary files a/lib/images/toolbar/linkextern.png and b/lib/images/toolbar/linkextern.png differ
diff --git a/lib/images/toolbar/mono.png b/lib/images/toolbar/mono.png
index 178cec9f248d65a24f9295f4788749f20b16121b..b91ad2e0dc87b276016b27523da3152706a09bf0 100644
Binary files a/lib/images/toolbar/mono.png and b/lib/images/toolbar/mono.png differ
diff --git a/lib/images/toolbar/ol.png b/lib/images/toolbar/ol.png
index 3162fa21dcbfd454de07bcd8e4bd6af398e1d4ac..186f1fad4559771d75dc28f3904f126de1f59f74 100644
Binary files a/lib/images/toolbar/ol.png and b/lib/images/toolbar/ol.png differ
diff --git a/lib/images/toolbar/sig.png b/lib/images/toolbar/sig.png
index ef997b7cd56ade07014c7bd7ed0609e67af27c20..72fdad0a0fba1db94ec87620d8d14c7ff7cca97b 100644
Binary files a/lib/images/toolbar/sig.png and b/lib/images/toolbar/sig.png differ
diff --git a/lib/images/toolbar/smiley.png b/lib/images/toolbar/smiley.png
index e92845cb4b6a718caea009c7b17a018790ec1a02..85036c1a8cbfc46db899bcc66f33bac9bf40b068 100644
Binary files a/lib/images/toolbar/smiley.png and b/lib/images/toolbar/smiley.png differ
diff --git a/lib/images/toolbar/strike.png b/lib/images/toolbar/strike.png
index 203aacc2b06d35936485b5cdcad376b864590aa2..e532d1f07526ae3b3d81d668bec6311a8fba0f81 100644
Binary files a/lib/images/toolbar/strike.png and b/lib/images/toolbar/strike.png differ
diff --git a/lib/images/toolbar/ul.png b/lib/images/toolbar/ul.png
index 471171db4a05adafad54981d0c5b3c18cc360989..008820722a297bc030509fa4ce07398c21fbb48b 100644
Binary files a/lib/images/toolbar/ul.png and b/lib/images/toolbar/ul.png differ
diff --git a/lib/images/toolbar/underline.png b/lib/images/toolbar/underline.png
index bf9665a680d1522b9cde56577b200b5b0e8653dd..fa271517cd584fdbc159f7ee9af0aead35f5ae4a 100644
Binary files a/lib/images/toolbar/underline.png and b/lib/images/toolbar/underline.png differ
diff --git a/lib/images/trash.png b/lib/images/trash.png
index ebad933c8b3729a9b27dc34c5a111600b8d46fdb..efc97ba8fbfe1d15714a765e6c3fb19bfba04d7f 100644
Binary files a/lib/images/trash.png and b/lib/images/trash.png differ
diff --git a/lib/images/up.png b/lib/images/up.png
index 557d5e6a9db9f3e41dc0964ea22931a374507114..27beb4445c6fa017dc6be3b4e045b842daf64cf5 100644
Binary files a/lib/images/up.png and b/lib/images/up.png differ
diff --git a/lib/plugins/acl/lang/bg/help.txt b/lib/plugins/acl/lang/bg/help.txt
index 23028cb35b786ec899b53d896a987b1ff69cd885..2de45342056180b1a27d547975fc993729b3a96c 100644
--- a/lib/plugins/acl/lang/bg/help.txt
+++ b/lib/plugins/acl/lang/bg/help.txt
@@ -1,11 +1,11 @@
 === Помощ ===
 
-На тази страница можете да добавяте и премахвате разрешения за определяне на имена и страници във Вашето Wiki.
+От тук можете да добавяте и премахвате права за именни пространства и страници във вашето Wiki.
 
-Левият панел показва всички налични имена и страници.
+Левият панел показва всички налични именни пространства и страници.
 
-Формата по-горе ви позволява да видите и промените разрешенията на избрания потребител или група.
+Формата отгоре ви позволява да преглеждате и променяте правата на избран потребител или група.
 
-В таблицата по-долу са показани всички актуални правила за контрол на достъпа. Можете да я използвате за бързо изтриване или промяна на множество правила.
+В таблицата отдолу са показани всички актуални правила за контрол на достъпа. Можете да я ползвате за бързо изтриване или промяна на множество правила.
 
-Четене на [[doku>acl|ACL документацията]] може да ви помогне да разберете напълно как работи контрола на достъпа в DokuWiki.
\ No newline at end of file
+За да разберете как работи контрола на достъпа в DokuWiki трябва да прочетете [[doku>acl|документацията относно ACL]].
\ No newline at end of file
diff --git a/lib/plugins/acl/lang/bg/lang.php b/lib/plugins/acl/lang/bg/lang.php
index 4efadfbba15ff59c39823dafe1cc6069c19b14e0..2b956deba50f0fdbcd6b38fff77e9898c61023e1 100644
--- a/lib/plugins/acl/lang/bg/lang.php
+++ b/lib/plugins/acl/lang/bg/lang.php
@@ -5,7 +5,7 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
  * @author Viktor Usunov <usun0v@mail.bg>
- * @author Kiril Velikov neohidra@gmail.com
+ * @author Kiril <neohidra@gmail.com>
  */
 $lang['admin_acl']             = 'Управление на списъците за достъп';
 $lang['acl_group']             = 'Група';
@@ -14,15 +14,15 @@ $lang['acl_perms']             = 'Права за';
 $lang['page']                  = 'Страница';
 $lang['namespace']             = 'Именно пространство';
 $lang['btn_select']            = 'Избери';
-$lang['p_user_id']             = 'Потребителят <b class="acluser">%s</b> има в момента следните права за страницата <b class="aclpage">%s</b>: <i>%s</i>.';
-$lang['p_user_ns']             = 'Потребителят <b class="acluser">%s</b> има в момента следните права в именното пространство <b class="aclns">%s</b>: <i>%s</i>.';
-$lang['p_group_id']            = 'Членове на групата <b class="aclgroup">%s</b> имат в момента следните права за страницата <b class="aclpage">%s</b>: <i>%s</i>.';
-$lang['p_group_ns']            = 'Членове на групата <b class="aclgroup">%s</b> имат в момента следните права в именното пространство <b class="aclns">%s</b>: <i>%s</i>.';
-$lang['p_choose_id']           = 'Моля <b>въведете потребител или група</b> в полето горе, за да видите или промените правата за страницата <b class="aclpage">%s</b>.';
-$lang['p_choose_ns']           = 'Моля <b>въведете потребител или група</b> в полето горе, за да видите или промените правата за именното пространство <b class="aclns">%s</b>.';
-$lang['p_inherited']           = 'Забележка: Тези разрешения не са определени изрично, но са били наследени от други групи или именни пространства.';
-$lang['p_isadmin']             = 'Забележка: Избраните група или потребител притежават пълни права, според конфигурацията им.';
-$lang['p_include']             = 'Висши разрешения включват по-нисши такива. Създаване или премахване на разрешения се прилага само за именни пространства, не за страници.';
+$lang['p_user_id']             = 'Потребителят <b class="acluser">%s</b> в момента има следните права за страницата <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns']             = 'Потребителят <b class="acluser">%s</b> в момента има следните права за именното пространство <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id']            = 'Членовете на групата <b class="aclgroup">%s</b> в момента имат следните права за страницата <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns']            = 'Членовете на групата <b class="aclgroup">%s</b> в момента имат следните права за именното пространство <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id']           = 'Моля, <b>въведете потребител или група</b> в полето отгоре, за да видите или промените правата за страницата <b class="aclpage">%s</b>.';
+$lang['p_choose_ns']           = 'Моля, <b>въведете потребител или група</b> в полето отгоре, за да видите или промените правата за именното пространство <b class="aclns">%s</b>.';
+$lang['p_inherited']           = 'Бележка: Тези разрешения не са зададени директно, а са наследени от други групи или именни пространства.';
+$lang['p_isadmin']             = 'Бележка: Избраната група или потребител има всички права, защото е определен за суперпотребител.';
+$lang['p_include']             = 'Висши права включват по-нисшите такива. Правата за създаване, качване и изтриване са приложими само за именни пространства, но не  за страници.';
 $lang['current']               = 'Текущи ACL права';
 $lang['where']                 = 'Страница/Именно постранство';
 $lang['who']                   = 'Потребител/Група';
@@ -33,5 +33,5 @@ $lang['acl_perm2']             = 'Редактиране';
 $lang['acl_perm4']             = 'Създаване';
 $lang['acl_perm8']             = 'Качване';
 $lang['acl_perm16']            = 'Изтриване';
-$lang['acl_new']               = 'Добавяне на ново';
-$lang['acl_mod']               = 'Промяна на вписване';
+$lang['acl_new']               = 'Добавяне на право';
+$lang['acl_mod']               = 'Промяна на записа';
diff --git a/lib/plugins/acl/lang/et/lang.php b/lib/plugins/acl/lang/et/lang.php
index 2f7208b7c3da958ba250f161b6a4304199bc63b2..04ce0c08a25424e5dfa62ff9cf7c9e410ff7d6f3 100644
--- a/lib/plugins/acl/lang/et/lang.php
+++ b/lib/plugins/acl/lang/et/lang.php
@@ -3,21 +3,19 @@
  * Estonian language file
  *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @author     Oliver S6ro <seem.iges@mail.ee>
- * @author     Aari Juhanson <aari@vmg.vil.ee>
- * @author     Kaiko Kaur <kaiko@kultuur.edu.ee>
+ * @author Oliver S6ro <seem.iges@mail.ee>
+ * @author Aari Juhanson <aari@vmg.vil.ee>
+ * @author Kaiko Kaur <kaiko@kultuur.edu.ee>
+ * @author kristian.kankainen@kuu.la
  */
-
-$lang['admin_acl']  = 'Ligipääsukontrolli nimekirja haldamine';
-$lang['acl_group']  = 'Grupp';
-$lang['acl_user']   = 'Kasutaja';
-$lang['acl_perms']  = 'Lubatud';
-$lang['page']       = 'leht';
-$lang['namespace']  = 'alajaotus';
-
-$lang['acl_perm1']  = 'Lugemine';
-$lang['acl_perm2']  = 'Toimetamine';
-$lang['acl_perm4']  = 'Tekitamine';
-$lang['acl_perm8']  = 'Üles laadimine';
-$lang['acl_new']    = 'Uue kirje lisamine';
-//Setup VIM: ex: et ts=2 :
+$lang['admin_acl']             = 'Ligipääsukontrolli nimekirja haldamine';
+$lang['acl_group']             = 'Grupp';
+$lang['acl_user']              = 'Kasutaja';
+$lang['acl_perms']             = 'Lubatud';
+$lang['page']                  = 'leht';
+$lang['namespace']             = 'alajaotus';
+$lang['acl_perm1']             = 'Lugemine';
+$lang['acl_perm2']             = 'Toimetamine';
+$lang['acl_perm4']             = 'Tekitamine';
+$lang['acl_perm8']             = 'Üles laadimine';
+$lang['acl_new']               = 'Uue kirje lisamine';
diff --git a/lib/plugins/acl/lang/ru/lang.php b/lib/plugins/acl/lang/ru/lang.php
index 20e887240f36f01fed3923a7f17d76cf1a8aae10..6d04dde218654aeb262a89c9a4682d8f1d0527b2 100644
--- a/lib/plugins/acl/lang/ru/lang.php
+++ b/lib/plugins/acl/lang/ru/lang.php
@@ -14,6 +14,7 @@
  * @author Aleksey Osadchiy <rfc@nm.ru>
  * @author Aleksandr Selivanov <alexgearbox@gmail.com>
  * @author Ladyko Andrey <fylh@succexy.spb.ru>
+ * @author Eugene <windy.wanderer@gmail.com>
  */
 $lang['admin_acl']             = 'Управление списками контроля доступа';
 $lang['acl_group']             = 'Группа';
diff --git a/lib/plugins/acl/lang/sl/help.txt b/lib/plugins/acl/lang/sl/help.txt
new file mode 100644
index 0000000000000000000000000000000000000000..eada41c297dc92174548f2c13e8aaa96e114e190
--- /dev/null
+++ b/lib/plugins/acl/lang/sl/help.txt
@@ -0,0 +1,11 @@
+=== Hitra pomoè ===
+
+Na tej strani je mogoèe dodajati, odstranjevati in spreminjati dovoljenja za delo z wiki stranmi in imenskimi prostori.
+
+Na veli strani so izpisani vsi imenski prostori in strani.
+
+Na obrazcu zgoraj je mogoèe pregledovati in spreminjati dovoljenja za izbranega uporabnika ali skupino.
+
+V preglednici spodaj so prikazana vsa pravila nadzora. Ta je mogoèe hitro spreminjati ali brisati.
+
+Veè podrobnosti o delovanju nadzora dostopa sistema DokuWiki je mogoèe najti v [[doku>acl|uradni dokumentaciji ACL]].
diff --git a/lib/plugins/acl/lang/sl/lang.php b/lib/plugins/acl/lang/sl/lang.php
index 45fdc98f4215b03e3543bd137e823ed8d1d66ffb..3fb391570bfe5e7988299e5e46325ee4b3743d53 100644
--- a/lib/plugins/acl/lang/sl/lang.php
+++ b/lib/plugins/acl/lang/sl/lang.php
@@ -7,7 +7,7 @@
  * @author Gregor Skumavc (grega.skumavc@gmail.com)
   * @author Matej Urbančič (mateju@svn.gnome.org)
  */
-$lang['admin_acl']             = 'Skrbništvo ACL';
+$lang['admin_acl']             = 'Upravljanje dostopa';
 $lang['acl_group']             = 'Skupina';
 $lang['acl_user']              = 'Uporabnik';
 $lang['acl_perms']             = 'Dovoljenja za';
@@ -23,7 +23,7 @@ $lang['p_choose_ns']           = 'Vnesite ime <b>uporabnika ali skupine</b> v zg
 $lang['p_inherited']           = 'Opomba: trenutna dovoljenja niso bila posebej določena, temveč so bila prevzeta iz drugih skupin ali višjih imenskih prostorov.';
 $lang['p_isadmin']             = 'Opomba: izbrana skupina ali uporabnik imajo vsa dovoljenja za spreminjanje, saj so določeni kot skrbniki sistema.';
 $lang['p_include']             = 'Višja dovoljenja vključujejo tudi nižja. ';
-$lang['current']               = 'Trenutna ACL pravila';
+$lang['current']               = 'Trenutna pravila dostopa';
 $lang['where']                 = 'Stran / Imenski prostor';
 $lang['who']                   = 'Uporabnik/Skupina';
 $lang['perm']                  = 'Dovoljenja';
diff --git a/lib/plugins/acl/lang/zh-tw/lang.php b/lib/plugins/acl/lang/zh-tw/lang.php
index 067d15d947979355d0c85d5bfbc17fc7baace97a..08553786419a128ffca763144655d974ed9eeb1d 100644
--- a/lib/plugins/acl/lang/zh-tw/lang.php
+++ b/lib/plugins/acl/lang/zh-tw/lang.php
@@ -10,6 +10,7 @@
  * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
  * @author Cheng-Wei Chien <e.cwchien@gmail.com>
  * @author Danny Lin <danny0838@pchome.com.tw>
+ * @author Shuo-Ting Jian <shoting@gmail.com>
  */
 $lang['admin_acl']             = '管理存取控制表 (ACL)';
 $lang['acl_group']             = '群組';
diff --git a/lib/plugins/acl/lang/zh/lang.php b/lib/plugins/acl/lang/zh/lang.php
index d79a7808921834d1144da5eabacd5d7b73fe23ab..50b9d63af73d39f2178f3e14601fe04cbfcb15de 100644
--- a/lib/plugins/acl/lang/zh/lang.php
+++ b/lib/plugins/acl/lang/zh/lang.php
@@ -11,6 +11,7 @@
  * @author ben <ben@livetom.com>
  * @author lainme <lainme993@gmail.com>
  * @author caii <zhoucaiqi@gmail.com>
+ * @author Hiphen Lee <jacob.b.leung@gmail.com>
  */
 $lang['admin_acl']             = '访问控制列表(ACL)管理器';
 $lang['acl_group']             = '组';
diff --git a/lib/plugins/acl/pix/group.png b/lib/plugins/acl/pix/group.png
index 7fb4e1f1e1cd6ee67d33ffd24f09ddd5c3478bec..d80eb2606865fabcbc9ee53e2e0d1534df8c6337 100644
Binary files a/lib/plugins/acl/pix/group.png and b/lib/plugins/acl/pix/group.png differ
diff --git a/lib/plugins/acl/pix/ns.png b/lib/plugins/acl/pix/ns.png
index da3c2a2d74bab159ba0f65d7db601768258afcb2..c35e832da26a01c0a1a54ca6c88b8ae9423c8b00 100644
Binary files a/lib/plugins/acl/pix/ns.png and b/lib/plugins/acl/pix/ns.png differ
diff --git a/lib/plugins/acl/pix/page.png b/lib/plugins/acl/pix/page.png
index 03ddd799fa0a3aec561c75d4221f195db65d6eb9..b1b7ebe941933c67b3db758ffbc4149f3043631f 100644
Binary files a/lib/plugins/acl/pix/page.png and b/lib/plugins/acl/pix/page.png differ
diff --git a/lib/plugins/acl/pix/user.png b/lib/plugins/acl/pix/user.png
index 8fd539e9cb04111e950ac9b0cce82676f12f67d4..7b4a507a0007c2d7237c9450d344eb51877ad155 100644
Binary files a/lib/plugins/acl/pix/user.png and b/lib/plugins/acl/pix/user.png differ
diff --git a/lib/plugins/config/images/danger.png b/lib/plugins/config/images/danger.png
index c37bd062e60c3b38fc82e4d1f236a8ac2fae9d8c..7bd84f7a36dedfa8107314e54836462ab93e5f7a 100644
Binary files a/lib/plugins/config/images/danger.png and b/lib/plugins/config/images/danger.png differ
diff --git a/lib/plugins/config/images/security.png b/lib/plugins/config/images/security.png
index 2ebc4f6f9663e32cad77d67ef93ab8843dfea3c0..1800f8e56b81fe93899caf3e79d840e83a66c0f2 100644
Binary files a/lib/plugins/config/images/security.png and b/lib/plugins/config/images/security.png differ
diff --git a/lib/plugins/config/images/warning.png b/lib/plugins/config/images/warning.png
index 628cf2dae3d419ae220c8928ac71393b480745a3..c5e482f84b3a140a062da69cd86d0a98019a8fcb 100644
Binary files a/lib/plugins/config/images/warning.png and b/lib/plugins/config/images/warning.png differ
diff --git a/lib/plugins/config/lang/bg/intro.txt b/lib/plugins/config/lang/bg/intro.txt
index fc455981ef0ec8a2bd699dd37f9bfba8a3cb0587..db09e6838c9e26d41cc86b2cdd87945ab445151e 100644
--- a/lib/plugins/config/lang/bg/intro.txt
+++ b/lib/plugins/config/lang/bg/intro.txt
@@ -1,7 +1,7 @@
-====== Управление на настройките ======
+====== Диспечер на настройките ======
 
-От страница можете да управлявате настройките на вашето Dokuwiki. За отделните настройки вижте [[doku>config]]. За повече информация относно тази приставка вижте  [[doku>plugin:config]].
+От тук можете да управлявате настройките на вашето Dokuwiki. За отделните настройки вижте [[doku>config]]. За повече информация относно тази приставка вижте  [[doku>plugin:config]].
 
-Настройките изобразени със светло червен фон за защитени и не могат да бъдат променяни с тази приставка. Настройките показани със син фон са стандартни стойности, а настройките с бял фон са били настроени локално за тази конкретна инсталация. Можете да променяте както сините, така и белите настройки.
+Настройките изобразени със светло червен фон са защитени и не могат да бъдат променяни с тази приставка. Настройките показани със син фон са стандартните стойности, а настройките с бял фон са били настроени локално за тази конкретна инсталация. Можете да променяте както сините, така и белите настройки.
 
 Не забравяйте да натиснете бутона **ЗАПИС** преди да напуснете страницата, в противен случай промените няма да бъдат приложени.
diff --git a/lib/plugins/config/lang/bg/lang.php b/lib/plugins/config/lang/bg/lang.php
index 8b32f182cf84f9680b45364cadd511351bfd719d..eb2c3a426c7fc0894afb3b2a863c5b4301c2f15c 100644
--- a/lib/plugins/config/lang/bg/lang.php
+++ b/lib/plugins/config/lang/bg/lang.php
@@ -5,76 +5,76 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
  * @author Viktor Usunov <usun0v@mail.bg>
- * @author Kiril Velikov neohidra@gmail.com
+ * @author Kiril <neohidra@gmail.com>
  */
 $lang['menu']                  = 'Настройки';
-$lang['error']                 = 'Невъзможно е обновяването на настройките, поради невалидна стойност, моля, прегледайте промените си и пробвайте отново.
-                       <br />Неверните стойности ще бъдат обградени с червена рамка.';
-$lang['updated']               = 'Обновяването на настройките бе успешно.';
+$lang['error']                 = 'Обновяването на настройките е невъзможно, поради невалидна стойност, моля, прегледайте промените си и пробвайте отново.
+<br />Неверните стойности ще бъдат обградени с червена рамка.';
+$lang['updated']               = 'Обновяването на настройките е успешно.';
 $lang['nochoice']              = '(няма друг възможен избор)';
-$lang['locked']                = 'Невъзможно е обновяването на файлът с настройките, ако това не е нарочно, проверете,<br /> дали локалните име на файл  и права са верни.';
-$lang['danger']                = 'Внимание: промяна на тази опция може да направи уикито и конфигурационното меню недостъпни.';
-$lang['warning']               = 'Предупреждение: промяна на тази опция може предизвика нежелани реакции.';
-$lang['security']              = 'Предупреждение: промяната на тази опция може да представлява риск за сигурността.';
-$lang['_configuration_manager'] = 'Управление на настройките';
-$lang['_header_dokuwiki']      = 'DokuWiki настройки';
-$lang['_header_plugin']        = 'Настройки на приставките';
-$lang['_header_template']      = 'Настройки на шаблоните';
+$lang['locked']                = 'Обновяването на файла с настройките е невъзможно, ако това не е нарочно, проверете,<br /> дали името на локалния файл с настройки и правата са верни.';
+$lang['danger']                = 'Внимание: промяна на опцията може да направи wiki-то и менюто за настройване недостъпни.';
+$lang['warning']               = 'Предупреждение: промяна на опцията може предизвика нежелани последици.';
+$lang['security']              = 'Предупреждение: промяна на опцията може да представлява риск за сигурността.';
+$lang['_configuration_manager'] = 'Диспечер на настройките';
+$lang['_header_dokuwiki']      = 'Настройки на DokuWiki';
+$lang['_header_plugin']        = 'Настройки на приставки';
+$lang['_header_template']      = 'Настройки на шаблони';
 $lang['_header_undefined']     = 'Неопределени настройки';
 $lang['_basic']                = 'Основни настройки';
 $lang['_display']              = 'Настройки на показването';
-$lang['_authentication']       = 'Настройки на идентификацията';
-$lang['_anti_spam']            = 'Анти-спам настройки';
-$lang['_editing']              = 'Настройки на редактирането';
+$lang['_authentication']       = 'Настройки за удостоверяване';
+$lang['_anti_spam']            = 'Настройки за борба със SPAM-ма';
+$lang['_editing']              = 'Настройки за редактиране';
 $lang['_links']                = 'Настройки на препратките';
 $lang['_media']                = 'Настройки на медията';
 $lang['_advanced']             = 'Допълнителни настройки';
 $lang['_network']              = 'Мрежови настройки';
-$lang['_plugin_sufix']         = 'Настройки на приставките';
+$lang['_plugin_sufix']         = 'Настройки на приставки';
 $lang['_template_sufix']       = 'Настройки на шаблони';
-$lang['_msg_setting_undefined'] = 'Няма метаданни на настройките.';
+$lang['_msg_setting_undefined'] = 'Няма метаданни за настройките.';
 $lang['_msg_setting_no_class'] = 'Няма клас настройки.';
 $lang['_msg_setting_no_default'] = 'Няма стандартна стойност.';
-$lang['fmode']                 = 'Режим(права) на създаване на файловете';
-$lang['dmode']                 = 'Режим(права) за създаване на директориите';
+$lang['fmode']                 = 'Режим (права) за създаване на файлове';
+$lang['dmode']                 = 'Режим (права) за създаване на директории';
 $lang['lang']                  = 'Език';
-$lang['basedir']               = 'Главна директория';
-$lang['baseurl']               = 'Главен адрес (URL)';
+$lang['basedir']               = 'Главна директория (напр. <code>/dokuwiki/</code>). Оставете празно, за да бъде засечена автоматично.';
+$lang['baseurl']               = 'URL адрес (напр. <code>http://www.yourserver.com</code>). Оставете празно, за да бъде засечен автоматично.';
 $lang['savedir']               = 'Директория за записване на данните';
 $lang['start']                 = 'Име на началната страница';
-$lang['title']                 = 'Име на Wiki';
+$lang['title']                 = 'Име на Wiki-то';
 $lang['template']              = 'Шаблон';
 $lang['license']               = 'Под какъв лиценз да бъде публикувано съдържанието?';
-$lang['fullpath']              = 'Показване на пълния път до страниците в долния им край.';
-$lang['recent']                = 'Последни промени';
+$lang['fullpath']              = 'Показване на пълния път до страниците в долния колонтитул.';
+$lang['recent']                = 'Скорошни промени';
 $lang['breadcrumbs']           = 'Брой на следите';
 $lang['youarehere']            = 'Йерархични следи';
 $lang['typography']            = 'Поправяне на разместени букви';
-$lang['htmlok']                = 'Позволяване на вграден HTML код';
-$lang['phpok']                 = 'Позволяване на вграден PHP код';
+$lang['htmlok']                = 'Разрешаване вграждането на HTML код';
+$lang['phpok']                 = 'Разрешаване вграждането на PHP код';
 $lang['dformat']               = 'Формат на датата (виж. <a href="http://www.php.net/strftime">strftime</a> функцията на PHP)';
 $lang['signature']             = 'Подпис';
 $lang['toptoclevel']           = 'Главно ниво за съдържанието';
-$lang['tocminheads']           = 'Минимална сума на заглавията, която определя дали съдържанието е създадено';
+$lang['tocminheads']           = 'Минимален брой заглавия, определящ дали съдържанието е създадено';
 $lang['maxtoclevel']           = 'Максимално ниво на съдържанието';
-$lang['maxseclevel']           = 'Максимално ниво на редактиране на секция';
-$lang['camelcase']             = 'Използване на CamelCase за препратки';
-$lang['deaccent']              = 'Окончателни имена на страници';
-$lang['useheading']            = 'Използване на първото заглавие за име на страница';
+$lang['maxseclevel']           = 'Максимално ниво за редактиране на секция';
+$lang['camelcase']             = 'Ползване на CamelCase за линкове';
+$lang['deaccent']              = 'Почистване имената на страниците (на файловете)';
+$lang['useheading']            = 'Ползване на първото заглавие за име на страница';
 $lang['refcheck']              = 'Проверка за препратка на медия';
-$lang['refshow']               = 'Брой на показани медийни препратки';
-$lang['allowdebug']            = 'Пускане на debug <b>изключете, ако не е нужен!</b>';
-$lang['usewordblock']          = 'Блокиране на спам базирано на списък от думи';
-$lang['indexdelay']            = 'Забавяне преди индексиране(секунди)';
-$lang['relnofollow']           = 'Използване на rel="nofollow" за външни връзки';
+$lang['refshow']               = 'Брой на показваните медийни препратки';
+$lang['allowdebug']            = 'Включване на debug <b>изключете, ако не е нужен!</b>';
+$lang['usewordblock']          = 'Блокиране на SPAM въз основа на на списък от думи';
+$lang['indexdelay']            = 'Забавяне преди индексиране (сек)';
+$lang['relnofollow']           = 'Ползване на rel="nofollow" за външни препратки';
 $lang['mailguard']             = 'Промяна на адресите на ел. поща (във форма непозволяваща пращането на SPAM)';
 $lang['iexssprotect']          = 'Проверяване на качените файлове за възможно зловреден JavaScript и HTML код';
-$lang['showuseras']            = 'Какво да се показва на дисплея за потребителя, който последно е променил тази страница';
-$lang['useacl']                = 'Използване на списъци за достъп';
+$lang['showuseras']            = 'Какво да се показва за потребителя, който последно е променил страницата';
+$lang['useacl']                = 'Ползване на списъци за достъп';
 $lang['autopasswd']            = 'Автоматично генериране на пароли';
-$lang['authtype']              = 'Метод на идентификация';
+$lang['authtype']              = 'Метод за удостоверяване';
 $lang['passcrypt']             = 'Метод за криптиране на паролите';
-$lang['defaultgroup']          = 'Група по подразбиране';
+$lang['defaultgroup']          = 'Стандартна група';
 $lang['superuser']             = 'Супер потребител - група или потребител с пълен достъп до всички страници и функции без значение от настройките на списъците за достъп (ACL)';
 $lang['manager']               = 'Управител - група или потребител, с достъп до определени управляващи фунции ';
 $lang['profileconfirm']        = 'Потвърждаване на промени в профила с парола';
@@ -83,58 +83,61 @@ $lang['disableactions_check']  = 'Проверка';
 $lang['disableactions_subscription'] = 'Записване/Отписване';
 $lang['disableactions_wikicode'] = 'Преглед на кода/Експортиране на оригинална версия';
 $lang['disableactions_other']  = 'Други действия (разделени със запетая)';
-$lang['sneaky_index']          = 'По подразбиране DokuWiki ще показва всички именни пространства в индекса. Избирането на настройката ще доведе до скриване на тези, за които потребителят няма права за четене. Това може да означава и скриване на достъпните подименни пространства. Това може да направи индекса неизползваем при определени настрокйки на списъците за контрол на достъп (ACL). ';
-$lang['auth_security_timeout'] = 'Изчакване при вписване преди Timeout (в секунди)';
-$lang['securecookie']          = 'Да се изпращат ли бисквитки, посочени чрез HTTPS, само чрез HTTPS от браузъра? Забранете тази опция, когато SSL се използва само за вписване в системата, а четенето е възможно и без SSL.
+$lang['sneaky_index']          = 'Стандартно DokuWiki ще показва всички именни пространства в индекса. Опцията скрива тези, за които потребителят няма права за четене. Това може да доведе и до скриване на иначе достъпни подименни пространства. С определени настройки на списъците за контрол на достъпа (ACL) може да направи индекса неизползваем. ';
+$lang['auth_security_timeout'] = 'Считане на вписване за неуспешно след (сек)';
+$lang['securecookie']          = 'Да се изпращат ли бисквитките зададени чрез HTTPS, само чрез HTTPS от браузъра? Изключете опцията, когато SSL се ползва само за вписване в системата, а четенето е възможно и без SSL.
 ';
-$lang['xmlrpc']                = 'Включване/Изключване на XML-RPC интерфейса.';
-$lang['xmlrpcuser']            = 'Ограничаване на XML-RPC достъп до дадени тук и отделени със запетая групи или потребители. Оставете празни да даде достъп до всички.';
-$lang['updatecheck']           = 'Проверка за нови версии и предупреждения за сигурност? Dokiwiki трябва да може да се свърже със  splitbrain.org за тази функционалност.';
-$lang['userewrite']            = 'Използване на валидни URL';
+$lang['xmlrpc']                = 'Включване/Изключване на интерфейса XML-RPC.';
+$lang['xmlrpcuser']            = 'Ограничаване на XML-RPC достъпа до отделени със запетая групи или потребители. Оставете празно, за да даде достъп на всеки.';
+$lang['updatecheck']           = 'Проверяване за за нови версии и предупреждения за сигурността? Необходимо е Dokiwiki да може да се свързва със splitbrain.org за тази функционалност.';
+$lang['userewrite']            = 'Ползване на nice URL адреси';
 $lang['useslash']              = 'Ползване на наклонена черта за разделител на именните пространства в URL';
-$lang['usedraft']              = 'Автоматично запазване на чернова при редактиране';
+$lang['usedraft']              = 'Автоматично запазване на чернова по време на редактиране';
 $lang['sepchar']               = 'Разделител между думите в имената на страници';
-$lang['canonical']             = 'Използване на уеднаквени URL';
+$lang['canonical']             = 'Ползване на напълно уеднаквени URL адреси';
 $lang['fnencode']              = 'Метод за кодиране на не-ASCII именуваните файлове.';
-$lang['autoplural']            = 'Проверка за множествено число в препратките';
+$lang['autoplural']            = 'Проверяване за множествено число в препратките';
 $lang['compression']           = 'Метод за компресия на attic файлове';
-$lang['cachetime']             = 'Максимална възраст на кеша (сек)';
-$lang['locktime']              = 'Максимална възраст на заключените файлове (сек)';
+$lang['cachetime']             = 'Макс. период за съхраняване на кеша (сек)';
+$lang['locktime']              = 'Макс. период за съхраняване на заключените файлове (сек)';
 $lang['fetchsize']             = 'Максимален размер (байтове), който fetch.php може да сваля';
 $lang['notify']                = 'Пращане на съобщения за промени на тази eл. поща';
 $lang['registernotify']        = 'Пращане информация за нови потребители на тази ел. поща';
 $lang['mailfrom']              = 'Ел. поща, която да се ползва за автоматично изпращане на ел. писма';
+$lang['mailprefix']            = 'Представка за темите (поле subject) на автоматично изпращаните ел. писма';
 $lang['gzip_output']           = 'Кодиране на съдържанието с gzip за xhtml';
 $lang['gdlib']                 = 'Версия на GD Lib';
 $lang['im_convert']            = 'Път до инструмента за трансформация на ImageMagick';
 $lang['jpg_quality']           = 'Kачество на JPG компресията (0-100)';
 $lang['subscribers']           = 'Включване на поддръжката за абониране към страници';
+$lang['subscribe_time']        = 'Време след което абонаментните списъци и обобщения се изпращат (сек); Трябва да е по-малко от времето определено в recent_days.';
 $lang['compress']              = 'Компактен CSS и javascript изглед';
 $lang['hidepages']             = 'Скриване на съвпадащите страници (regular expressions)';
 $lang['send404']               = 'Пращане на "HTTP 404/Page Not Found" за несъществуващи страници';
 $lang['sitemap']               = 'Генериране на Google sitemap (дни)';
 $lang['broken_iua']            = 'Отметнете, ако ignore_user_abort функцията не работи. Може да попречи на търсенето в страниците. Знае се, че комбинацията IIS+PHP/CGI е лоша. Вижте  <a href="http://bugs.splitbrain.org/?do=details&amp;task_id=852">Грешка 852</a> за повече информация.';
 $lang['xsendfile']             = 'Ползване на Х-Sendfile header, за да може уебсървъра да дава статични файлове? Вашият уебсървър трябва да го поддържа.';
-$lang['renderer_xhtml']        = 'Показвай main (XHTML) код за wiki';
-$lang['renderer__core']        = '%s (DokuWiki ядро)';
+$lang['renderer_xhtml']        = 'Представяне на основните изходни данни (xhtml) от wiki-то с';
+$lang['renderer__core']        = '%s (ядрото на DokuWiki)';
 $lang['renderer__plugin']      = '%s (приставка)';
 $lang['rememberme']            = 'Ползване на постоянни бисквитки за вписване (запомни ме)';
-$lang['rss_type']              = 'Тип на XML feed';
-$lang['rss_linkto']            = 'XML feed препраща към';
-$lang['rss_content']           = 'Какво да се показва в XML feed елементите?';
-$lang['rss_update']            = 'Интервал на обновяване XML източника (сек)';
-$lang['recent_days']           = 'Колко последни промени да се пазят (дни)';
-$lang['rss_show_summary']      = 'XML feed show summary in title';
+$lang['rss_type']              = 'Тип на XML емисията';
+$lang['rss_linkto']            = 'XML емисията препраща към';
+$lang['rss_content']           = 'Какво да показват елементите на XML емисията?';
+$lang['rss_update']            = 'Интервал на актуализиране на XML емисията (сек)';
+$lang['recent_days']           = 'Колко от скорошните промени да се пазят (дни)';
+$lang['rss_show_summary']      = 'Показване на обобщение в заглавието на XML емисията';
 $lang['target____wiki']        = 'Прозорец за вътрешни препратки';
-$lang['target____interwiki']   = 'Прозорец за вътреуики препратки';
+$lang['target____interwiki']   = 'Прозорец за препратки в wiki-то';
 $lang['target____extern']      = 'Прозорец за външни препратки';
 $lang['target____media']       = 'Прозорец за медийни препратки';
-$lang['target____windows']     = 'Прозорец за Windows препратки';
+$lang['target____windows']     = 'Прозорец за препратки към Windows';
 $lang['proxy____host']         = 'Име на прокси сървър';
-$lang['proxy____port']         = 'Порт на проксито';
+$lang['proxy____port']         = 'Порт за проксито';
 $lang['proxy____user']         = 'Потребител за проксито';
 $lang['proxy____pass']         = 'Парола за проксито';
-$lang['proxy____ssl']          = 'Ползване на SSL за връзката с проксито';
+$lang['proxy____ssl']          = 'Ползване на SSL при свързване с проксито';
+$lang['proxy____except']       = 'Регулярен израз определящ за кои URL адреси да не се ползва прокси сървър.';
 $lang['safemodehack']          = 'Ползване на хака safemode';
 $lang['ftp____host']           = 'FTP сървър за хака safemode';
 $lang['ftp____port']           = 'FTP порт за хака safemode';
@@ -146,11 +149,11 @@ $lang['typography_o_0']        = 'без';
 $lang['typography_o_1']        = 'с изключение на единични кавички';
 $lang['typography_o_2']        = 'включително единични кавички (не винаги работи)';
 $lang['userewrite_o_0']        = 'без';
-$lang['userewrite_o_1']        = '.htaccess файлa';
+$lang['userewrite_o_1']        = 'файлът .htaccess';
 $lang['userewrite_o_2']        = 'вътрешно от DokuWiki ';
 $lang['deaccent_o_0']          = 'изключено';
 $lang['deaccent_o_1']          = 'премахване на акценти';
-$lang['deaccent_o_2']          = 'романизация';
+$lang['deaccent_o_2']          = 'транслитерация';
 $lang['gdlib_o_0']             = 'GD Lib не е достъпна';
 $lang['gdlib_o_1']             = 'Версия 1.x';
 $lang['gdlib_o_2']             = 'Автоматично разпознаване';
@@ -160,12 +163,12 @@ $lang['rss_type_o_rss2']       = 'RSS версия 2.0';
 $lang['rss_type_o_atom']       = 'Atom версия 0.3';
 $lang['rss_type_o_atom1']      = 'Atom версия 1.0';
 $lang['rss_content_o_abstract'] = 'Извлечение';
-$lang['rss_content_o_diff']    = 'Обединен Diff';
-$lang['rss_content_o_htmldiff'] = 'Diff таблица в HTML формат';
+$lang['rss_content_o_diff']    = 'Обединени разлики';
+$lang['rss_content_o_htmldiff'] = 'Таблица с разликите в HTML формат';
 $lang['rss_content_o_html']    = 'Цялото съдържание на HTML страницата';
 $lang['rss_linkto_o_diff']     = 'изглед на разликите';
 $lang['rss_linkto_o_page']     = 'променената страница';
-$lang['rss_linkto_o_rev']      = 'списък на версииte';
+$lang['rss_linkto_o_rev']      = 'списък на версиите';
 $lang['rss_linkto_o_current']  = 'текущата страница';
 $lang['compression_o_0']       = 'без';
 $lang['compression_o_gz']      = 'gzip';
@@ -174,11 +177,12 @@ $lang['xsendfile_o_0']         = 'не използвайте';
 $lang['xsendfile_o_1']         = 'Специфичен lighttpd header (преди версия 1.5)';
 $lang['xsendfile_o_2']         = 'Стандартен X-Sendfile header';
 $lang['xsendfile_o_3']         = 'Специфичен Nginx X-Accel-Redirect header за пренасочване';
-$lang['showuseras_o_loginname'] = 'Потребителско име';
+$lang['showuseras_o_loginname'] = 'Име за вписване';
 $lang['showuseras_o_username'] = 'Пълно потребителско име';
-$lang['showuseras_o_email']    = 'Адресите на ел, поща на потребителите (променени според настройките на mailguard)';
-$lang['showuseras_o_email_link'] = 'Адресите на ел. поща на потребителите под формата на mailto: връзка';
+$lang['showuseras_o_email']    = 'Ел, поща на потребителите (променени според настройките на mailguard)';
+$lang['showuseras_o_email_link'] = 'Ел. поща на потребителите под формата на mailto: връзки';
 $lang['useheading_o_0']        = 'Никога';
 $lang['useheading_o_navigation'] = 'Само за навигация';
 $lang['useheading_o_content']  = 'Само за съдържанието на Wiki-то';
 $lang['useheading_o_1']        = 'Винаги';
+$lang['readdircache']          = 'Максимален период за съхраняване кеша на readdir (сек)';
diff --git a/lib/plugins/config/lang/et/lang.php b/lib/plugins/config/lang/et/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..0ffea1244dc590070413a5028a567a478e3b2376
--- /dev/null
+++ b/lib/plugins/config/lang/et/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Estonian language file
+ *
+ * @author kristian.kankainen@kuu.la
+ */
diff --git a/lib/plugins/config/lang/nl/lang.php b/lib/plugins/config/lang/nl/lang.php
index a9e0d935f385d00dbbc6ff7e613605fef990fb14..1b630b12ed59aabf3efcb5cd832519c0ee6ba06b 100644
--- a/lib/plugins/config/lang/nl/lang.php
+++ b/lib/plugins/config/lang/nl/lang.php
@@ -109,6 +109,7 @@ $lang['fetchsize']             = 'Maximum grootte (bytes) die fetch.php mag down
 $lang['notify']                = 'Stuur e-mailnotificaties naar dit adres';
 $lang['registernotify']        = 'Stuur informatie over nieuw aangemelde gebruikers naar dit e-mailadres';
 $lang['mailfrom']              = 'E-mailadres voor automatische e-mail';
+$lang['mailprefix']            = 'Te gebruiken voorvoegsel voor onderwerp automatische email';
 $lang['gzip_output']           = 'Gebruik gzip Content-Encoding voor xhtml';
 $lang['gdlib']                 = 'Versie GD Lib ';
 $lang['im_convert']            = 'Path naar ImageMagick\'s convert tool';
diff --git a/lib/plugins/config/lang/ro/lang.php b/lib/plugins/config/lang/ro/lang.php
index 7eb22c341e694e10edc57de7433f5ddf81834537..c6457f31131bc7bc98014f9a2435649095c5a480 100644
--- a/lib/plugins/config/lang/ro/lang.php
+++ b/lib/plugins/config/lang/ro/lang.php
@@ -104,6 +104,7 @@ $lang['fetchsize']             = 'Dimensiunea maximă (byte) pe care fetch.php p
 $lang['notify']                = 'Trimite notificări privind modificările pe această adresă de email';
 $lang['registernotify']        = 'Trimite informare noilor utilizatori înregistraţi pe această adresă de email';
 $lang['mailfrom']              = 'Adresa de email utilizată pentru mailuri automate';
+$lang['mailprefix']            = 'Prefix subiect e-mail de folosit pentru mail-uri automate';
 $lang['gzip_output']           = 'Foloseşte gzip pentru codarea conţinutului xhtml';
 $lang['gdlib']                 = 'Versiunea GD Lib';
 $lang['im_convert']            = 'Calea către instrumentul de conversie ImageMagick';
@@ -136,6 +137,7 @@ $lang['proxy____port']         = 'Port Proxy';
 $lang['proxy____user']         = 'Nume utilizator Proxy';
 $lang['proxy____pass']         = 'Parolă Proxy';
 $lang['proxy____ssl']          = 'FoloseÅŸte SSL pentru conectare la Proxy';
+$lang['proxy____except']       = 'Expresie regulară de potrivit cu URL-uri pentru care proxy-ul trebuie păsuit.';
 $lang['safemodehack']          = 'Activează safemode hack';
 $lang['ftp____host']           = 'Server FTP pentru safemode hack';
 $lang['ftp____port']           = 'Port FTP pentru safemode hack';
@@ -183,3 +185,4 @@ $lang['useheading_o_0']        = 'Niciodată';
 $lang['useheading_o_navigation'] = 'Doar navigare';
 $lang['useheading_o_content']  = 'Doar conţinutul Wiki';
 $lang['useheading_o_1']        = 'ÃŽntotdeauna';
+$lang['readdircache']          = 'Vârsta maximă depozitare readdir (sec)';
diff --git a/lib/plugins/config/lang/ru/lang.php b/lib/plugins/config/lang/ru/lang.php
index 47cb09a0adaeb4fcba4e696ad36b470519924312..f29257a28cf5967e691a322971d38eafeda01036 100644
--- a/lib/plugins/config/lang/ru/lang.php
+++ b/lib/plugins/config/lang/ru/lang.php
@@ -15,6 +15,7 @@
  * @author Aleksey Osadchiy <rfc@nm.ru>
  * @author Aleksandr Selivanov <alexgearbox@gmail.com>
  * @author Ladyko Andrey <fylh@succexy.spb.ru>
+ * @author Eugene <windy.wanderer@gmail.com>
  */
 $lang['menu']                  = 'Настройки вики';
 $lang['error']                 = 'Настройки не были сохранены из-за ошибки в одном из значений. Пожалуйста, проверьте свои изменения и попробуйте ещё раз.<br />Неправильные значения будут обведены красной рамкой.';
diff --git a/lib/plugins/config/lang/sl/intro.txt b/lib/plugins/config/lang/sl/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..506cd34bdecd5a1dc2f44c8ddc65b1d035e0eef1
--- /dev/null
+++ b/lib/plugins/config/lang/sl/intro.txt
@@ -0,0 +1,7 @@
+====== Splošne nastavitve ======
+
+Na tej strani je mogoče spreminjati nastavitve sistema DokuWiki. Pomoč o posameznih nastavitvah je na voljo med [[doku>config|nastavitvami]]. Več podrobnosti o vstavku je na voljo na [[doku>plugin:config|nastavitvami vstavka]].
+
+Nastavitve označene s svetlo rdečim ozadjem so zaščitene in jih s tem vstavkom ni mogoče spreminjati. Nastavitve označene s svetlo modrim ozadjem so privzete vrednosti in nastavitve z belim ozadjem so tiste, ki so bile določene krajevno posebej za to nastavitev. Spreminjati je mogoče vrednosti označene z modrimi in belim ozadjem.
+
+Spremembe je treba **shraniti**, da se uveljavijo, sicer se spremembe prezrejo.
diff --git a/lib/plugins/config/lang/sl/lang.php b/lib/plugins/config/lang/sl/lang.php
index e8fd345330074a0fba1fa838401d816e0de1d7c4..dadd0159594be02c16c5dc201fbe7b338e5fd65e 100644
--- a/lib/plugins/config/lang/sl/lang.php
+++ b/lib/plugins/config/lang/sl/lang.php
@@ -5,22 +5,182 @@
  * @author Dejan Levec <webphp@gmail.com>
  * @author Boštjan Seničar <senicar@gmail.com>
  * @author Gregor Skumavc (grega.skumavc@gmail.com)
-  * @author Matej Urbančič (mateju@svn.gnome.org)
+ * @author Matej Urbančič (mateju@svn.gnome.org)
  */
-$lang['lang']                  = 'Jezik';
+
+$lang['menu']                  = 'Splošne nastavitve';
+$lang['error']                 = 'Nastavitve niso shranjene zaradi neveljavne vrednosti.<br />Neveljavna vrednost je označena z rdečim robom vnosnega polja.';
+$lang['updated']               = 'Nastavitve so uspešno posodobljene.';
+$lang['nochoice']              = '(ni drugih možnosti na voljo)';
+$lang['locked']                = 'Nastavitvene datoteke ni mogoče posodobiti.<br />Preverite dovoljenja za spreminjanje in ime nastavitvene datoteke.';
+$lang['danger']                = 'Opozorilo: spreminjanje te možnosti lahko povzroči težave v delovanju sistema wiki.';
+$lang['warning']               = 'Opozorilo: spreminjanje te možnosti lahko vpliva na pravilno delovanje sistema wiki.';
+$lang['security']              = 'Varnostno opozorilo: spreminjanje te možnosti lahko vpliva na varnost sistema.';
+$lang['_configuration_manager'] = 'Upravljalnik nastavitev';
+$lang['_header_dokuwiki']      = 'Nastavitve DokuWiki';
+$lang['_header_plugin']        = 'Nastavitve vstavkov';
+$lang['_header_template']      = 'Nastavitve predlog';
+$lang['_header_undefined']     = 'Neopredeljene nastavitve';
+$lang['_basic']                = 'Osnovne nastavitve';
+$lang['_display']              = 'Nastavitve prikazovanja';
+$lang['_authentication']       = 'Nastavitve overjanja';
+$lang['_anti_spam']            = 'Nastavitve neželenih sporočil (Anti-Spam)';
+$lang['_editing']              = 'Nastavitve urejanja';
+$lang['_links']                = 'Nastavitve povezav';
+$lang['_media']                = 'Predstavnostne nastavitve';
+$lang['_advanced']             = 'Napredne nastavitve';
+$lang['_network']              = 'Omrežne nastavitve';
+$lang['_plugin_sufix']         = 'nastavitve';
+$lang['_template_sufix']       = 'nastavitve';
+$lang['_msg_setting_undefined'] = 'Ni nastavitvenih metapodatkov.';
+$lang['_msg_setting_no_class'] = 'Ni nastavitvenega razreda.';
+$lang['_msg_setting_no_default'] = 'Ni privzete vrednosti.';
+$lang['fmode']                 = 'Način ustvarjanja datotek';
+$lang['dmode']                 = 'Način ustvarjanja map';
+$lang['lang']                  = 'Jezik vmesnika';
+$lang['basedir']               = 'Pot do strežnika (npr. /dokuwiki/). Prazno polje določa samodejno zaznavanje';
+$lang['baseurl']               = 'Naslov URL strežnika (npr. http://www.streznik.si). Prazno polje določa samodejno zaznavanje';
+$lang['savedir']               = 'Mapa za shranjevanje podatkov';
+$lang['start']                 = 'Ime začetne strani wiki';
+$lang['title']                 = 'Naslov Wiki spletišča';
 $lang['template']              = 'Predloga';
-$lang['recent']                = 'Zadnje spremembe';
+$lang['license']               = 'Pod pogoji katerega dovoljenja je objavljena vsebina?';
+$lang['fullpath']              = 'Pokaži polno pot strani v nogi strani';
+$lang['recent']                = 'Nedavne spremembe';
+$lang['breadcrumbs']           = 'Å tevilo drobtinic poti';
+$lang['youarehere']            = 'Hierarhične drobtinice poti';
+$lang['typography']            = 'Omogoči tipografske zamenjave';
+$lang['htmlok']                = 'Dovoli vstavljeno kodo HTML';
+$lang['phpok']                 = 'Dovoli vstavljeno kodo PHP';
+$lang['dformat']               = 'Oblika zapisa časa (funkcija PHP <a href="http://www.php.net/strftime">strftime</a>)';
 $lang['signature']             = 'Podpis';
+$lang['toptoclevel']           = 'Vrhnja raven kazala';
+$lang['tocminheads']           = 'Najmanjše število naslovov za izgradnjo kazala';
+$lang['maxtoclevel']           = 'Najvišja raven kazala';
+$lang['maxseclevel']           = 'Največja raven urejanja odseka';
+$lang['camelcase']             = 'Uporabi EnoBesedni zapisa za povezave';
+$lang['deaccent']              = 'Počisti imena strani';
+$lang['useheading']            = 'Uporabi prvi naslov za ime strani';
+$lang['refcheck']              = 'Preverjanje sklica predstavnih datotek';
+$lang['refshow']               = 'Å tevilo predstavnostnih sklicev za prikaz';
+$lang['allowdebug']            = 'Dovoli razhroščevanje (po potrebi!)';
+$lang['usewordblock']          = 'Zaustavi neželeno besedilo glede na seznam besed';
+$lang['indexdelay']            = 'ÄŒasovni zamik pred ustvarjanjem kazala (v sekundah)';
+$lang['relnofollow']           = 'Uporabni možnost rel="nofollow" pri zunanjih povezavah';
+$lang['mailguard']             = 'Å ifriraj elektronske naslove';
+$lang['iexssprotect']          = 'Preveri poslane datoteke za zlonamerno kodo JavaScript ali HTML';
+$lang['showuseras']            = 'Kaj prikazati za prikaz uporabnika, ki je zadnji urejal stran';
+$lang['useacl']                = 'Uporabi seznam nadzora dostopa (ACL)';
+$lang['autopasswd']            = 'Samodejno ustvari gesla';
+$lang['authtype']              = 'Ozadnji način overitve';
+$lang['passcrypt']             = 'Način šifriranja gesel';
 $lang['defaultgroup']          = 'Privzeta skupina';
+$lang['superuser']             = 'Skrbnik - skupina, uporabnik ali z vejico ločen seznam uporabnik1,@skupina1,uporabnik2 s polnim dostopom do vseh strani in možnosti, neodvisno od nastavitev nadzora dostopa ACL';
+$lang['manager']               = 'Upravljavec - skupina, uporabnik ali z vejico ločen seznam uporabnik1,@skupina1,uporabnik2 z dovoljenji za dostop do nekaterih možnosti upravljanja';
+$lang['profileconfirm']        = 'Potrdi spremembe profila z geslom';
+$lang['disableactions']        = 'Onemogoči dejanja DokuWiki';
 $lang['disableactions_check']  = 'Preveri';
-$lang['userewrite']            = 'Uporabi olepšane naslove URL';
+$lang['disableactions_subscription'] = 'Naročanje/Preklic naročnine';
+$lang['disableactions_wikicode'] = 'Pogled izvorne kode/Surovi izvoz';
+$lang['disableactions_other']  = 'Druga dejanja (z vejico ločen seznam)';
+$lang['sneaky_index']          = 'Privzeto pokaže sistem DokuWiki vse imenske prostore v pogledu kazala. Z omogočanjem te možnosti bodo skriti vsi imenski prostori, v katere prijavljen uporabnik nima dovoljenj dostopa. S tem je mogoče preprečiti dostop do podrejenih strani. Možnost lahko vpliva na uporabnost nastavitev nadzora dostopa ACL.';
+$lang['auth_security_timeout'] = 'Varnostna časovna omejitev overitve (v sekundah)';
+$lang['securecookie']          = 'Ali naj se piškotki poslani preko varne povezave HTTPS v brskalniku pošiljajo le preko HTTPS? Onemogočanje možnosti je priporočljivo le takrat, ko je prijava varovana s protokolom  SSL, brskanje po strani pa ni posebej zavarovano.';
+$lang['xmlrpc']                = 'Omogoči/Onemogoči vmesnik XML-RPC.';
+$lang['xmlrpcuser']            = 'Omejitev dostopa do vmesnika XML-RPC z vejico ločenim seznamom skupin in uporabnikov. Prazno polje pomeni, prost dostop za vse uporabnike.';
+$lang['updatecheck']           = 'Ali naj sistem preveri za posodobitve in varnostna opozorila.';
+$lang['userewrite']            = 'Uporabi olepšan zapis naslovov URL';
+$lang['useslash']              = 'Uporabi poševnico kot ločilnik imenskih prostorov v naslovih URL';
+$lang['usedraft']              = 'Samodejno shrani osnutek med urejanjem strani';
+$lang['sepchar']               = 'Ločilnik besed imen strani';
+$lang['canonical']             = 'Uporabi polni kanonični zapis naslova URL';
+$lang['fnencode']              = 'Način kodiranja ne-ASCII imen datotek.';
+$lang['autoplural']            = 'Preveri množinske oblike povezav';
+$lang['compression']           = 'Način stiskanja za arhivirane datoteke';
+$lang['cachetime']             = 'Največja dovoljena starost predpomnilnika (v sekundah)';
+$lang['locktime']              = 'Največja dovoljena starost datotek zaklepa (v sekundah)';
+$lang['fetchsize']             = 'največja dovoljena velikost zunanjega prejemanja z datoteko fetch.php (v bajtih)';
+$lang['notify']                = 'Pošlji obvestila o spremembah na določen elektronski naslov';
+$lang['registernotify']        = 'Pošlji obvestila o novih vpisanih uporabnikih na določen elektronski naslov';
+$lang['mailfrom']              = 'Elektronski naslov za samodejno poslana sporočila';
+$lang['gzip_output']           = 'Uporabi stiskanje gzip vsebine za xhtml';
+$lang['gdlib']                 = 'Različica GD Lib';
+$lang['im_convert']            = 'Pot do orodja za pretvarjanje slik ImageMagick';
+$lang['jpg_quality']           = 'Kakovost stiskanja datotek JPG (0-100)';
+$lang['subscribers']           = 'Omogoči podporo naročanju na strani';
+$lang['subscribe_time']        = 'Čas po katerem so poslani povzetki sprememb (v sekundah); Vrednost mora biti krajša od časa, ki je določen z nedavno_dni.';
+$lang['compress']              = 'Združi odvod CSS in JavaScript v brskalniku';
+$lang['hidepages']             = 'Skrij skladne strani (logični izraz)';
+$lang['send404']               = 'Pošlji "HTTP 404/Strani ni mogoče najti" pri dostopu do neobstoječih strani';
+$lang['sitemap']               = 'Ustvari Google kazalo strani (v dnevih)';
+$lang['broken_iua']            = 'Ali je možnost ignore_user_abort okvarjena na sistemu? Napaka lahko vpliva na delovanje iskalnika. Napake so pogoste ob uporabi IIS+PHP/CGI. Več o tem si je mogoče prebrati v <a href="http://bugs.splitbrain.org/?do=details&amp;task_id=852">poročilu o hrošču 852</a>.';
+$lang['xsendfile']             = 'Uporabi glavo X-Sendfile za prejemanje statičnih datotek. Spletni strežnik mora možnost podpirati.';
+$lang['renderer_xhtml']        = 'Izrisovalnik za odvod Wiki strani (xhtml)';
+$lang['renderer__core']        = '%s (jedro dokuwiki)';
+$lang['renderer__plugin']      = '%s (vstavek)';
+$lang['rememberme']            = 'Dovoli trajne prijavne piškotke (trajno pomnenje prijave)';
+$lang['rss_type']              = 'Vrsta virov XML';
+$lang['rss_linkto']            = 'XML viri so povezani z';
+$lang['rss_content']           = 'Kaj prikazati med predmeti virov XML?';
+$lang['rss_update']            = 'ÄŒasovni razmik posodobitve virov XML (v sekundah)';
+$lang['recent_days']           = 'Koliko nedavnih sprememb naj se ohrani (v dnevih)';
+$lang['rss_show_summary']      = 'Viri XML so povzeti v naslovu';
+$lang['target____wiki']        = 'Ciljno okno za notranje povezave';
+$lang['target____interwiki']   = 'Ciljno okno za notranje wiki povezave';
+$lang['target____extern']      = 'Ciljno okno za zunanje povezave';
+$lang['target____media']       = 'Ciljno okno za predstavne povezave';
+$lang['target____windows']     = 'Ciljno okno za povezave oken';
+$lang['proxy____host']         = 'Ime posredniškega strežnika';
+$lang['proxy____port']         = 'Vrata posredniškega strežnika';
+$lang['proxy____user']         = 'Uporabniško ime posredniškega strežnika';
+$lang['proxy____pass']         = 'Geslo posredniškega strežnika';
+$lang['proxy____ssl']          = 'Uporabi varno povezavo SSL za povezavo z posredniškim strežnikom';
+$lang['proxy____except']       = 'Logični izrazi morajo biti skladni z naslovi URL, ki gredo mimo posredniškega strežnika.';
+$lang['safemodehack']          = 'Omogoči obhod načina SafeMode PHP';
+$lang['ftp____host']           = 'Strežnik FTP za obhod načina SafeMode';
+$lang['ftp____port']           = 'Vrata strežnika FTP za obhod načina SafeMode';
+$lang['ftp____user']           = 'Uporabniško ime za FTP za obhod načina SafeMode';
+$lang['ftp____pass']           = 'Geslo za strežnik FTP za obhod načina SafeMode';
+$lang['ftp____root']           = 'Korenska mapa FTP za obhod načina SafeMode';
+$lang['license_o_']            = 'Ni izbranega dovoljenja';
+$lang['typography_o_0']        = 'brez';
+$lang['typography_o_1']        = 'izloči enojne narekovaje';
+$lang['typography_o_2']        = 'z enojnimi narekovaji (lahko včasih ne deluje)';
+$lang['userewrite_o_0']        = 'brez';
 $lang['userewrite_o_1']        = '.htaccess';
+$lang['userewrite_o_2']        = 'notranji DokuWiki';
+$lang['deaccent_o_0']          = 'onemogočeno';
+$lang['deaccent_o_1']          = 'odstrani naglasne oznake';
+$lang['deaccent_o_2']          = 'pretvori v romanski zapis';
+$lang['gdlib_o_0']             = 'Knjižnica GD Lib ni na voljo';
+$lang['gdlib_o_1']             = 'Različica 1.x';
+$lang['gdlib_o_2']             = 'Samodejno zaznavanje';
 $lang['rss_type_o_rss']        = 'RSS 0.91';
 $lang['rss_type_o_rss1']       = 'RSS 1.0';
 $lang['rss_type_o_rss2']       = 'RSS 2.0';
 $lang['rss_type_o_atom']       = 'Atom 0.3';
 $lang['rss_type_o_atom1']      = 'Atom 1.0';
+$lang['rss_content_o_abstract'] = 'Povzetek';
+$lang['rss_content_o_diff']    = 'Poenotena primerjava';
+$lang['rss_content_o_htmldiff'] = 'HTML oblikovana preglednica primerjave';
+$lang['rss_content_o_html']    = 'Polna HTML vsebina strani';
+$lang['rss_linkto_o_diff']     = 'primerjalni pogled';
+$lang['rss_linkto_o_page']     = 'pregledana stran';
+$lang['rss_linkto_o_rev']      = 'seznam pregledovanj';
 $lang['rss_linkto_o_current']  = 'trenutna stran';
-$lang['compression_o_0']       = 'brez stiskanja';
-$lang['compression_o_gz']      = 'gzip stiskanje';
-$lang['compression_o_bz2']     = 'bz2 stiskanje';
+$lang['compression_o_0']       = 'brez';
+$lang['compression_o_gz']      = 'gzip';
+$lang['compression_o_bz2']     = 'bz2';
+$lang['xsendfile_o_0']         = 'ne uporabi';
+$lang['xsendfile_o_1']         = 'plačniška glava lighttpd (pred različico 1.5)';
+$lang['xsendfile_o_2']         = 'običajna glava X-Sendfile';
+$lang['xsendfile_o_3']         = 'plačniška glava Nginx X-Accel-Redirect';
+$lang['showuseras_o_loginname'] = 'Prijavno ime';
+$lang['showuseras_o_username'] = 'Polno ime uporabnika';
+$lang['showuseras_o_email']    = 'Elektronski naslov uporabnika (šifriran po določilih varovanja)';
+$lang['showuseras_o_email_link'] = 'Elektronski naslov uporabnika kot povezava mailto:';
+$lang['useheading_o_0']        = 'nikoli';
+$lang['useheading_o_navigation'] = 'le za krmarjenje';
+$lang['useheading_o_content']  = 'le za vsebino Wiki';
+$lang['useheading_o_1']        = 'vedno';
+$lang['readdircache']          = 'Največja dovoljena starost predpomnilnika prebranih map (v sekundah)';
diff --git a/lib/plugins/config/lang/sv/lang.php b/lib/plugins/config/lang/sv/lang.php
index 3b5752ea1f261372f29fedcd5aba5991c315eeea..50c75234b5b0e8f0e0241974e2baad422dba0310 100644
--- a/lib/plugins/config/lang/sv/lang.php
+++ b/lib/plugins/config/lang/sv/lang.php
@@ -112,6 +112,7 @@ $lang['fetchsize']             = 'Maximal storlek (bytes) som fetch.php får lad
 $lang['notify']                = 'Skicka meddelande om ändrade sidor till den här e-postadressen';
 $lang['registernotify']        = 'Skicka meddelande om nyregistrerade användare till en här e-postadressen';
 $lang['mailfrom']              = 'Avsändaradress i automatiska e-postmeddelanden';
+$lang['mailprefix']            = 'Prefix i början på ämnesraden vid automatiska e-postmeddelanden';
 $lang['gzip_output']           = 'Använd gzip Content-Encoding för xhtml';
 $lang['gdlib']                 = 'Version av GD-biblioteket';
 $lang['im_convert']            = 'Sökväg till ImageMagicks konverteringsverktyg';
diff --git a/lib/plugins/config/lang/zh-tw/lang.php b/lib/plugins/config/lang/zh-tw/lang.php
index 8ebdb99adcfcadfbb996ee5bbd1086840f4c6c92..aca415ab975656247866fe0d2d4e9e005ff3202e 100644
--- a/lib/plugins/config/lang/zh-tw/lang.php
+++ b/lib/plugins/config/lang/zh-tw/lang.php
@@ -8,6 +8,7 @@
  * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
  * @author Cheng-Wei Chien <e.cwchien@gmail.com>
  * @author Danny Lin
+ * @author Shuo-Ting Jian <shoting@gmail.com>
  */
 $lang['menu']                  = '系統配置設定';
 $lang['error']                 = '設定因為不合法的值而未更新,請檢查您的更改並重新送出。
@@ -105,6 +106,7 @@ $lang['fetchsize']             = 'fetch.php 可以從外部下載的最大檔案
 $lang['notify']                = '寄送變更通知信到這個 E-mail 位址';
 $lang['registernotify']        = '寄送新使用者註冊資訊到這個 E-mail 位址';
 $lang['mailfrom']              = '自動發送郵件時使用的郵件地址';
+$lang['mailprefix']            = '自動發送郵件時使用的標題前綴';
 $lang['gzip_output']           = '對 xhtml 使用 gzip 內容編碼';
 $lang['gdlib']                 = 'GD Lib 版本';
 $lang['im_convert']            = 'ImageMagick 的轉換工具路徑';
diff --git a/lib/plugins/config/lang/zh/lang.php b/lib/plugins/config/lang/zh/lang.php
index 0419968c796ad77f6bea7887e2af9fbb66d008b8..93565f3136b67aa5c3006ae5f5ccde6475d1c4a9 100644
--- a/lib/plugins/config/lang/zh/lang.php
+++ b/lib/plugins/config/lang/zh/lang.php
@@ -11,6 +11,7 @@
  * @author ben <ben@livetom.com>
  * @author lainme <lainme993@gmail.com>
  * @author caii <zhoucaiqi@gmail.com>
+ * @author Hiphen Lee <jacob.b.leung@gmail.com>
  */
 $lang['menu']                  = '配置设置';
 $lang['error']                 = '由于非法参数,设置没有更新。请检查您做的改动并重新提交。
@@ -109,6 +110,7 @@ $lang['fetchsize']             = 'fetch.php 能从外部下载的最大文件大
 $lang['notify']                = '发送更改通知给这个邮件地址';
 $lang['registernotify']        = '发送新注册用户的信息给这个邮件地址';
 $lang['mailfrom']              = '自动发送邮件时使用的邮件地址';
+$lang['mailprefix']            = '自动发送邮件时使用的邮件地址前缀';
 $lang['gzip_output']           = '对 xhtml 使用 gzip 内容编码';
 $lang['gdlib']                 = 'GD 库版本';
 $lang['im_convert']            = 'ImageMagick 转换工具的路径';
diff --git a/lib/plugins/config/settings/extra.class.php b/lib/plugins/config/settings/extra.class.php
index f6b69ead18d326c588fc7f6abcba7ede3d6482b6..b4e35b1ccc63829f431a0ee30d4d78b34213419e 100644
--- a/lib/plugins/config/settings/extra.class.php
+++ b/lib/plugins/config/settings/extra.class.php
@@ -90,7 +90,6 @@ if (!class_exists('setting_disableactions')) {
         // transfer some DokuWiki language strings to the plugin
         if (!$plugin->localised) $this->setupLocale();
         $plugin->lang[$this->_key.'_revisions'] = $lang['btn_revs'];
-        $plugin->lang[$this->_key.'_register'] = $lang['register'];
 
         foreach ($this->_choices as $choice)
           if (isset($lang['btn_'.$choice])) $plugin->lang[$this->_key.'_'.$choice] = $lang['btn_'.$choice];
diff --git a/lib/plugins/info/lang/sl/lang.php b/lib/plugins/info/lang/sl/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..62936947c21dadb1f55e050f4b5f39129180423c
--- /dev/null
+++ b/lib/plugins/info/lang/sl/lang.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * English language file
+ *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author     Guillaume Turri <guillaume.turri@gmail.com>
+ */
+ 
+$lang['encoding']              = 'utf-8';
+$lang['direction']             = 'ltr';
+$lang['onHidden']              = 'Click to display ⇲';
+$lang['onVisible']             = 'Click to hide ⇱';
diff --git a/lib/plugins/plugin/lang/bg/admin_plugin.txt b/lib/plugins/plugin/lang/bg/admin_plugin.txt
index e74e88d00419cedf5dac206184b2530e3a4e7be1..0227d6fe85293b833efc9aa8226cdafa976cbd8b 100644
--- a/lib/plugins/plugin/lang/bg/admin_plugin.txt
+++ b/lib/plugins/plugin/lang/bg/admin_plugin.txt
@@ -1,3 +1,3 @@
 ====== Управление на приставките ======
 
-На тази страница можете на управлявате всичко свързано с [[doku>plugins|приставките]] на Dokuwiki. За да можете да свалите и инсталирате приставка, вашата plugin директория трябва да е позволена за писане от сървъра.
+На тази страница можете на управлявате всичко свързано с [[doku>plugins|приставките]] на Dokuwiki. За да можете да свалите и инсталирате приставка, е необходимо писането в директорията plugin да е позволено на сървъра.
diff --git a/lib/plugins/plugin/lang/bg/lang.php b/lib/plugins/plugin/lang/bg/lang.php
index b4aaae5e4e5a2ea803931202e5cc0f21e399c974..40331fb547b9ac51d5085933f9b6eb41e34dedce 100644
--- a/lib/plugins/plugin/lang/bg/lang.php
+++ b/lib/plugins/plugin/lang/bg/lang.php
@@ -5,7 +5,7 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
  * @author Viktor Usunov <usun0v@mail.bg>
- * @author Kiril Velikov neohidra@gmail.com
+ * @author Kiril <neohidra@gmail.com>
  */
 $lang['menu']                  = 'Управление на приставките';
 $lang['download']              = 'Сваляне и инсталиране на нова приставка';
@@ -17,37 +17,37 @@ $lang['btn_settings']          = 'настройки';
 $lang['btn_download']          = 'Сваляне';
 $lang['btn_enable']            = 'Запис';
 $lang['url']                   = 'URL';
-$lang['installed']             = 'Инсталирани:';
-$lang['lastupdate']            = 'Последно обновени:';
+$lang['installed']             = 'Инсталирана:';
+$lang['lastupdate']            = 'Актуализирана:';
 $lang['source']                = 'Източник:';
 $lang['unknown']               = 'непознат';
-$lang['updating']              = 'Качване ...';
-$lang['updated']               = 'Качването на приставката %s бе упешно.';
-$lang['updates']               = 'Обновяването на следните приставки бе успешно';
-$lang['update_none']           = 'Не бяха намерени нови версии.';
+$lang['updating']              = 'Актуализиране ...';
+$lang['updated']               = 'Приставката %s е качена успешно';
+$lang['updates']               = 'Следните приставки са актуализирани успешно';
+$lang['update_none']           = 'Не са намерени нови версии.';
 $lang['deleting']              = 'Изтриване ...';
-$lang['deleted']               = 'Изтриването на приставката %s бе успешно.';
+$lang['deleted']               = 'Приставката %s е изтрита успешно.';
 $lang['downloading']           = 'Сваляне ...';
-$lang['downloaded']            = 'Инсталирането на приставката %s бе успешно  ';
-$lang['downloads']             = 'Инсталирането на следните приставки бе успешно:';
-$lang['download_none']         = 'Не бяха намерени приставки или е имало грешка при свалянето и инсталирането.';
-$lang['plugin']                = 'Приставки:';
+$lang['downloaded']            = 'Приставката %s е инсталирана успешно  ';
+$lang['downloads']             = 'Следните приставки са инсталирани успешно:';
+$lang['download_none']         = 'Не са намерени приставки или е възникнала непозната грешка при свалянето и инсталирането.';
+$lang['plugin']                = 'Приставка:';
 $lang['components']            = 'Компоненти';
-$lang['noinfo']                = 'Тази приставка не върна информация, може да е повредена.';
+$lang['noinfo']                = 'Приставка не върна информация, може да е повредена.';
 $lang['name']                  = 'Име:';
 $lang['date']                  = 'Дата:';
 $lang['type']                  = 'Тип:';
 $lang['desc']                  = 'Описание:';
 $lang['author']                = 'Автор:';
-$lang['www']                   = 'Сайт:';
-$lang['error']                 = 'Имаше непозната грешка.';
-$lang['error_download']        = 'Свалянето на приставката %s бе невъзможно.';
-$lang['error_badurl']          = 'Предполагаем грешен адрес - не може да се определи име на файла от адреса(url)';
-$lang['error_dircreate']       = 'Създаването на временна директория за сваляне е невъзможно.';
-$lang['error_decompress']      = 'Разархивирането на сваленият файл е невъзможно.Това може да е резултат от грешно сваляне, в такъв случай трябва да опитате отново; или формата на компресия е непозната - в този случай трябва да свалите и инсталирате приставката ръчно.';
-$lang['error_copy']            = 'Имаше грешка при копирането на файл по време на инсталацията на приставката <em>%s</em>: дискът е пълен или правата за достъп до файловете са грешни. Това може да е довело до частично инсталирана приставка и оставяне на нестабилна инсталация на уикито ви.';
-$lang['error_delete']          = 'Имаше грешка при изтриването на приставката <em>%s</em>.  Най-вероятната причина е недостатъчна права за достъп до файл или директория';
-$lang['enabled']               = 'Приставката %s бе включена.';
-$lang['notenabled']            = 'Приставката %s не бе включена, моля проверете файловите разрешения.';
-$lang['disabled']              = 'Приставката %s бе изключена.';
-$lang['notdisabled']           = 'Приставката %s не бе изключена, моля проверете файловите разрешения.';
+$lang['www']                   = 'Уебстраница:';
+$lang['error']                 = 'Възникна непозната грешка.';
+$lang['error_download']        = 'Свалянето на приставката %s е невъзможно.';
+$lang['error_badurl']          = 'Предполагаем грешен адрес - не може да се определи име на файла от URL адреса';
+$lang['error_dircreate']       = 'Създаването на временна директория за сваляне не е възможно.';
+$lang['error_decompress']      = 'Разархивирането на сваленият файл е невъзможно. Вероятно е резултат от грешка при свалянето, в този случай трябва да опитате отново; или формата на компресия е непознат - тогава трябва да свалите и инсталирате приставката ръчно.';
+$lang['error_copy']            = 'Възникна грешка при копиране на файл по време на инсталиране на приставката <em>%s</em>: вероятно дискът е пълен или правата за достъп до файловете са грешни. Може да доведе до частично инсталирана приставка и да причини нестабилно функциониране на wiki-то ви.';
+$lang['error_delete']          = 'Възникна грешка при изтриването на приставката <em>%s</em>.  Най-вероятната причина е в правата за достъп до файл или директория';
+$lang['enabled']               = 'Приставката %s е включена.';
+$lang['notenabled']            = 'Приставката %s не може да бъде включена, моля проверете правата за файловете.';
+$lang['disabled']              = 'Приставката %s е изключена.';
+$lang['notdisabled']           = 'Приставката %s не е изключена, моля проверете правата за файловете.';
diff --git a/lib/plugins/plugin/lang/et/lang.php b/lib/plugins/plugin/lang/et/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..0ffea1244dc590070413a5028a567a478e3b2376
--- /dev/null
+++ b/lib/plugins/plugin/lang/et/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Estonian language file
+ *
+ * @author kristian.kankainen@kuu.la
+ */
diff --git a/lib/plugins/plugin/lang/ru/lang.php b/lib/plugins/plugin/lang/ru/lang.php
index b4f39beeb698d6ffea353d34618caafb9aa4ff0f..757b607f5eb0c15c3c05f4ae2c1394af2c82ff12 100644
--- a/lib/plugins/plugin/lang/ru/lang.php
+++ b/lib/plugins/plugin/lang/ru/lang.php
@@ -15,6 +15,7 @@
  * @author Aleksey Osadchiy <rfc@nm.ru>
  * @author Aleksandr Selivanov <alexgearbox@gmail.com>
  * @author Ladyko Andrey <fylh@succexy.spb.ru>
+ * @author Eugene <windy.wanderer@gmail.com>
  */
 $lang['menu']                  = 'Управление плагинами';
 $lang['download']              = 'Скачать и установить новый плагин';
diff --git a/lib/plugins/plugin/lang/sl/admin_plugin.txt b/lib/plugins/plugin/lang/sl/admin_plugin.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2e99c6297bbebf96a209f75e1514a4c81ded8f32
--- /dev/null
+++ b/lib/plugins/plugin/lang/sl/admin_plugin.txt
@@ -0,0 +1,3 @@
+====== Upravljanje vstavkov ======
+
+Na tej strani je mogoèe spreminjati in prilagajati nastavitve Dokuwiki [[doku>plugins|vstavkov]]. Za prejemanje in name¹èanje vstavkov v ustrezne mape, morajo imeti te doloèena ustrezna dovoljenja za pisanje spletnega stre¾nika.
diff --git a/lib/plugins/plugin/lang/sl/lang.php b/lib/plugins/plugin/lang/sl/lang.php
index 2605a1948ad80474da29996de09d0275c23d4e5c..39ba20139159d4ec4db9bdaeb83ca810668ea4df 100644
--- a/lib/plugins/plugin/lang/sl/lang.php
+++ b/lib/plugins/plugin/lang/sl/lang.php
@@ -7,18 +7,48 @@
  * @author Gregor Skumavc (grega.skumavc@gmail.com)
  * @author Matej Urbančič (mateju@svn.gnome.org)
  */
+
+$lang['menu']                  = 'Upravljanje vstavkov';
+$lang['download']              = 'Prejmi in namesti nov vstavek';
+$lang['manage']                = 'Nameščeni vstavki';
+$lang['btn_info']              = 'Podrobnosti';
+$lang['btn_update']            = 'Posodobi';
 $lang['btn_delete']            = 'Izbriši';
 $lang['btn_settings']          = 'Nastavitve';
+$lang['btn_download']          = 'Prejmi';
 $lang['btn_enable']            = 'Shrani';
 $lang['url']                   = 'URL';
 $lang['installed']             = 'Nameščeno:';
 $lang['lastupdate']            = 'Nazadnje posodobljeno:';
 $lang['source']                = 'Vir:';
+$lang['unknown']               = 'neznano';
 $lang['updating']              = 'Posodabljanje ...';
+$lang['updated']               = 'Vstavek %s je uspešno posodobljen';
+$lang['updates']               = 'Navedeni vstavki so uspešno posodobljeni';
+$lang['update_none']           = 'Posodobitev ni mogoče najti.';
 $lang['deleting']              = 'Brisanje ...';
+$lang['deleted']               = 'Vstavek %s je izbrisan.';
+$lang['downloading']           = 'Prejemanje ...';
+$lang['downloaded']            = 'Vstavek %s je uspešno nameščen';
+$lang['downloads']             = 'Navedeni vstavki so uspešno nameščeni:';
+$lang['download_none']         = 'Vstavkov ni mogoče najti ali pa je prišlo do napake med prejemanjem in nameščanjem.';
+$lang['plugin']                = 'Vstavek:';
+$lang['components']            = 'Sestavni deli';
+$lang['noinfo']                = 'Vstavek nima vpisanih podrobnih podatkov, kar pomeni, da je morda neveljaven.';
 $lang['name']                  = 'Ime:';
 $lang['date']                  = 'Datum:';
 $lang['type']                  = 'Vrsta:';
 $lang['desc']                  = 'Opis:';
 $lang['author']                = 'Avtor:';
 $lang['www']                   = 'Spletna stran:';
+$lang['error']                 = 'Prišlo je do neznane napake.';
+$lang['error_download']        = 'Ni mogoče prejeti datoteke vstavka: %s';
+$lang['error_badurl']          = 'Napaka naslova URL - ni mogoče določiti imena datoteke iz naslova URL';
+$lang['error_dircreate']       = 'Ni mogoče ustvariti začasne mape za prejemanje';
+$lang['error_decompress']      = 'Z upravljalnikom vstavkov ni mogoče razširiti prejetega arhiva vstavka. Najverjetneje je prišlo do napake med prejemanjem datoteke ali pa zapis arhiva ni znan. Poskusite znova ali pa napako odpravite z ročnim nameščanjem vstavka.';
+$lang['error_copy']            = 'Prišlo je do napake med nameščanjem datotek vstavka <em>%s</em>: najverjetneje so težave s prostorom za namestitev ali pa ni ustreznih dovoljenj za nameščanje. Zaradi nepopolne namestitve lahko nastopijo težave v delovanju sistema Wiki.';
+$lang['error_delete']          = 'Prišlo je do napake med brisanjem vstavka <em>%s</em>: najverjetneje ni ustreznih dovoljenj za dostop do datoteke ali mape';
+$lang['enabled']               = 'Vstavek %s je omogočen.';
+$lang['notenabled']            = 'Vstavka %s ni mogoče omogočiti zaradi neustreznih dovoljen.';
+$lang['disabled']              = 'Vstavek %s je onemogočen.';
+$lang['notdisabled']           = 'Vstavka %s ni mogoče onemogočiti zaradi neustreznih dovoljen.';
diff --git a/lib/plugins/plugin/lang/zh-tw/lang.php b/lib/plugins/plugin/lang/zh-tw/lang.php
index f1c399c6880e38213938337793c03c4a03eb79d0..77e692fcf29440a3ef61ff0d122c5303baf68b64 100644
--- a/lib/plugins/plugin/lang/zh-tw/lang.php
+++ b/lib/plugins/plugin/lang/zh-tw/lang.php
@@ -8,6 +8,7 @@
  * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
  * @author Cheng-Wei Chien <e.cwchien@gmail.com>
  * @author Danny Lin
+ * @author Shuo-Ting Jian <shoting@gmail.com>
  */
 $lang['menu']                  = '管理插件 (Plugins)';
 $lang['download']              = '下載與安裝插件';
diff --git a/lib/plugins/plugin/lang/zh/lang.php b/lib/plugins/plugin/lang/zh/lang.php
index af2db4ee5cf9f7d76fe587854df1231e6c095840..fcc353fed85ead1c4a18a0703ff8a6af03f40c58 100644
--- a/lib/plugins/plugin/lang/zh/lang.php
+++ b/lib/plugins/plugin/lang/zh/lang.php
@@ -11,6 +11,7 @@
  * @author ben <ben@livetom.com>
  * @author lainme <lainme993@gmail.com>
  * @author caii <zhoucaiqi@gmail.com>
+ * @author Hiphen Lee <jacob.b.leung@gmail.com>
  */
 $lang['menu']                  = '插件管理器';
 $lang['download']              = '下载并安装新的插件';
diff --git a/lib/plugins/popularity/helper.php b/lib/plugins/popularity/helper.php
index 629d0bd676099fc348632dc75be5cf1e55c4c68e..5ce562319bf66bd315239a64ab5639b3a9752f19 100644
--- a/lib/plugins/popularity/helper.php
+++ b/lib/plugins/popularity/helper.php
@@ -60,7 +60,7 @@ class helper_plugin_popularity extends Dokuwiki_Plugin {
         $result[] = array(
                 'name'   => 'lastSentTime',
                 'desc'   => 'Compute the last time popularity data was sent',
-                'params' => 'array()',
+                'params' => array(),
                 'return' => array('data' => 'int')
                 );
         return $result;
diff --git a/lib/plugins/popularity/lang/bg/intro.txt b/lib/plugins/popularity/lang/bg/intro.txt
index aa437f32cbcd99be5dde781c6c22c59f14a1a0b5..35023b897072458f03818f3cd9e36f77166eee3d 100644
--- a/lib/plugins/popularity/lang/bg/intro.txt
+++ b/lib/plugins/popularity/lang/bg/intro.txt
@@ -1,9 +1,9 @@
 ====== Обратна връзка ======
 
-Инструментът събира данни за Вашето Wiki и ви позволява да ги изпратите на разработчиците DokuWiki. Данните ще им помогнат да разберат как DokuWiki се използва от потребителите и че статистиката е в подкрепа на поетата насока за развитие.
+Инструментът събира данни за вашето Wiki и ви позволява да ги изпратите да разработчиците на DokuWiki. Информацията ще им помогне да разберат как DokuWiki се ползва от потребителите и че статистиката е в подкрепа на поетата насока за развитие.
 
-Моля, ползвайте функцията, от време на време, когато уебстраницата ви се разраства, за да информирате разработчиците. Изпратените данни ще бъдат идентифицирани с анонимен номер.
+Моля, ползвайте функцията, от време на време, когато уебстраницата ви се разраства, за да информирате разработчиците. Изпратените данни ще бъдат идентифицирани с анонимен идентификатор.
 
-Събраните данни съдържат информация за версия на DokuWiki, броя и размера на вашите страници и файлове, инсталирани приставки и информация за вашата PHP инсталация.
+Събираните данни съдържат информация като версията на DokuWiki, броя и размера на вашите страници и файлове, инсталирани приставки и информация за локалната инсталация на PHP.
 
-Данните, които ще бъдат изпратени са изобразени по-долу. Моля, натиснете бутона "Изпращане на данните", за да изпратите информацията.
\ No newline at end of file
+Данните, които ще бъдат изпратени са изобразени отдолу. Моля, натиснете бутона "Изпращане на данните", за да бъдат изпратени.
\ No newline at end of file
diff --git a/lib/plugins/popularity/lang/bg/lang.php b/lib/plugins/popularity/lang/bg/lang.php
index 5c89c35094f1413465d4b806bab3349fa3b4105e..ba731c0fca53ae753751b5d36138cab17bc9a05b 100644
--- a/lib/plugins/popularity/lang/bg/lang.php
+++ b/lib/plugins/popularity/lang/bg/lang.php
@@ -3,12 +3,12 @@
  * Bulgarian language file
  *
  * @author Viktor Usunov <usun0v@mail.bg>
- * @author Kiril Velikov neohidra@gmail.com
+ * @author Kiril <neohidra@gmail.com>
  */
-$lang['name']                  = 'Обратна връзка (зареждането може да отнеме известно време)';
+$lang['name']                  = 'Обратна връзка (зареждането изисква време)';
 $lang['submit']                = 'Изпращане на данните';
 $lang['autosubmit']            = 'Автоматично изпращане на данните веднъж в месеца';
-$lang['submissionFailed']      = 'Данните не могат да бъдат изпратени поради следната грешка"';
-$lang['submitDirectly']        = 'Можете да пратите данните ръчно като изпратите следния формуляр.';
-$lang['autosubmitError']       = 'Последното автоматично изпращане не бе осъществено, поради следната грешка:';
-$lang['lastSent']              = 'Данните бяха изпратени';
+$lang['submissionFailed']      = 'Данните не могат да бъдат изпратени поради следната грешка:';
+$lang['submitDirectly']        = 'Можете да изпратите данните ръчно чрез следния формуляр.';
+$lang['autosubmitError']       = 'Последното автоматично изпращане се провали, поради следната грешка:';
+$lang['lastSent']              = 'Данните са изпратени';
diff --git a/lib/plugins/popularity/lang/bg/submitted.txt b/lib/plugins/popularity/lang/bg/submitted.txt
index 1e95f6ffd4e49fe7eb5a054ebc4f328049de3e45..3ecd24f96891d17c19dca6ce79e3789118e99fbf 100644
--- a/lib/plugins/popularity/lang/bg/submitted.txt
+++ b/lib/plugins/popularity/lang/bg/submitted.txt
@@ -1,3 +1,3 @@
 ====== Обратна връзка ======
 
-Данните бяха изпратени успешно.
\ No newline at end of file
+Данните са изпратени успешно.
\ No newline at end of file
diff --git a/lib/plugins/popularity/lang/et/lang.php b/lib/plugins/popularity/lang/et/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..0ffea1244dc590070413a5028a567a478e3b2376
--- /dev/null
+++ b/lib/plugins/popularity/lang/et/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Estonian language file
+ *
+ * @author kristian.kankainen@kuu.la
+ */
diff --git a/lib/plugins/popularity/lang/nl/intro.txt b/lib/plugins/popularity/lang/nl/intro.txt
index 92962944b7876cd1fefc0c7ff21f6f939066dffa..3c045c427741f764095d9805015092bf0d0b8b16 100644
--- a/lib/plugins/popularity/lang/nl/intro.txt
+++ b/lib/plugins/popularity/lang/nl/intro.txt
@@ -1,9 +1,9 @@
 ====== Populariteitsfeedback ======
 
-Dit onderdeel verzamelt anonieme gegevens over je wiki en stelt je in staat deze te versturen naar de ontwikkelaars van DokuWiki.  Dit helpt hen te begrijpen hoe DokuWiki wordt gebruikt door de gebruikers en zorgt er ook voor dat toekomstige ontwikkelkeuzes kunnen worden gestaafd door echte gebruikersstatistieken.
+Dit onderdeel verzamelt anonieme gegevens over uw wiki en stelt u in staat deze te versturen naar de ontwikkelaars van DokuWiki.  Dit helpt hen te begrijpen hoe DokuWiki wordt gebruikt door de gebruikers en zorgt er ook voor dat toekomstige ontwikkelkeuzes kunnen worden gestaafd door echte gebruikersstatistieken.
 
-U wordt verzocht deze stap van tijd tot tijd te herhalen om ontwikkelaars op de hoogte te houden terwijl je wiki groeit. De herhaalde data zal worden geïdentificeerd door een uniek, anoniem ID.
+U wordt verzocht deze stap van tijd tot tijd te herhalen om ontwikkelaars op de hoogte te houden terwijl uw wiki groeit. De herhaalde data zal worden geïdentificeerd door een uniek, anoniem ID.
 
-De verzamelde gegevens bevat onder andere gegevens over je versie van DokuWiki, het aantal- en de grootte van de pagina's en bestanden, geïnstalleerde plugins en informatie over PHP.
+De verzamelde gegevens bevat onder andere gegevens over uw versie van DokuWiki, het aantal- en de grootte van de pagina's en bestanden, geïnstalleerde plugins en informatie over PHP.
 
 De ruwe data die verzonden worden staan hieronder. Gebruik de knop "Verstuur" om de informatie te verzenden.
diff --git a/lib/plugins/popularity/lang/nl/lang.php b/lib/plugins/popularity/lang/nl/lang.php
index 54e12ae91173b24e352f637de44652a51f750b4c..0a8386f42b87bdfae4894220a73f982b7636647a 100644
--- a/lib/plugins/popularity/lang/nl/lang.php
+++ b/lib/plugins/popularity/lang/nl/lang.php
@@ -13,3 +13,8 @@
  */
 $lang['name']                  = 'Populariteitsfeedback (kan even duren om in te laden)';
 $lang['submit']                = 'Verstuur';
+$lang['autosubmit']            = 'Gegevens automatisch maandelijks verzenden';
+$lang['submissionFailed']      = 'De gegevens konden niet verstuurd worden vanwege de volgende fouten:';
+$lang['submitDirectly']        = 'Je kan de gegevens handmatig sturen door het onderstaande formulier te verzenden.';
+$lang['autosubmitError']       = 'De laatste automatische verzending is mislukt vanwege de volgende fout:';
+$lang['lastSent']              = 'De gegevens zijn verstuurd.';
diff --git a/lib/plugins/popularity/lang/nl/submitted.txt b/lib/plugins/popularity/lang/nl/submitted.txt
new file mode 100644
index 0000000000000000000000000000000000000000..219d80fb64e43e83e30a981d5041b6567e5e4011
--- /dev/null
+++ b/lib/plugins/popularity/lang/nl/submitted.txt
@@ -0,0 +1,3 @@
+===== Populariteitsfeedback =====
+
+Het versturen van de gegevens is gelukt.
\ No newline at end of file
diff --git a/lib/plugins/popularity/lang/ro/lang.php b/lib/plugins/popularity/lang/ro/lang.php
index 15da1cf3b4065c3e5fdf499d125eb432e8b7b18d..1644ea574af094ca18a56d19397dd5b794568836 100644
--- a/lib/plugins/popularity/lang/ro/lang.php
+++ b/lib/plugins/popularity/lang/ro/lang.php
@@ -9,3 +9,8 @@
  */
 $lang['name']                  = 'Feedback de popularitate (încărcarea poate dura mai mult)';
 $lang['submit']                = 'Trimite datele';
+$lang['autosubmit']            = 'Trimite datele automat o dată pe lună';
+$lang['submissionFailed']      = 'Datele nu au fost trimise din cauza următoarei erori:';
+$lang['submitDirectly']        = 'Puteți trimite datele manual prin completarea următorului formular.';
+$lang['autosubmitError']       = 'Ultima trimitere automată a eșuat din cauza următoarei erori:';
+$lang['lastSent']              = 'Datele au fost trimise';
diff --git a/lib/plugins/popularity/lang/ro/submitted.txt b/lib/plugins/popularity/lang/ro/submitted.txt
new file mode 100644
index 0000000000000000000000000000000000000000..214ffb71f941da80076531efe2310f22d6c70d7d
--- /dev/null
+++ b/lib/plugins/popularity/lang/ro/submitted.txt
@@ -0,0 +1,3 @@
+====== Feedback de popularitate ======
+
+Datele au fost trimise cu succes.
\ No newline at end of file
diff --git a/lib/plugins/popularity/lang/ru/lang.php b/lib/plugins/popularity/lang/ru/lang.php
index 257326310e993e4311a7ea272e71e8f2b60e70e4..79b3e224de1bdd8ef0536771c3915de68001b53b 100644
--- a/lib/plugins/popularity/lang/ru/lang.php
+++ b/lib/plugins/popularity/lang/ru/lang.php
@@ -12,6 +12,7 @@
  * @author Aleksey Osadchiy <rfc@nm.ru>
  * @author Aleksandr Selivanov <alexgearbox@gmail.com>
  * @author Ladyko Andrey <fylh@succexy.spb.ru>
+ * @author Eugene <windy.wanderer@gmail.com>
  */
 $lang['name']                  = 'Сбор информации о популярности (для загрузки может потребоваться некоторое время)';
 $lang['submit']                = 'Отправить данные';
diff --git a/lib/plugins/popularity/lang/sl/intro.txt b/lib/plugins/popularity/lang/sl/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ceb0e61e6219c0e6019ba697b6f756e4c4b264e6
--- /dev/null
+++ b/lib/plugins/popularity/lang/sl/intro.txt
@@ -0,0 +1,9 @@
+====== Poroèilo o uporabi ======
+
+To orodje je namenjeno zbiranju brezimnih podatkov o postavljeni Dokuwiki strani in omogoèa pošiljanje nekaterih podatkov neposredno razvijalcem sistema. S temi podatki lahko razvijalci razumejo naèine uporabe sistema, zahteve uporabnikov in pogostost uporabe, kar s statistiènimi podatki vpliva tudi na nadaljnji razvoj sistema.
+
+Priporoèeno je, da poroèilo o uporabi pošljete vsake toliko èasa, saj lahko le tako razvijalci dobijo podatke o hitrosti rasti spletišèa in pogostosti uporabe. Vsi podatki so poslani oznaèeni s posebno vpisno številko, ki omogoèa brezimno sledenje.
+
+Zbrani podatki vsebujejo podrobnosti o razlièici uporabljenega sistema DokuWiki, število in velikost wiki strani, datotekah, ki so naložene na sistem in podatke o vstavkih ter PHP namestitvi in razlièici.
+
+Surovi podatki, ki bodo poslani so prikazani spodaj. S pritiskom na gumb "Pošlji podatke", bodo ti poslani na strežnik razvijalcev.
diff --git a/lib/plugins/popularity/lang/sl/lang.php b/lib/plugins/popularity/lang/sl/lang.php
index 2191d7597944718f016d042d7b9733da6360d17f..5c92dd7c478f629fb32267c0f0dbbcc578793e05 100644
--- a/lib/plugins/popularity/lang/sl/lang.php
+++ b/lib/plugins/popularity/lang/sl/lang.php
@@ -2,9 +2,12 @@
 /**
  * Slovenian language file
  *
- * @author Dejan Levec <webphp@gmail.com>
- * @author Boštjan Seničar <senicar@gmail.com>
- * @author Gregor Skumavc (grega.skumavc@gmail.com)
  * @author Matej Urbančič (mateju@svn.gnome.org)
  */
-$lang['submit']                = 'Pošlji';
+$lang['name']                  = 'Poročilo o uporabi (nalaganje strani je lahko dolgotrajno)';
+$lang['submit']                = 'Pošlji podatke';
+$lang['autosubmit']            = 'Samodejno pošlji podatke enkrat mesečno';
+$lang['submissionFailed']      = 'Podatkov zaradi napake ni mogoče poslati:';
+$lang['submitDirectly']        = 'Podatke je mogoče poslati ročno s pošiljanjem preko obrazca.';
+$lang['autosubmitError']       = 'Zadnji poskus samodejnega pošiljanja je spodletel zaradi napake:';
+$lang['lastSent']              = 'Podatki so bili uspešno poslani.';
diff --git a/lib/plugins/popularity/lang/sl/submitted.txt b/lib/plugins/popularity/lang/sl/submitted.txt
new file mode 100644
index 0000000000000000000000000000000000000000..988afd83700e42d71e965279d5c153469f149bb4
--- /dev/null
+++ b/lib/plugins/popularity/lang/sl/submitted.txt
@@ -0,0 +1,3 @@
+====== Poroèilo o uporabi ======
+
+Podatki so bili uspe¹no poslani.
diff --git a/lib/plugins/popularity/lang/sv/lang.php b/lib/plugins/popularity/lang/sv/lang.php
index 10e71b790e89f852256194e22c6d5a80c3bb1513..b461a95cf02bd5e017c03a2335c17223a3b11ba4 100644
--- a/lib/plugins/popularity/lang/sv/lang.php
+++ b/lib/plugins/popularity/lang/sv/lang.php
@@ -15,3 +15,8 @@
  */
 $lang['name']                  = 'Popularitets-feedback (det kan ta en stund att ladda sidan)';
 $lang['submit']                = 'Sänd data';
+$lang['autosubmit']            = 'Skicka data automatiskt varje månad';
+$lang['submissionFailed']      = 'Datan kunde inte skickas för att:';
+$lang['submitDirectly']        = 'Du kan skicka datan manuellt genom att fylla i följande formulär.';
+$lang['autosubmitError']       = 'Senaste automatiska sändning av datan misslyckades för att:';
+$lang['lastSent']              = 'Datan har skickats';
diff --git a/lib/plugins/popularity/lang/sv/submitted.txt b/lib/plugins/popularity/lang/sv/submitted.txt
new file mode 100644
index 0000000000000000000000000000000000000000..fb8eab7733cf1d151d672b806741453db2e0b670
--- /dev/null
+++ b/lib/plugins/popularity/lang/sv/submitted.txt
@@ -0,0 +1,3 @@
+====== Popularitetsfeedback ======
+
+Datan har skickats utan problem.
\ No newline at end of file
diff --git a/lib/plugins/popularity/lang/zh-tw/lang.php b/lib/plugins/popularity/lang/zh-tw/lang.php
index cc96300eec76fe24d2793785e6f63a77a920d7c2..3ced0ee5a21b175e9355a3a919d9b7f4e2530527 100644
--- a/lib/plugins/popularity/lang/zh-tw/lang.php
+++ b/lib/plugins/popularity/lang/zh-tw/lang.php
@@ -8,6 +8,12 @@
  * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
  * @author Cheng-Wei Chien <e.cwchien@gmail.com>
  * @author Danny Lin
+ * @author Shuo-Ting Jian <shoting@gmail.com>
  */
 $lang['name']                  = '人氣回饋(載入可能需要一些時間)';
 $lang['submit']                = '發送資料';
+$lang['autosubmit']            = '每月自動發送';
+$lang['submissionFailed']      = '由於以下原因,資料無法發送:';
+$lang['submitDirectly']        = '你可以利用以下的表單來發手動發送資料.';
+$lang['autosubmitError']       = '由於以下原因,上次自動發送失敗:';
+$lang['lastSent']              = '資料已發送';
diff --git a/lib/plugins/popularity/lang/zh-tw/submitted.txt b/lib/plugins/popularity/lang/zh-tw/submitted.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6febcd5b86d1351bd56d3b1ed1ab1ad99c8b61f8
--- /dev/null
+++ b/lib/plugins/popularity/lang/zh-tw/submitted.txt
@@ -0,0 +1,3 @@
+====== 人氣回饋 ======
+
+資料已發送成功
\ No newline at end of file
diff --git a/lib/plugins/popularity/lang/zh/lang.php b/lib/plugins/popularity/lang/zh/lang.php
index 191b9c1af7cf8b3ecc72ca28bcca9ee5b9b3370e..371a8fddb5108b35ae3984422f54c11b74ea6288 100644
--- a/lib/plugins/popularity/lang/zh/lang.php
+++ b/lib/plugins/popularity/lang/zh/lang.php
@@ -10,6 +10,12 @@
  * @author ben <ben@livetom.com>
  * @author lainme <lainme993@gmail.com>
  * @author caii <zhoucaiqi@gmail.com>
+ * @author Hiphen Lee <jacob.b.leung@gmail.com>
  */
 $lang['name']                  = '人气反馈(载入可能需要一些时间)';
 $lang['submit']                = '发送数据';
+$lang['autosubmit']            = '每月自动发送';
+$lang['submissionFailed']      = '数据由于以下原因不恩你给发送:';
+$lang['submitDirectly']        = '你可以手动提交下面的表单来发送数据。';
+$lang['autosubmitError']       = '印以下原因,上一次自动提交失败:';
+$lang['lastSent']              = '数据已发送';
diff --git a/lib/plugins/popularity/lang/zh/submitted.txt b/lib/plugins/popularity/lang/zh/submitted.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6039b70e13818f2b748f44f3b71a29da4707c350
--- /dev/null
+++ b/lib/plugins/popularity/lang/zh/submitted.txt
@@ -0,0 +1,3 @@
+====== 人气反馈 ======
+
+数据发送成功。
\ No newline at end of file
diff --git a/lib/plugins/revert/lang/bg/intro.txt b/lib/plugins/revert/lang/bg/intro.txt
index ab7308d6d9a6115e5843ea45cd356e43b9cfb481..791c96857c644bfb420c572f96692f5cd284b7c1 100644
--- a/lib/plugins/revert/lang/bg/intro.txt
+++ b/lib/plugins/revert/lang/bg/intro.txt
@@ -1,4 +1,4 @@
 ====== Възстановяване ======
 
-Тази страница помага при автоматичното възстановяване от спам-атака. За да намерите списък със спамнати страници, въведете текст за търсене(пр. спам препратка), след това потвърдете, че намерените страници са наистина спам и възстановете редакциите.
+Страницата помага за автоматично възстановяване след SPAM атака. За да намерите списък със спамнати страници, въведете текст за търсене (напр. линк от SPAM съобщението), след това потвърдете, че намерените страници са наистина SPAM и възстановете старите версии.
 
diff --git a/lib/plugins/revert/lang/bg/lang.php b/lib/plugins/revert/lang/bg/lang.php
index 05525c535252215ee817e8d033bc9cc1ff5487e0..0819de01a2a27c7ba651f60e2b9e8300017f85c0 100644
--- a/lib/plugins/revert/lang/bg/lang.php
+++ b/lib/plugins/revert/lang/bg/lang.php
@@ -3,14 +3,14 @@
  * bulgarian language file
  * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
  * @author Viktor Usunov <usun0v@mail.bg>
- * @author Kiril Velikov neohidra@gmail.com
+ * @author Kiril <neohidra@gmail.com>
  */
 $lang['menu']                  = 'Възстановяване';
-$lang['filter']                = 'Търсене на спамната страници';
-$lang['revert']                = 'Избрани страници за възстановяване';
-$lang['reverted']              = '%s върнат до версия %s';
-$lang['removed']               = '%s премахнат';
+$lang['filter']                = 'Търсене на спамнати страници';
+$lang['revert']                = 'Възстанови избраните страници';
+$lang['reverted']              = '%s върната до версия %s';
+$lang['removed']               = '%s премахната';
 $lang['revstart']              = 'Процесът на възстановяване започна. Това може да отнеме много време. Ако скриптът се просрочи преди да завърши, трябва да възстановявате на по-малки парчета.';
 $lang['revstop']               = 'Процесът на възстановяване завърши успешно.';
-$lang['note1']                 = 'Забележка: за търсенето имат значение малки/големи букви';
-$lang['note2']                 = 'Забележка: страницата ще бъде възвърната без да съдържа спам терминът <i>%s</i>.';
+$lang['note1']                 = 'Бележка: при търсенето се различават малки от големи букви';
+$lang['note2']                 = 'Бележка: страницата ще бъде върната към стара версия без SPAM терминa <i>%s</i>.';
diff --git a/lib/plugins/revert/lang/et/lang.php b/lib/plugins/revert/lang/et/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..0ffea1244dc590070413a5028a567a478e3b2376
--- /dev/null
+++ b/lib/plugins/revert/lang/et/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Estonian language file
+ *
+ * @author kristian.kankainen@kuu.la
+ */
diff --git a/lib/plugins/revert/lang/ru/lang.php b/lib/plugins/revert/lang/ru/lang.php
index 8208377b14817ecdf3c9f1c8ff0e1b9d3a3343b8..9624d8fd601e51966458ce742697ebfce8668d22 100644
--- a/lib/plugins/revert/lang/ru/lang.php
+++ b/lib/plugins/revert/lang/ru/lang.php
@@ -13,6 +13,7 @@
  * @author Aleksey Osadchiy <rfc@nm.ru>
  * @author Aleksandr Selivanov <alexgearbox@gmail.com>
  * @author Ladyko Andrey <fylh@succexy.spb.ru>
+ * @author Eugene <windy.wanderer@gmail.com>
  */
 $lang['menu']                  = 'Менеджер откаток';
 $lang['filter']                = 'Поиск спам-страниц';
diff --git a/lib/plugins/revert/lang/sl/intro.txt b/lib/plugins/revert/lang/sl/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c63f281eda7df7b9d5f5668c257b5add0a95e0f3
--- /dev/null
+++ b/lib/plugins/revert/lang/sl/intro.txt
@@ -0,0 +1,3 @@
+====== Povrnitev okvarjene vsebine ======
+
+Na tej strani je mogoèe povrniti vsebino wiki strani na izvorne vrednosti po napadu na stran in vpisu ne¾elenih vsebin. Za iskanje strani z ne¾eleno vsebino, uporabite iskalnik z ustreznim nizom (npr. naslov URL), potem pa potrdite, da so najdene strani res z ne¾eleno vsebino in nato povrnite stanje na zadnjo pravo razlièico.
diff --git a/lib/plugins/revert/lang/sl/lang.php b/lib/plugins/revert/lang/sl/lang.php
index 9d249edbd380c36b93d5f059d3143b77fc3ec73a..92b0427ce67efdf746cdec50d96588ff02e2fda3 100644
--- a/lib/plugins/revert/lang/sl/lang.php
+++ b/lib/plugins/revert/lang/sl/lang.php
@@ -2,8 +2,14 @@
 /**
  * Slovenian language file
  *
- * @author Dejan Levec <webphp@gmail.com>
- * @author Boštjan Seničar <senicar@gmail.com>
- * @author Gregor Skumavc (grega.skumavc@gmail.com)
  * @author Matej Urbančič (mateju@svn.gnome.org)
  */
+$lang['menu']                  = 'Povrnitev okvarjene vsebine';
+$lang['filter']                = 'Iskanje strani z neželeno vsebino';
+$lang['revert']                = 'Povrni izbrane strani';
+$lang['reverted']              = 'stran %s je povrnjena na različico %s';
+$lang['removed']               = 'stran %s je odstranjena';
+$lang['revstart']              = 'Postopek povrnitve vsebine je začet. Opravilo je lahko dolgotrajno. V kolikor opravilo časovno poteče prek končanjem povrnitve, bo treba postopek ponoviti na manjših odsekih.';
+$lang['revstop']               = 'Postopek povrnitve vsebine je uspešno končan.';
+$lang['note1']                 = 'Opomba: iskanje upošteva velikost črk';
+$lang['note2']                 = 'Opomba: stran bo povrnjena na zadnjo različico brez neželenega pojma <i>%s</i>.';
diff --git a/lib/plugins/revert/lang/zh-tw/lang.php b/lib/plugins/revert/lang/zh-tw/lang.php
index 68fd3dce54b321c9081e0a62569f0aebdef0de0b..a853ccd2eee3c9b673a7c83e6f3cb3583222e001 100644
--- a/lib/plugins/revert/lang/zh-tw/lang.php
+++ b/lib/plugins/revert/lang/zh-tw/lang.php
@@ -8,13 +8,9 @@
  * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
  * @author Cheng-Wei Chien <e.cwchien@gmail.com>
  * @author Danny Lin <danny0838@pchome.com.tw>
+ * @author Shuo-Ting Jian <shoting@gmail.com>
  */
-
-// for admin plugins, the menu prompt to be displayed in the admin menu
-// if set here, the plugin doesn't need to override the getMenuText() method
 $lang['menu']                  = '還原管理';
-
-// custom language strings for the plugin
 $lang['filter']                = '搜索包含垃圾訊息的頁面';
 $lang['revert']                = '還原選取的頁面';
 $lang['reverted']              = '%s 已還原為版本 %s';
diff --git a/lib/plugins/revert/lang/zh/lang.php b/lib/plugins/revert/lang/zh/lang.php
index 5ff1ed426739df9fc7ed87699911deeac20afcac..8ba6264326d2e9a9175fcfd44b2791aabf23a6ca 100644
--- a/lib/plugins/revert/lang/zh/lang.php
+++ b/lib/plugins/revert/lang/zh/lang.php
@@ -11,6 +11,7 @@
  * @author ben <ben@livetom.com>
  * @author lainme <lainme993@gmail.com>
  * @author caii <zhoucaiqi@gmail.com>
+ * @author Hiphen Lee <jacob.b.leung@gmail.com>
  */
 $lang['menu']                  = '还原管理器';
 $lang['filter']                = '搜索包含垃圾信息的页面';
diff --git a/lib/plugins/usermanager/images/search.png b/lib/plugins/usermanager/images/search.png
index 1aa445f037cbf2d88f9e0317d3e0824d6e0811e8..e9dabc11ec18b16b320a6a3caed01bf46539ad00 100644
Binary files a/lib/plugins/usermanager/images/search.png and b/lib/plugins/usermanager/images/search.png differ
diff --git a/lib/plugins/usermanager/lang/bg/lang.php b/lib/plugins/usermanager/lang/bg/lang.php
index b229ce29ec2485e407865dc7fb280c98c88701ed..909c1e8fea17290410f1206ff4043924eb2dbdbc 100644
--- a/lib/plugins/usermanager/lang/bg/lang.php
+++ b/lib/plugins/usermanager/lang/bg/lang.php
@@ -4,12 +4,12 @@
  *
  * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
  * @author Viktor Usunov <usun0v@mail.bg>
- * @author Kiril Velikov neohidra@gmail.com
+ * @author Kiril <neohidra@gmail.com>
  */
-$lang['menu']                  = 'Управление на потребителите';
-$lang['noauth']                = '(идентифицирането на потребителите е недостъпно)';
-$lang['nosupport']             = '(не се поддържа управление на потребители)';
-$lang['badauth']               = 'невалиден механизъм при идентификация';
+$lang['menu']                  = 'Диспечер на потребителите';
+$lang['noauth']                = '(удостоверяването на потребители не е налично)';
+$lang['nosupport']             = '(управлението на потребители не се поддържа)';
+$lang['badauth']               = 'невалиден механизъм за удостоверяване';
 $lang['user_id']               = 'Потребител';
 $lang['user_pass']             = 'Парола';
 $lang['user_name']             = 'Истинско име';
@@ -17,33 +17,33 @@ $lang['user_mail']             = 'Електронна поща';
 $lang['user_groups']           = 'Групи';
 $lang['field']                 = 'Поле';
 $lang['value']                 = 'Стойност';
-$lang['add']                   = 'Добавяне';
-$lang['delete']                = 'Изтриване';
-$lang['delete_selected']       = 'Изтриване на избраните';
-$lang['edit']                  = 'Редактиране';
+$lang['add']                   = 'Добави';
+$lang['delete']                = 'Изтрий';
+$lang['delete_selected']       = 'Изтрий избраните';
+$lang['edit']                  = 'Редактирай';
 $lang['edit_prompt']           = 'Редактиране на потребителя';
-$lang['modify']                = 'Запис на промените';
+$lang['modify']                = 'Запиши промените';
 $lang['search']                = 'Търсене';
-$lang['search_prompt']         = 'Търсене';
+$lang['search_prompt']         = 'Търси';
 $lang['clear']                 = 'Обновяване на търсенето';
 $lang['filter']                = 'Филтър';
-$lang['summary']               = 'Показване на потребители %1$d-%2$d от %3$d намерени. %4$d потребители общо.';
-$lang['nonefound']             = 'Няма намерени потребители. Общо %d потребители.';
-$lang['delete_ok']             = '%d потребители изтрити';
-$lang['delete_fail']           = '%d не бяха изтрити';
-$lang['update_ok']             = 'Обновяването на потребителя бе успешно';
-$lang['update_fail']           = 'Обновяването на потребителя бе неуспешно';
-$lang['update_exists']         = 'Смяната на потребителското име бе невъзможна, оказаното потребителско име (%s) вече съществува (всякакви други промени ще бъдат приложени).';
-$lang['start']                 = 'първи';
+$lang['summary']               = 'Показване на потребители %1$d-%2$d от %3$d намерени. Общо %4$d потребителя.';
+$lang['nonefound']             = 'Не са намерени потребители. Общо %d потребителя.';
+$lang['delete_ok']             = '%d изтрити потребителя';
+$lang['delete_fail']           = 'изтриването на %d се провали.';
+$lang['update_ok']             = 'Обновяването на потребителя е успешно';
+$lang['update_fail']           = 'Обновяването на потребителя се провали';
+$lang['update_exists']         = 'Смяната на потребителското име се провали, въведеното потребителско име (%s) вече съществува (всички други промени ще бъдат приложени).';
+$lang['start']                 = 'начало';
 $lang['prev']                  = 'назад';
 $lang['next']                  = 'напред';
-$lang['last']                  = 'последен';
-$lang['edit_usermissing']      = 'Избраният потребител не бе намерен, оказаното потребителско име може да е изтрито или променено другаде.';
+$lang['last']                  = 'край';
+$lang['edit_usermissing']      = 'Избраният потребител не е намерен, въведеното потребителско име може да е изтрито или променено другаде.';
 $lang['user_notify']           = 'Уведомяване на потребителя';
 $lang['note_notify']           = 'Ел. писмо се изпраща само ако бъде променена паролата на потребителя.';
 $lang['note_group']            = 'Новите потребители биват добавяни към стандартната групата (%s) ако не е посочена друга.';
 $lang['note_pass']             = 'Паролата ще бъде генерирана автоматично, ако оставите полето празно и функцията за уведомяване на потребителя е включена.';
-$lang['add_ok']                = 'Добавянето на потребителя бе успешно';
-$lang['add_fail']              = 'Добавянето на потребителя бе неуспешно';
+$lang['add_ok']                = 'Добавянето на потребителя е успешно';
+$lang['add_fail']              = 'Добавянето на потребителя се провали';
 $lang['notify_ok']             = 'Осведомително е-писмо бе изпратено';
 $lang['notify_fail']           = 'Пращането на осведомително е-писмо е невъзможно';
diff --git a/lib/plugins/usermanager/lang/et/lang.php b/lib/plugins/usermanager/lang/et/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..0ffea1244dc590070413a5028a567a478e3b2376
--- /dev/null
+++ b/lib/plugins/usermanager/lang/et/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Estonian language file
+ *
+ * @author kristian.kankainen@kuu.la
+ */
diff --git a/lib/plugins/usermanager/lang/ru/lang.php b/lib/plugins/usermanager/lang/ru/lang.php
index f6137aab732d2ba135b8230c57bed540837c7aa3..456ba5b2999343ab80453071fb20ec53d3a70309 100644
--- a/lib/plugins/usermanager/lang/ru/lang.php
+++ b/lib/plugins/usermanager/lang/ru/lang.php
@@ -15,6 +15,7 @@
  * @author Aleksey Osadchiy <rfc@nm.ru>
  * @author Aleksandr Selivanov <alexgearbox@gmail.com>
  * @author Ladyko Andrey <fylh@succexy.spb.ru>
+ * @author Eugene <windy.wanderer@gmail.com>
  */
 $lang['menu']                  = 'Управление пользователями';
 $lang['noauth']                = '(авторизация пользователей недоступна)';
diff --git a/lib/plugins/usermanager/lang/sl/edit.txt b/lib/plugins/usermanager/lang/sl/edit.txt
index 4ad01441fc33f4d83d30a98bbeecae0aac81d949..e80bc858585047b7b0283da0d5fb5193943ba22b 100644
--- a/lib/plugins/usermanager/lang/sl/edit.txt
+++ b/lib/plugins/usermanager/lang/sl/edit.txt
@@ -1 +1 @@
-===== Urejanje uporabnika =====
\ No newline at end of file
+===== Urejanje uporabnikov =====
\ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/sl/intro.txt b/lib/plugins/usermanager/lang/sl/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a4729a8a55a7ff0409ab54857e464b156d9e2b7a
--- /dev/null
+++ b/lib/plugins/usermanager/lang/sl/intro.txt
@@ -0,0 +1 @@
+====== Upravljanje uporabnikov ======
diff --git a/lib/plugins/usermanager/lang/sl/lang.php b/lib/plugins/usermanager/lang/sl/lang.php
index ac073b1c9d5d22ab9c5f8172a093416da02268db..96acfd0afd9682a9ad08a29c9e642e4d606bf7de 100644
--- a/lib/plugins/usermanager/lang/sl/lang.php
+++ b/lib/plugins/usermanager/lang/sl/lang.php
@@ -7,9 +7,9 @@
  * @author Gregor Skumavc (grega.skumavc@gmail.com)
  * @author Matej Urbančič (mateju@svn.gnome.org)
  */
-$lang['menu']                  = 'Urejanje uporabnikov';
+$lang['menu']                  = 'Upravljanje uporabnikov';
 $lang['noauth']                = '(overjanje istovetnosti uporabnikov ni na voljo)';
-$lang['nosupport']             = '(urejanje uporabnikov ni podprto)';
+$lang['nosupport']             = '(upravljanje računov uporabnikov ni podprto)';
 $lang['badauth']               = 'neveljaven način overjanja';
 $lang['user_id']               = 'Uporabnik';
 $lang['user_pass']             = 'Geslo';
@@ -26,7 +26,7 @@ $lang['edit_prompt']           = 'Uredi tega uporabnika';
 $lang['modify']                = 'Shrani spremembe';
 $lang['search']                = 'Iskanje';
 $lang['search_prompt']         = 'Poišči';
-$lang['clear']                 = 'Ponastavi filter iskanja';
+$lang['clear']                 = 'Počisti filter iskanja';
 $lang['filter']                = 'Filter';
 $lang['summary']               = 'Izpisani so uporabniki %1$d-%2$d od skupno %3$d. Vseh uporabnikov je %4$d.';
 $lang['nonefound']             = 'Ni najdenih uporabnikov. Vseh uporabnikov je %d.';
@@ -34,6 +34,17 @@ $lang['delete_ok']             = '%d uporabnikov je izbrisanih';
 $lang['delete_fail']           = '%d ni bilo mogoče izbrisati';
 $lang['update_ok']             = 'Uporabniški račun je uspešno posodobljen';
 $lang['update_fail']           = 'Posodobitev uporabniškega računa je spodletela';
+$lang['update_exists']         = 'Spreminjanje imena uporabnika je spodletelo. Navedeno uporabniško ime (%s) že obstaja (vse ostale spremembe bodo uveljavljene).';
+$lang['start']                 = 'Začetni';
 $lang['prev']                  = 'Predhodni';
 $lang['next']                  = 'Naslednji';
-$lang['last']                  = 'Zadnji';
+$lang['last']                  = 'Končni';
+$lang['edit_usermissing']      = 'Izbranega uporabnika ni mogoče najti. Navedeno uporabniško ime je morda izbrisano ali spremenjeno.';
+$lang['user_notify']           = 'Obvesti uporabnika';
+$lang['note_notify']           = 'Obvestilna sporočila so poslana le, če uporabnik prejme novo geslo za dostop do strani.';
+$lang['note_group']            = 'Nov uporabnik bo dodan k privzeti skupini (%s), v kolikor ni navedene druge skupine.';
+$lang['note_pass']             = 'Geslo bo ustvarjeno samodejno, v kolikor je polje izpuščeno in je omogočeno obveščanje uporabnika.';
+$lang['add_ok']                = 'Uporabnik je uspešno dodan';
+$lang['add_fail']              = 'Dodajanje uporabnika je spodletelo';
+$lang['notify_ok']             = 'Obvestilno sporočilo je poslano.';
+$lang['notify_fail']           = 'Obvestilnega sporočila ni mogoče poslati.';
diff --git a/lib/plugins/usermanager/lang/zh-tw/lang.php b/lib/plugins/usermanager/lang/zh-tw/lang.php
index a46492685f2cf0bbf0b7f0427b64435133b2a1a6..5cb20aae87b8ec73bea055c69d3ab6b0097c20fb 100644
--- a/lib/plugins/usermanager/lang/zh-tw/lang.php
+++ b/lib/plugins/usermanager/lang/zh-tw/lang.php
@@ -9,6 +9,7 @@
  * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
  * @author Cheng-Wei Chien <e.cwchien@gmail.com>
  * @author Danny Lin <danny0838@pchome.com.tw>
+ * @author Shuo-Ting Jian <shoting@gmail.com>
  */
 $lang['menu']                  = '帳號管理員';
 $lang['noauth']                = '(帳號認證尚未開放)';
diff --git a/lib/plugins/usermanager/lang/zh/lang.php b/lib/plugins/usermanager/lang/zh/lang.php
index 5836d3346987e5c4cb58db172052ce38ed41db95..21bbb710d90145d88964e2a54a98ca2350e7bf7a 100644
--- a/lib/plugins/usermanager/lang/zh/lang.php
+++ b/lib/plugins/usermanager/lang/zh/lang.php
@@ -10,6 +10,7 @@
  * @author ben <ben@livetom.com>
  * @author lainme <lainme993@gmail.com>
  * @author caii <zhoucaiqi@gmail.com>
+ * @author Hiphen Lee <jacob.b.leung@gmail.com>
  */
 $lang['menu']                  = '用户管理器';
 $lang['noauth']                = '(用户认证不可用)';
diff --git a/lib/scripts/locktimer.js b/lib/scripts/locktimer.js
index 51d5330569068f4ce0595149fcdb320841cc601e..f5ba1c60d5df392f5e868ff5b3edc40554e37d9a 100644
--- a/lib/scripts/locktimer.js
+++ b/lib/scripts/locktimer.js
@@ -94,6 +94,6 @@ var locktimer = {
         $('draft__status').innerHTML=data;
         if(error != '1') return; // locking failed
         locktimer.reset();
-    },
+    }
 };
 
diff --git a/lib/scripts/media.js b/lib/scripts/media.js
index b90f7047baca9a1abe456346bda8695c574f4841..57f599163367d9441424ff331d6fe7f2ed45cd71 100644
--- a/lib/scripts/media.js
+++ b/lib/scripts/media.js
@@ -536,7 +536,9 @@ var media_manager = {
                 }
             }
         }
-        opener.insertTags('wiki__text','{{'+alignleft+id+opts+alignright+'|','}}','');
+        var edid = String.prototype.match.call(document.location, /&edid=([^&]+)/);
+        edid = edid ? edid[1] : 'wiki__text';
+        opener.insertTags(edid,'{{'+alignleft+id+opts+alignright+'|','}}','');
 
         if(!media_manager.keepopen) window.close();
         opener.focus();
diff --git a/lib/scripts/script.js b/lib/scripts/script.js
index b9b324f96f5d98a229015137b99ad24c01f06c09..2cc1246f918aa097e361993f3edd35d5dd98550f 100644
--- a/lib/scripts/script.js
+++ b/lib/scripts/script.js
@@ -113,6 +113,20 @@ function findPosY(object){
   return curtop;
 } //end findPosY function
 
+/**
+ * Get the computed style of a node.
+ *
+ * @link https://acidmartin.wordpress.com/2008/08/26/style-get-any-css-property-value-of-an-object/
+ * @link http://svn.dojotoolkit.org/src/dojo/trunk/_base/html.js
+ */
+function gcs(node){
+    if(node.currentStyle){
+        return node.currentStyle;
+    }else{
+        return node.ownerDocument.defaultView.getComputedStyle(node, null);
+    }
+}
+
 /**
  * Escape special chars in JavaScript
  *
@@ -260,10 +274,32 @@ function insitu_popup(target, popup_id) {
         getElementsByClass('dokuwiki', document.body, 'div')[0].appendChild(fndiv);
     }
 
+    var non_static_parent = fndiv.parentNode;
+    while (non_static_parent != document && gcs(non_static_parent)['position'] == 'static') {
+        non_static_parent = non_static_parent.parentNode;
+    }
+
+    var fixed_target_parent = target;
+    while (fixed_target_parent != document && gcs(fixed_target_parent)['position'] != 'fixed') {
+        fixed_target_parent = fixed_target_parent.parentNode;
+    }
+
     // position the div and make it visible
-    fndiv.style.position = 'absolute';
-    fndiv.style.left = findPosX(target)+'px';
-    fndiv.style.top  = (findPosY(target)+target.offsetHeight * 1.5) + 'px';
+    if (fixed_target_parent != document) {
+        // the target has position fixed, that means the footnote needs to be fixed, too
+        fndiv.style.position = 'fixed';
+    } else {
+        fndiv.style.position = 'absolute';
+    }
+
+    if (fixed_target_parent != document || non_static_parent == document) {
+        fndiv.style.left = findPosX(target)+'px';
+        fndiv.style.top  = (findPosY(target)+target.offsetHeight * 1.5) + 'px';
+    } else {
+        fndiv.style.left = (findPosX(target) - findPosX(non_static_parent)) +'px';
+        fndiv.style.top  = (findPosY(target)+target.offsetHeight * 1.5 - findPosY(non_static_parent)) + 'px';
+    }
+
     fndiv.style.display = '';
     return fndiv;
 }
diff --git a/lib/scripts/toolbar.js b/lib/scripts/toolbar.js
index 3f967448cecea185f2ec86bad060f89b029e8764..d458960ab170caf34f6524c66b7e05fc2318f4bd 100644
--- a/lib/scripts/toolbar.js
+++ b/lib/scripts/toolbar.js
@@ -153,7 +153,7 @@ function tb_insert(btn, props, edid) {
  */
 function tb_mediapopup(btn, props, edid) {
     window.open(
-        DOKU_BASE+props['url']+encodeURIComponent(NS),
+        DOKU_BASE+props['url']+encodeURIComponent(NS)+'&edid='+encodeURIComponent(edid),
         props['name'],
         props['options']);
     return false;
diff --git a/lib/styles/all.css b/lib/styles/all.css
new file mode 100644
index 0000000000000000000000000000000000000000..dd9f464626875181b4ab0890d76d8dee954c5d1e
--- /dev/null
+++ b/lib/styles/all.css
@@ -0,0 +1,48 @@
+/**
+ * Basic styles. These styles are needed for basic DokuWiki functions
+ * regardless of the used template. Templates can override them of course
+ */
+
+div.clearer {
+    clear: both;
+    line-height: 0;
+    height: 0;
+    overflow: hidden;
+}
+
+div.no {
+    display: inline;
+    margin: 0;
+    padding: 0;
+}
+
+.hidden {
+    display: none;
+}
+
+/* image alignment */
+.medialeft {
+    float: left;
+}
+.mediaright {
+    float: right;
+}
+.mediacenter {
+    display: block;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+/* table cell alignment */
+.leftalign   { text-align: left;   }
+.centeralign { text-align: center; }
+.rightalign  { text-align: right;  }
+
+/* underline */
+em.u {
+    font-style: normal;
+    text-decoration: underline;
+}
+em em.u {
+    font-style: italic;
+}
diff --git a/lib/styles/print.css b/lib/styles/print.css
new file mode 100644
index 0000000000000000000000000000000000000000..16543473a431b5d9900dd5db98faf7cfcf3fbce0
--- /dev/null
+++ b/lib/styles/print.css
@@ -0,0 +1,24 @@
+/**
+ * Basic styles. These styles are needed for basic DokuWiki functions
+ * regardless of the used template. Templates can override them of course
+ */
+
+/* messages with msg() */
+div.error,
+div.info,
+div.success,
+div.notify {
+    display: none;
+}
+
+/* section edit button */
+.secedit {
+    display: none;
+}
+
+/* modal windows */
+.JSpopup,
+#link__wiz,
+#media__popup {
+    display: none;
+}
diff --git a/lib/styles/style.css b/lib/styles/screen.css
similarity index 76%
rename from lib/styles/style.css
rename to lib/styles/screen.css
index 395f82b7810ac41d2b40bdd5d4ea93554b5b5a91..0a6a4f295ce1f3e2a4d86af1fabe2239a4d7a9ec 100644
--- a/lib/styles/style.css
+++ b/lib/styles/screen.css
@@ -3,23 +3,6 @@
  * regardless of the used template. Templates can override them of course
  */
 
-div.clearer {
-    clear: both;
-    line-height: 0;
-    height: 0;
-    overflow: hidden;
-}
-
-div.no {
-    display: inline;
-    margin: 0;
-    padding: 0;
-}
-
-.hidden {
-    display: none;
-}
-
 /* messages with msg() */
 div.error,
 div.info,
@@ -59,34 +42,6 @@ div.notify {
     border-bottom-color: #ffa;
 }
 
-
-/* image alignment */
-.medialeft {
-    float: left;
-}
-.mediaright {
-    float: right;
-}
-.mediacenter {
-    display: block;
-    margin-left: auto;
-    margin-right: auto;
-}
-
-/* table cell alignment */
-.leftalign   { text-align: left;   }
-.centeralign { text-align: center; }
-.rightalign  { text-align: right;  }
-
-/* underline */
-em.u {
-    font-style: normal;
-    text-decoration: underline;
-}
-em em.u {
-    font-style: italic;
-}
-
 /* modal windows */
 .JSpopup,
 #link__wiz,
diff --git a/lib/tpl/default/images/UWEB.png b/lib/tpl/default/images/UWEB.png
index ea03aec94f42256733e020a9afe64503c4e13f22..bded2c76f5924f99c356569a99aff01a752f5095 100644
Binary files a/lib/tpl/default/images/UWEB.png and b/lib/tpl/default/images/UWEB.png differ
diff --git a/lib/tpl/default/images/UWEBshadow.png b/lib/tpl/default/images/UWEBshadow.png
index 212444f0e06afea483ae9dc343e544053e4877ea..8c4e5f829a43bd445046123b5be0df151178686b 100644
Binary files a/lib/tpl/default/images/UWEBshadow.png and b/lib/tpl/default/images/UWEBshadow.png differ
diff --git a/lib/tpl/default/images/button-dw.png b/lib/tpl/default/images/button-dw.png
index 39d5f56a9dff668881444dafbec313e2e89f2287..97272d96841ff4488878a3c8908a1a32b58776ef 100644
Binary files a/lib/tpl/default/images/button-dw.png and b/lib/tpl/default/images/button-dw.png differ
diff --git a/lib/tpl/default/images/button-rss.png b/lib/tpl/default/images/button-rss.png
index b036f7152bd705536c7e3a7eb2d46d8bbb426102..0a55642efa2f494516de8b78ae8f163fe81e49f3 100644
Binary files a/lib/tpl/default/images/button-rss.png and b/lib/tpl/default/images/button-rss.png differ
diff --git a/lib/tpl/default/images/buttonshadow.png b/lib/tpl/default/images/buttonshadow.png
index f60be309f722795be20fa45eb5f6b45cf9a1ad52..b96ebf759a5fda04f0fc6970ac5c0a189686f3e2 100644
Binary files a/lib/tpl/default/images/buttonshadow.png and b/lib/tpl/default/images/buttonshadow.png differ
diff --git a/lib/tpl/default/images/inputshadow.png b/lib/tpl/default/images/inputshadow.png
index d286beb228d3a25d9ffe39831c96d37e5520be9e..480044986e490e70360d9d137eda806a2e495883 100644
Binary files a/lib/tpl/default/images/inputshadow.png and b/lib/tpl/default/images/inputshadow.png differ
diff --git a/lib/tpl/default/print.css b/lib/tpl/default/print.css
index 15c6dad29f88b87c51f2b76a9347bf4a46e85a13..45b60aad210c9acb8d708e9efb050f68ac59a899 100644
--- a/lib/tpl/default/print.css
+++ b/lib/tpl/default/print.css
@@ -33,23 +33,10 @@ div.meta {
   text-align: right;
 }
 
-
-div.notify,
-div.info,
-div.success,
-div.error,
-div.breadcrumbs,
-div.secedit {
+div.breadcrumbs {
   display: none;
 }
 
-div.clearer {
-  clear: both;
-  line-height: 0;
-  height: 0;
-  overflow: hidden;
-}
-
 
 /* --------------------- Text formating -------------------------------- */
 
@@ -110,31 +97,15 @@ img.media {
   margin: 3px;
 }
 
+/* the styles for media images are already in
+   lib/styles/all.css, these are additional styles */
 img.medialeft {
-  border: 0;
-  float: left;
   margin: 0 1.5em 0 0;
 }
-
 img.mediaright {
-  border: 0;
-  float: right;
   margin: 0 0 0 1.5em;
 }
-
 img.mediacenter {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
-
-/* underline */
-em.u {
-  font-style: normal;
-  text-decoration: underline;
-}
-em em.u {
-  font-style: italic;
 }
 
 /* unordered lists */
@@ -253,17 +224,5 @@ table.inline td {
   border: 1px solid #000000;
 }
 
-.leftalign {
-  text-align: left;
-}
-
-.centeralign {
-  text-align: center;
-}
-
-.rightalign {
-  text-align: right;
-}
-
 .toc, .footerinc, .header, .bar, .user { display: none; }
 
diff --git a/lib/tpl/index.php b/lib/tpl/index.php
index a550817385d11094a56daebb14a1418884c76048..20abea20caa3cc1a0598a0bcbe7da46959c15371 100644
--- a/lib/tpl/index.php
+++ b/lib/tpl/index.php
@@ -8,6 +8,9 @@
  * @author Andreas Gohr <andi@splitbrain.org>
  * @author Anika Henke <anika@selfthinker.org>
  */
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+if(!define('NOSESSION')) define('NOSESSION',1);
+require_once(DOKU_INC.'inc/init.php');
 ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
@@ -41,9 +44,6 @@
 </head>
 <body>
 <?php
-if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
-require_once(DOKU_INC.'inc/init.php');
-
 $ini = @parse_ini_file($conf['template'].'/style.ini',true);
 if ($ini) {
     echo '<table>';