diff --git a/_test/tests/inc/fulltext_query.test.php b/_test/tests/inc/fulltext_query.test.php
new file mode 100644
index 0000000000000000000000000000000000000000..9f95a95108524f8c0ff9b8ef98cd9558333b7a38
--- /dev/null
+++ b/_test/tests/inc/fulltext_query.test.php
@@ -0,0 +1,104 @@
+<?php
+
+// must be run within Dokuwiki
+if (!defined('DOKU_INC')) {
+    die();
+}
+
+/**
+ * Test cases for the link index
+ *
+ * @author Michael Große <grosse@cosmocode.de>
+ *
+ * @group  fulltext
+ */
+class fulltext_query_test extends DokuWikiTest
+{
+    public function test_parse_query()
+    {
+        $Indexer = idx_get_indexer();
+        $inputQuery = 'test -baz "foo bar" @abc ^def';
+
+        $actualParsedQuery = ft_queryParser($Indexer, $inputQuery);
+
+        $expectedParsedQuery = [
+            'query' => 'test -baz "foo bar" @abc ^def',
+            'parsed_str' => '(W+:test)ANDNOT((W-:baz))AND((W_:foo)AND(W_:bar)AND(P+:foo bar))AND(N+:abc)ANDNOT(N-:def)',
+            'parsed_ary' => [
+                'W+:test',
+                'W-:baz',
+                'NOT',
+                'AND',
+                'W_:foo',
+                'W_:bar',
+                'AND',
+                'P+:foo bar',
+                'AND',
+                'AND',
+                'N+:abc',
+                'AND',
+                'N-:def',
+                'NOT',
+                'AND',
+            ],
+            'words' => [
+                'test',
+                'baz',
+                'foo',
+                'bar',
+            ],
+            'highlight' => [
+                'test',
+                'foo bar',
+            ],
+            'and' => [
+                'test',
+            ],
+            'phrases' => [
+                'foo bar',
+            ],
+            'ns' => [
+                'abc',
+            ],
+            'notns' => [
+                'def',
+            ],
+            'not' => [
+                'baz',
+            ],
+        ];
+        $this->assertEquals($expectedParsedQuery, $actualParsedQuery);
+    }
+
+    public function test_unparse_query()
+    {
+        $input = [
+            'and' => [
+                'test',
+            ],
+            'not' => [
+                'baz'
+            ],
+            'phrases' => [
+                'foo bar',
+            ],
+            'ns' => [
+                'abc',
+            ],
+            'notns' => [
+                'def'
+            ],
+        ];
+
+        $actualQuery = ft_queryUnparser_simple(
+            $input['and'],
+            $input['not'],
+            $input['phrases'],
+            $input['ns'],
+            $input['notns']
+        );
+
+        $expectedQuery = 'test -baz "foo bar" @abc ^def';
+        $this->assertEquals($expectedQuery, $actualQuery);
+    }
+}
diff --git a/conf/dokuwiki.php b/conf/dokuwiki.php
index c87a7cd0cf678cea41af8d6acb0727758c7d9ceb..97f396ed6f8f645047f69af7d7167ffd294135da 100644
--- a/conf/dokuwiki.php
+++ b/conf/dokuwiki.php
@@ -156,6 +156,8 @@ $conf['broken_iua']  = 0;                //Platform with broken ignore_user_abor
 $conf['xsendfile']   = 0;                //Use X-Sendfile (1 = lighttpd, 2 = standard)
 $conf['renderer_xhtml'] = 'xhtml';       //renderer to use for main page generation
 $conf['readdircache'] = 0;               //time cache in second for the readdir operation, 0 to deactivate.
+$conf['search_limit_to_first_ns'] = 0;   //Option to limit the search to the current X namespaces
+$conf['search_default_fragment_behaviour'] = 'exact'; // Option to specify the default fragment search behavior
 
 /* Network Settings */
 $conf['dnslookups'] = 1;                 //disable to disallow IP to hostname lookups
diff --git a/doku.php b/doku.php
index d02a4320019d492e5a319fa93f2bd35276bc47e1..eb7b7d472e105c7eb30a054e34bf280c05a83648 100644
--- a/doku.php
+++ b/doku.php
@@ -35,7 +35,7 @@ require_once(DOKU_INC.'inc/init.php');
 
 //import variables
 $INPUT->set('id', str_replace("\xC2\xAD", '', $INPUT->str('id'))); //soft-hyphen
-$QUERY          = trim($INPUT->str('id'));
+$QUERY          = trim($INPUT->str('q'));
 $ID             = getID();
 
 $REV   = $INPUT->int('rev');
diff --git a/inc/Action/Search.php b/inc/Action/Search.php
index d4833f4539c7e828fc4b79003e596cb7a6a2bdde..c182ca3e9412cae776e9bfe97fcb04bd38d6f179 100644
--- a/inc/Action/Search.php
+++ b/inc/Action/Search.php
@@ -13,6 +13,10 @@ use dokuwiki\Action\Exception\ActionAbort;
  */
 class Search extends AbstractAction {
 
+    protected $pageLookupResults = array();
+    protected $fullTextResults = array();
+    protected $highlight = array();
+
     /** @inheritdoc */
     public function minimumPermission() {
         return AUTH_NONE;
@@ -25,13 +29,107 @@ class Search extends AbstractAction {
      */
     public function checkPermissions() {
         parent::checkPermissions();
-        global $QUERY;
+    }
+
+    public function preProcess()
+    {
+        global $QUERY, $ID, $conf, $INPUT;
         $s = cleanID($QUERY);
-        if($s === '') throw new ActionAbort();
+
+        if ($ID !== $conf['start'] && !$INPUT->has('q')) {
+            parse_str($INPUT->server->str('QUERY_STRING'), $urlParts);
+            $urlParts['q'] = $urlParts['id'];
+            $urlParts['id'] = $conf['start'];
+            $url = DOKU_URL . DOKU_SCRIPT . '?' . http_build_query($urlParts, null, '&');
+            send_redirect($url);
+        }
+
+        if ($s === '') throw new ActionAbort();
+        $this->adjustGlobalQuery();
     }
 
     /** @inheritdoc */
-    public function tplContent() {
-        html_search();
+    public function tplContent()
+    {
+        $this->execute();
+
+        $search = new \dokuwiki\Ui\Search($this->pageLookupResults, $this->fullTextResults, $this->highlight);
+        $search->show();
+    }
+
+
+    /**
+     * run the search
+     */
+    protected function execute()
+    {
+        global $INPUT, $QUERY;
+        $after = $INPUT->str('min');
+        $before = $INPUT->str('max');
+        $this->pageLookupResults = ft_pageLookup($QUERY, true, useHeading('navigation'), $after, $before);
+        $this->fullTextResults = ft_pageSearch($QUERY, $highlight, $INPUT->str('srt'), $after, $before);
+        $this->highlight = $highlight;
+    }
+
+    /**
+     * Adjust the global query accordingly to the config search_limit_to_first_ns and search_default_fragment_behaviour
+     *
+     * This will only do something if the search didn't originate from the form on the searchpage itself
+     */
+    protected function adjustGlobalQuery()
+    {
+        global $conf, $INPUT, $QUERY, $ID;
+
+        if ($INPUT->bool('sf')) {
+            return;
+        }
+
+        $Indexer = idx_get_indexer();
+        $parsedQuery = ft_queryParser($Indexer, $QUERY);
+
+        if (empty($parsedQuery['ns']) && empty($parsedQuery['notns'])) {
+            if ($conf['search_limit_to_first_ns'] > 0) {
+                if (getNS($ID) !== false) {
+                    $nsParts = explode(':', getNS($ID));
+                    $ns = implode(':', array_slice($nsParts, 0, $conf['search_limit_to_first_ns']));
+                    $QUERY .= " @$ns";
+                }
+            }
+        }
+
+        if ($conf['search_default_fragment_behaviour'] !== 'exact') {
+            if (empty(array_diff($parsedQuery['words'], $parsedQuery['and']))) {
+                if (strpos($QUERY, '*') === false) {
+                    $queryParts = explode(' ', $QUERY);
+                    $queryParts = array_map(function ($part) {
+                        if (strpos($part, '@') === 0) {
+                            return $part;
+                        }
+                        if (strpos($part, 'ns:') === 0) {
+                            return $part;
+                        }
+                        if (strpos($part, '^') === 0) {
+                            return $part;
+                        }
+                        if (strpos($part, '-ns:') === 0) {
+                            return $part;
+                        }
+
+                        global $conf;
+
+                        if ($conf['search_default_fragment_behaviour'] === 'starts_with') {
+                            return $part . '*';
+                        }
+                        if ($conf['search_default_fragment_behaviour'] === 'ends_with') {
+                            return '*' . $part;
+                        }
+
+                        return '*' . $part . '*';
+
+                    }, $queryParts);
+                    $QUERY = implode(' ', $queryParts);
+                }
+            }
+        }
     }
 }
diff --git a/inc/Form/Form.php b/inc/Form/Form.php
index 2d534aee5cc9f9dd355549f7fa8513025a2b8f89..92bbd30f4daf73087e4903190b9a2a15cf142d77 100644
--- a/inc/Form/Form.php
+++ b/inc/Form/Form.php
@@ -24,8 +24,9 @@ class Form extends Element {
      * Creates a new, empty form with some default attributes
      *
      * @param array $attributes
+     * @param bool  $unsafe     if true, then the security token is ommited
      */
-    public function __construct($attributes = array()) {
+    public function __construct($attributes = array(), $unsafe = false) {
         global $ID;
 
         parent::__construct('form', $attributes);
@@ -49,7 +50,9 @@ class Form extends Element {
         }
 
         // add the security token by default
-        $this->setHiddenField('sectok', getSecurityToken());
+        if (!$unsafe) {
+            $this->setHiddenField('sectok', getSecurityToken());
+        }
 
         // identify this as a new form based form in HTML
         $this->addClass('doku_form');
@@ -78,6 +81,20 @@ class Form extends Element {
         return count($this->elements);
     }
 
+    /**
+     * Get the position of the element in the form or false if it is not in the form
+     *
+     * Warning: This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
+     *
+     * @param Element $element
+     *
+     * @return false|int
+     */
+    public function getElementPosition(Element $element)
+    {
+        return array_search($element, $this->elements, true);
+    }
+
     /**
      * Returns a reference to the element at a position.
      * A position out-of-bounds will return either the
diff --git a/inc/Menu/Item/Edit.php b/inc/Menu/Item/Edit.php
index 05467674d5cb8ff6c9c1f073add301da38344ea6..5de1778fdec520b978dc9c09d61e63c192452626 100644
--- a/inc/Menu/Item/Edit.php
+++ b/inc/Menu/Item/Edit.php
@@ -18,7 +18,7 @@ class Edit extends AbstractItem {
 
         parent::__construct();
 
-        if($ACT == 'show' || $ACT == 'search') {
+        if($ACT === 'show') {
             $this->method = 'post';
             if($INFO['writable']) {
                 $this->accesskey = 'e';
diff --git a/inc/Ui/Search.php b/inc/Ui/Search.php
new file mode 100644
index 0000000000000000000000000000000000000000..c27cd77642d56dd9d99648024d22b4ec836b0a49
--- /dev/null
+++ b/inc/Ui/Search.php
@@ -0,0 +1,636 @@
+<?php
+
+namespace dokuwiki\Ui;
+
+use \dokuwiki\Form\Form;
+
+class Search extends Ui
+{
+    protected $query;
+    protected $parsedQuery;
+    protected $searchState;
+    protected $pageLookupResults = array();
+    protected $fullTextResults = array();
+    protected $highlight = array();
+
+    /**
+     * Search constructor.
+     *
+     * @param array $pageLookupResults pagename lookup results in the form [pagename => pagetitle]
+     * @param array $fullTextResults fulltext search results in the form [pagename => #hits]
+     * @param array $highlight  array of strings to be highlighted
+     */
+    public function __construct(array $pageLookupResults, array $fullTextResults, $highlight)
+    {
+        global $QUERY;
+        $Indexer = idx_get_indexer();
+
+        $this->query = $QUERY;
+        $this->parsedQuery = ft_queryParser($Indexer, $QUERY);
+        $this->searchState = new SearchState($this->parsedQuery);
+
+        $this->pageLookupResults = $pageLookupResults;
+        $this->fullTextResults = $fullTextResults;
+        $this->highlight = $highlight;
+    }
+
+    /**
+     * display the search result
+     *
+     * @return void
+     */
+    public function show()
+    {
+        $searchHTML = '';
+
+        $searchHTML .= $this->getSearchIntroHTML($this->query);
+
+        $searchHTML .= $this->getSearchFormHTML($this->query);
+
+        $searchHTML .= $this->getPageLookupHTML($this->pageLookupResults);
+
+        $searchHTML .= $this->getFulltextResultsHTML($this->fullTextResults, $this->highlight);
+
+        echo $searchHTML;
+    }
+
+    /**
+     * Get a form which can be used to adjust/refine the search
+     *
+     * @param string $query
+     *
+     * @return string
+     */
+    protected function getSearchFormHTML($query)
+    {
+        global $lang, $ID, $INPUT;
+
+        $searchForm = (new Form(['method' => 'get'], true))->addClass('search-results-form');
+        $searchForm->setHiddenField('do', 'search');
+        $searchForm->setHiddenField('id', $ID);
+        $searchForm->setHiddenField('sf', '1');
+        if ($INPUT->has('min')) {
+            $searchForm->setHiddenField('min', $INPUT->str('min'));
+        }
+        if ($INPUT->has('max')) {
+            $searchForm->setHiddenField('max', $INPUT->str('max'));
+        }
+        if ($INPUT->has('srt')) {
+            $searchForm->setHiddenField('srt', $INPUT->str('srt'));
+        }
+        $searchForm->addFieldsetOpen()->addClass('search-form');
+        $searchForm->addTextInput('q')->val($query)->useInput(false);
+        $searchForm->addButton('', $lang['btn_search'])->attr('type', 'submit');
+
+        $this->addSearchAssistanceElements($searchForm);
+
+        $searchForm->addFieldsetClose();
+
+        trigger_event('FORM_SEARCH_OUTPUT', $searchForm);
+
+        return $searchForm->toHTML();
+    }
+
+    /**
+     * Add elements to adjust how the results are sorted
+     *
+     * @param Form $searchForm
+     */
+    protected function addSortTool(Form $searchForm)
+    {
+        global $INPUT, $lang;
+
+        $options = [
+            'hits' => [
+                'label' => $lang['search_sort_by_hits'],
+                'sort' => '',
+            ],
+            'mtime' => [
+                'label' => $lang['search_sort_by_mtime'],
+                'sort' => 'mtime',
+            ],
+        ];
+        $activeOption = 'hits';
+
+        if ($INPUT->str('srt') === 'mtime') {
+            $activeOption = 'mtime';
+        }
+
+        $searchForm->addTagOpen('div')->addClass('toggle')->attr('aria-haspopup', 'true');
+        // render current
+        $currentWrapper = $searchForm->addTagOpen('div')->addClass('current');
+        if ($activeOption !== 'hits') {
+            $currentWrapper->addClass('changed');
+        }
+        $searchForm->addHTML($options[$activeOption]['label']);
+        $searchForm->addTagClose('div');
+
+        // render options list
+        $searchForm->addTagOpen('ul')->attr('aria-expanded', 'false');
+
+        foreach ($options as $key => $option) {
+            $listItem = $searchForm->addTagOpen('li');
+
+            if ($key === $activeOption) {
+                $listItem->addClass('active');
+                $searchForm->addHTML($option['label']);
+            } else {
+                $link = $this->searchState->withSorting($option['sort'])->getSearchLink($option['label']);
+                $searchForm->addHTML($link);
+            }
+            $searchForm->addTagClose('li');
+        }
+        $searchForm->addTagClose('ul');
+
+        $searchForm->addTagClose('div');
+
+    }
+
+    /**
+     * Check if the query is simple enough to modify its namespace limitations without breaking the rest of the query
+     *
+     * @param array $parsedQuery
+     *
+     * @return bool
+     */
+    protected function isNamespaceAssistanceAvailable(array $parsedQuery) {
+        if (preg_match('/[\(\)\|]/', $parsedQuery['query']) === 1) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Check if the query is simple enough to modify the fragment search behavior without breaking the rest of the query
+     *
+     * @param array $parsedQuery
+     *
+     * @return bool
+     */
+    protected function isFragmentAssistanceAvailable(array $parsedQuery) {
+        if (preg_match('/[\(\)\|]/', $parsedQuery['query']) === 1) {
+            return false;
+        }
+
+        if (!empty($parsedQuery['phrases'])) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Add the elements to be used for search assistance
+     *
+     * @param Form $searchForm
+     */
+    protected function addSearchAssistanceElements(Form $searchForm)
+    {
+        $searchForm->addTagOpen('div')
+            ->addClass('advancedOptions')
+            ->attr('style', 'display: none;')
+            ->attr('aria-hidden', 'true');
+
+        $this->addFragmentBehaviorLinks($searchForm);
+        $this->addNamespaceSelector($searchForm);
+        $this->addDateSelector($searchForm);
+        $this->addSortTool($searchForm);
+
+        $searchForm->addTagClose('div');
+    }
+
+    /**
+     *  Add the elements to adjust the fragment search behavior
+     *
+     * @param Form $searchForm
+     */
+    protected function addFragmentBehaviorLinks(Form $searchForm)
+    {
+        if (!$this->isFragmentAssistanceAvailable($this->parsedQuery)) {
+            return;
+        }
+        global $lang;
+
+        $options = [
+            'exact' => [
+                'label' => $lang['search_exact_match'],
+                'and' => array_map(function ($term) {
+                    return trim($term, '*');
+                }, $this->parsedQuery['and']),
+                'not' => array_map(function ($term) {
+                    return trim($term, '*');
+                }, $this->parsedQuery['not']),
+            ],
+            'starts' => [
+                'label' => $lang['search_starts_with'],
+                'and' => array_map(function ($term) {
+                    return trim($term, '*') . '*';
+                }, $this->parsedQuery['and']),
+                'not' => array_map(function ($term) {
+                    return trim($term, '*') . '*';
+                }, $this->parsedQuery['not']),
+            ],
+            'ends' => [
+                'label' => $lang['search_ends_with'],
+                'and' => array_map(function ($term) {
+                    return '*' . trim($term, '*');
+                }, $this->parsedQuery['and']),
+                'not' => array_map(function ($term) {
+                    return '*' . trim($term, '*');
+                }, $this->parsedQuery['not']),
+            ],
+            'contains' => [
+                'label' => $lang['search_contains'],
+                'and' => array_map(function ($term) {
+                    return '*' . trim($term, '*') . '*';
+                }, $this->parsedQuery['and']),
+                'not' => array_map(function ($term) {
+                    return '*' . trim($term, '*') . '*';
+                }, $this->parsedQuery['not']),
+            ]
+        ];
+
+        // detect current
+        $activeOption = 'custom';
+        foreach ($options as $key => $option) {
+            if ($this->parsedQuery['and'] === $option['and']) {
+                $activeOption = $key;
+            }
+        }
+        if ($activeOption === 'custom') {
+            $options = array_merge(['custom' => [
+                'label' => $lang['search_custom_match'],
+            ]], $options);
+        }
+
+        $searchForm->addTagOpen('div')->addClass('toggle')->attr('aria-haspopup', 'true');
+        // render current
+        $currentWrapper = $searchForm->addTagOpen('div')->addClass('current');
+        if ($activeOption !== 'exact') {
+            $currentWrapper->addClass('changed');
+        }
+        $searchForm->addHTML($options[$activeOption]['label']);
+        $searchForm->addTagClose('div');
+
+        // render options list
+        $searchForm->addTagOpen('ul')->attr('aria-expanded', 'false');
+
+        foreach ($options as $key => $option) {
+            $listItem = $searchForm->addTagOpen('li');
+
+            if ($key === $activeOption) {
+                $listItem->addClass('active');
+                $searchForm->addHTML($option['label']);
+            } else {
+                $link = $this->searchState
+                    ->withFragments($option['and'], $option['not'])
+                    ->getSearchLink($option['label'])
+                ;
+                $searchForm->addHTML($link);
+            }
+            $searchForm->addTagClose('li');
+        }
+        $searchForm->addTagClose('ul');
+
+        $searchForm->addTagClose('div');
+
+        // render options list
+    }
+
+    /**
+     * Add the elements for the namespace selector
+     *
+     * @param Form $searchForm
+     */
+    protected function addNamespaceSelector(Form $searchForm)
+    {
+        if (!$this->isNamespaceAssistanceAvailable($this->parsedQuery)) {
+            return;
+        }
+
+        global $lang;
+
+        $baseNS = empty($this->parsedQuery['ns']) ? '' : $this->parsedQuery['ns'][0];
+        $extraNS = $this->getAdditionalNamespacesFromResults($baseNS);
+
+        $searchForm->addTagOpen('div')->addClass('toggle')->attr('aria-haspopup', 'true');
+        // render current
+        $currentWrapper = $searchForm->addTagOpen('div')->addClass('current');
+        if ($baseNS) {
+            $currentWrapper->addClass('changed');
+            $searchForm->addHTML('@' . $baseNS);
+        } else {
+            $searchForm->addHTML($lang['search_any_ns']);
+        }
+        $searchForm->addTagClose('div');
+
+        // render options list
+        $searchForm->addTagOpen('ul')->attr('aria-expanded', 'false');
+
+        $listItem = $searchForm->addTagOpen('li');
+        if ($baseNS) {
+            $listItem->addClass('active');
+            $link = $this->searchState->withNamespace('')->getSearchLink($lang['search_any_ns']);
+            $searchForm->addHTML($link);
+        } else {
+            $searchForm->addHTML($lang['search_any_ns']);
+        }
+        $searchForm->addTagClose('li');
+
+        foreach ($extraNS as $ns => $count) {
+            $listItem = $searchForm->addTagOpen('li');
+            $label = $ns . ($count ? " <bdi>($count)</bdi>" : '');
+
+            if ($ns === $baseNS) {
+                $listItem->addClass('active');
+                $searchForm->addHTML($label);
+            } else {
+                $link = $this->searchState->withNamespace($ns)->getSearchLink($label);
+                $searchForm->addHTML($link);
+            }
+            $searchForm->addTagClose('li');
+        }
+        $searchForm->addTagClose('ul');
+
+        $searchForm->addTagClose('div');
+
+    }
+
+    /**
+     * Parse the full text results for their top namespaces below the given base namespace
+     *
+     * @param string $baseNS the namespace within which was searched, empty string for root namespace
+     *
+     * @return array an associative array with namespace => #number of found pages, sorted descending
+     */
+    protected function getAdditionalNamespacesFromResults($baseNS)
+    {
+        $namespaces = [];
+        $baseNSLength = strlen($baseNS);
+        foreach ($this->fullTextResults as $page => $numberOfHits) {
+            $namespace = getNS($page);
+            if (!$namespace) {
+                continue;
+            }
+            if ($namespace === $baseNS) {
+                continue;
+            }
+            $firstColon = strpos((string)$namespace, ':', $baseNSLength + 1) ?: strlen($namespace);
+            $subtopNS = substr($namespace, 0, $firstColon);
+            if (empty($namespaces[$subtopNS])) {
+                $namespaces[$subtopNS] = 0;
+            }
+            $namespaces[$subtopNS] += 1;
+        }
+        ksort($namespaces);
+        arsort($namespaces);
+        return $namespaces;
+    }
+
+    /**
+     * @ToDo: custom date input
+     *
+     * @param Form $searchForm
+     */
+    protected function addDateSelector(Form $searchForm)
+    {
+        global $INPUT, $lang;
+
+        $options = [
+            'any' => [
+                'before' => false,
+                'after' => false,
+                'label' => $lang['search_any_time'],
+            ],
+            'week' => [
+                'before' => false,
+                'after' => '1 week ago',
+                'label' => $lang['search_past_7_days'],
+            ],
+            'month' => [
+                'before' => false,
+                'after' => '1 month ago',
+                'label' => $lang['search_past_month'],
+            ],
+            'year' => [
+                'before' => false,
+                'after' => '1 year ago',
+                'label' => $lang['search_past_year'],
+            ],
+        ];
+        $activeOption = 'any';
+        foreach ($options as $key => $option) {
+            if ($INPUT->str('min') === $option['after']) {
+                $activeOption = $key;
+                break;
+            }
+        }
+
+        $searchForm->addTagOpen('div')->addClass('toggle')->attr('aria-haspopup', 'true');
+        // render current
+        $currentWrapper = $searchForm->addTagOpen('div')->addClass('current');
+        if ($INPUT->has('max') || $INPUT->has('min')) {
+            $currentWrapper->addClass('changed');
+        }
+        $searchForm->addHTML($options[$activeOption]['label']);
+        $searchForm->addTagClose('div');
+
+        // render options list
+        $searchForm->addTagOpen('ul')->attr('aria-expanded', 'false');
+
+        foreach ($options as $key => $option) {
+            $listItem = $searchForm->addTagOpen('li');
+
+            if ($key === $activeOption) {
+                $listItem->addClass('active');
+                $searchForm->addHTML($option['label']);
+            } else {
+                $link = $this->searchState
+                    ->withTimeLimitations($option['after'], $option['before'])
+                    ->getSearchLink($option['label'])
+                ;
+                $searchForm->addHTML($link);
+            }
+            $searchForm->addTagClose('li');
+        }
+        $searchForm->addTagClose('ul');
+
+        $searchForm->addTagClose('div');
+    }
+
+
+    /**
+     * Build the intro text for the search page
+     *
+     * @param string $query the search query
+     *
+     * @return string
+     */
+    protected function getSearchIntroHTML($query)
+    {
+        global $lang;
+
+        $intro = p_locale_xhtml('searchpage');
+
+        $queryPagename = $this->createPagenameFromQuery($this->parsedQuery);
+        $createQueryPageLink = html_wikilink($queryPagename . '?do=edit', $queryPagename);
+
+        $pagecreateinfo = '';
+        if (auth_quickaclcheck($queryPagename) >= AUTH_CREATE) {
+            $pagecreateinfo = sprintf($lang['searchcreatepage'], $createQueryPageLink);
+        }
+        $intro = str_replace(
+            array('@QUERY@', '@SEARCH@', '@CREATEPAGEINFO@'),
+            array(hsc(rawurlencode($query)), hsc($query), $pagecreateinfo),
+            $intro
+        );
+
+        return $intro;
+    }
+
+    /**
+     * Create a pagename based the parsed search query
+     *
+     * @param array $parsedQuery
+     *
+     * @return string pagename constructed from the parsed query
+     */
+    protected function createPagenameFromQuery($parsedQuery)
+    {
+        $pagename = '';
+        if (!empty($parsedQuery['ns'])) {
+            $pagename .= cleanID($parsedQuery['ns'][0]);
+        }
+        $pagename .= ':' . cleanID(implode(' ' , $parsedQuery['highlight']));
+        return $pagename;
+    }
+
+    /**
+     * Build HTML for a list of pages with matching pagenames
+     *
+     * @param array $data search results
+     *
+     * @return string
+     */
+    protected function getPageLookupHTML($data)
+    {
+        if (empty($data)) {
+            return '';
+        }
+
+        global $lang;
+
+        $html = '<div class="search_quickresult">';
+        $html .= '<h3>' . $lang['quickhits'] . ':</h3>';
+        $html .= '<ul class="search_quickhits">';
+        foreach ($data as $id => $title) {
+            $link = html_wikilink(':' . $id);
+            $eventData = [
+                'listItemContent' => [$link],
+                'page' => $id,
+            ];
+            trigger_event('SEARCH_RESULT_PAGELOOKUP', $eventData);
+            $html .= '<li>' . implode('', $eventData['listItemContent']) . '</li>';
+        }
+        $html .= '</ul> ';
+        //clear float (see http://www.complexspiral.com/publications/containing-floats/)
+        $html .= '<div class="clearer"></div>';
+        $html .= '</div>';
+
+        return $html;
+    }
+
+    /**
+     * Build HTML for fulltext search results or "no results" message
+     *
+     * @param array $data      the results of the fulltext search
+     * @param array $highlight the terms to be highlighted in the results
+     *
+     * @return string
+     */
+    protected function getFulltextResultsHTML($data, $highlight)
+    {
+        global $lang;
+
+        if (empty($data)) {
+            return '<div class="nothing">' . $lang['nothingfound'] . '</div>';
+        }
+
+        $html = '<div class="search_fulltextresult">';
+        $html .= '<h3>' . $lang['search_fullresults'] . ':</h3>';
+
+        $html .= '<dl class="search_results">';
+        $num = 1;
+
+        foreach ($data as $id => $cnt) {
+            $resultLink = html_wikilink(':' . $id, null, $highlight);
+
+            $resultHeader = [$resultLink];
+
+
+            $restrictQueryToNSLink = $this->restrictQueryToNSLink(getNS($id));
+            if ($restrictQueryToNSLink) {
+                $resultHeader[] = $restrictQueryToNSLink;
+            }
+
+            $snippet = '';
+            $lastMod = '';
+            $mtime = filemtime(wikiFN($id));
+            if ($cnt !== 0) {
+                $resultHeader[] = $cnt . ' ' . $lang['hits'];
+                if ($num < FT_SNIPPET_NUMBER) { // create snippets for the first number of matches only
+                    $snippet = '<dd>' . ft_snippet($id, $highlight) . '</dd>';
+                    $lastMod = '<span class="search_results__lastmod">' . $lang['lastmod'] . ' ';
+                    $lastMod .= '<time datetime="' . date_iso8601($mtime) . '" title="'.dformat($mtime).'">' . dformat($mtime, '%f') . '</time>';
+                    $lastMod .= '</span>';
+                }
+                $num++;
+            }
+
+            $metaLine = '<div class="search_results__metaLine">';
+            $metaLine .= $lastMod;
+            $metaLine .= '</div>';
+
+
+            $eventData = [
+                'resultHeader' => $resultHeader,
+                'resultBody' => [$metaLine, $snippet],
+                'page' => $id,
+            ];
+            trigger_event('SEARCH_RESULT_FULLPAGE', $eventData);
+            $html .= '<div class="search_fullpage_result">';
+            $html .= '<dt>' . implode(' ', $eventData['resultHeader']) . '</dt>';
+            $html .= implode('', $eventData['resultBody']);
+            $html .= '</div>';
+        }
+        $html .= '</dl>';
+
+        $html .= '</div>';
+
+        return $html;
+    }
+
+    /**
+     * create a link to restrict the current query to a namespace
+     *
+     * @param false|string $ns the namespace to which to restrict the query
+     *
+     * @return false|string
+     */
+    protected function restrictQueryToNSLink($ns)
+    {
+        if (!$ns) {
+            return false;
+        }
+        if (!$this->isNamespaceAssistanceAvailable($this->parsedQuery)) {
+            return false;
+        }
+        if (!empty($this->parsedQuery['ns']) && $this->parsedQuery['ns'][0] === $ns) {
+            return false;
+        }
+
+        $name = '@' . $ns;
+        return $this->searchState->withNamespace($ns)->getSearchLink($name);
+    }
+}
diff --git a/inc/Ui/SearchState.php b/inc/Ui/SearchState.php
new file mode 100644
index 0000000000000000000000000000000000000000..f45156d282e18594d9be8fdc4aa8ec801c1b389f
--- /dev/null
+++ b/inc/Ui/SearchState.php
@@ -0,0 +1,141 @@
+<?php
+
+namespace dokuwiki\Ui;
+
+class SearchState
+{
+    /**
+     * @var array
+     */
+    protected $parsedQuery = [];
+
+    /**
+     * SearchState constructor.
+     *
+     * @param array $parsedQuery
+     */
+    public function __construct(array $parsedQuery)
+    {
+        global $INPUT;
+
+        $this->parsedQuery = $parsedQuery;
+        if (!isset($parsedQuery['after'])) {
+            $this->parsedQuery['after'] = $INPUT->str('min');
+        }
+        if (!isset($parsedQuery['before'])) {
+            $this->parsedQuery['before'] = $INPUT->str('max');
+        }
+        if (!isset($parsedQuery['sort'])) {
+            $this->parsedQuery['sort'] = $INPUT->str('srt');
+        }
+    }
+
+    /**
+     * Get a search state for the current search limited to a new namespace
+     *
+     * @param string $ns the namespace to which to limit the search, falsy to remove the limitation
+     * @param array  $notns
+     *
+     * @return SearchState
+     */
+    public function withNamespace($ns, array $notns = [])
+    {
+        $parsedQuery = $this->parsedQuery;
+        $parsedQuery['ns'] = $ns ? [$ns] : [];
+        $parsedQuery['notns'] = $notns;
+
+        return new SearchState($parsedQuery);
+    }
+
+    /**
+     * Get a search state for the current search with new search fragments and optionally phrases
+     *
+     * @param array $and
+     * @param array $not
+     * @param array $phrases
+     *
+     * @return SearchState
+     */
+    public function withFragments(array $and, array $not, array $phrases = [])
+    {
+        $parsedQuery = $this->parsedQuery;
+        $parsedQuery['and'] = $and;
+        $parsedQuery['not'] = $not;
+        $parsedQuery['phrases'] = $phrases;
+
+        return new SearchState($parsedQuery);
+    }
+
+    /**
+     * Get a search state for the current search with with adjusted time limitations
+     *
+     * @param $after
+     * @param $before
+     *
+     * @return SearchState
+     */
+    public function withTimeLimitations($after, $before)
+    {
+        $parsedQuery = $this->parsedQuery;
+        $parsedQuery['after'] = $after;
+        $parsedQuery['before'] = $before;
+
+        return new SearchState($parsedQuery);
+    }
+
+    /**
+     * Get a search state for the current search with adjusted sort preference
+     *
+     * @param $sort
+     *
+     * @return SearchState
+     */
+    public function withSorting($sort)
+    {
+        $parsedQuery = $this->parsedQuery;
+        $parsedQuery['sort'] = $sort;
+
+        return new SearchState($parsedQuery);
+    }
+
+    /**
+     * Get a link that represents the current search state
+     *
+     * Note that this represents only a simplified version of the search state.
+     * Grouping with braces and "OR" conditions are not supported.
+     *
+     * @param $label
+     *
+     * @return string
+     */
+    public function getSearchLink($label)
+    {
+        global $ID, $conf;
+        $parsedQuery = $this->parsedQuery;
+
+        $tagAttributes = [
+            'target' => $conf['target']['wiki'],
+        ];
+
+        $newQuery = ft_queryUnparser_simple(
+            $parsedQuery['and'],
+            $parsedQuery['not'],
+            $parsedQuery['phrases'],
+            $parsedQuery['ns'],
+            $parsedQuery['notns']
+        );
+        $hrefAttributes = ['do' => 'search', 'sf' => '1', 'q' => $newQuery];
+        if ($parsedQuery['after']) {
+            $hrefAttributes['min'] = $parsedQuery['after'];
+        }
+        if ($parsedQuery['before']) {
+            $hrefAttributes['max'] = $parsedQuery['before'];
+        }
+        if ($parsedQuery['sort']) {
+            $hrefAttributes['srt'] = $parsedQuery['sort'];
+        }
+
+        $href = wl($ID, $hrefAttributes, false, '&');
+        return "<a href='$href' " . buildAttributes($tagAttributes) . ">$label</a>";
+    }
+}
diff --git a/inc/fulltext.php b/inc/fulltext.php
index a727a8b539459660a124686488e6e78129dce4d7..dba11d0e4f1996797d51f4685e25afab48dd27b6 100644
--- a/inc/fulltext.php
+++ b/inc/fulltext.php
@@ -20,14 +20,25 @@ if(!defined('FT_SNIPPET_NUMBER')) define('FT_SNIPPET_NUMBER',15);
  *
  * refactored into ft_pageSearch(), _ft_pageSearch() and trigger_event()
  *
- * @param string $query
- * @param array $highlight
+ * @param string     $query
+ * @param array      $highlight
+ * @param string     $sort
+ * @param int|string $after  only show results with an modified time after this date, accepts timestap or strtotime arguments
+ * @param int|string $before only show results with an modified time before this date, accepts timestap or strtotime arguments
+ *
  * @return array
  */
-function ft_pageSearch($query,&$highlight){
+function ft_pageSearch($query,&$highlight, $sort = null, $after = null, $before = null){
 
-    $data = array();
-    $data['query'] = $query;
+    if ($sort === null) {
+        $sort = 'hits';
+    }
+    $data = [
+        'query' => $query,
+        'sort' => $sort,
+        'after' => $after,
+        'before' => $before
+    ];
     $data['highlight'] =& $highlight;
 
     return trigger_event('SEARCH_QUERY_FULLPAGE', $data, '_ft_pageSearch');
@@ -100,7 +111,7 @@ function _ft_pageSearch(&$data) {
                 break;
             case 'N+:':
             case 'N-:': // namespace
-                $ns = substr($token, 3);
+                $ns = cleanID(substr($token, 3)) . ':';
                 $pages_matched = array();
                 foreach (array_keys($pages_all) as $id) {
                     if (strpos($id, $ns) === 0) {
@@ -134,8 +145,14 @@ function _ft_pageSearch(&$data) {
         }
     }
 
-    // sort docs by count
-    arsort($docs);
+    $docs = _ft_filterResultsByTime($docs, $data['after'], $data['before']);
+
+    if ($data['sort'] === 'mtime') {
+        uksort($docs, 'ft_pagemtimesorter');
+    } else {
+        // sort docs by count
+        arsort($docs);
+    }
 
     return $docs;
 }
@@ -199,7 +216,6 @@ function ft_mediause($id, $ignore_perms = false){
 }
 
 
-
 /**
  * Quicksearch for pagenames
  *
@@ -210,16 +226,25 @@ function ft_mediause($id, $ignore_perms = false){
  * The function always returns titles as well
  *
  * @triggers SEARCH_QUERY_PAGELOOKUP
- * @author Andreas Gohr <andi@splitbrain.org>
- * @author Adrian Lang <lang@cosmocode.de>
+ * @author   Andreas Gohr <andi@splitbrain.org>
+ * @author   Adrian Lang <lang@cosmocode.de>
+ *
+ * @param string     $id       page id
+ * @param bool       $in_ns    match against namespace as well?
+ * @param bool       $in_title search in title?
+ * @param int|string $after    only show results with an modified time after this date, accepts timestap or strtotime arguments
+ * @param int|string $before   only show results with an modified time before this date, accepts timestap or strtotime arguments
  *
- * @param string $id        page id
- * @param bool   $in_ns     match against namespace as well?
- * @param bool   $in_title  search in title?
  * @return string[]
  */
-function ft_pageLookup($id, $in_ns=false, $in_title=false){
-    $data = compact('id', 'in_ns', 'in_title');
+function ft_pageLookup($id, $in_ns=false, $in_title=false, $after = null, $before = null){
+    $data = [
+        'id' => $id,
+        'in_ns' => $in_ns,
+        'in_title' => $in_title,
+        'after' => $after,
+        'before' => $before
+    ];
     $data['has_titles'] = true; // for plugin backward compatibility check
     return trigger_event('SEARCH_QUERY_PAGELOOKUP', $data, '_ft_pageLookup');
 }
@@ -233,9 +258,11 @@ function ft_pageLookup($id, $in_ns=false, $in_title=false){
 function _ft_pageLookup(&$data){
     // split out original parameters
     $id = $data['id'];
-    if (preg_match('/(?:^| )(?:@|ns:)([\w:]+)/', $id, $matches)) {
-        $ns = cleanID($matches[1]) . ':';
-        $id = str_replace($matches[0], '', $id);
+    $Indexer = idx_get_indexer();
+    $parsedQuery = ft_queryParser($Indexer, $id);
+    if (count($parsedQuery['ns']) > 0) {
+        $ns = cleanID($parsedQuery['ns'][0]) . ':';
+        $id = implode(' ', $parsedQuery['highlight']);
     }
 
     $in_ns    = $data['in_ns'];
@@ -279,10 +306,40 @@ function _ft_pageLookup(&$data){
         }
     }
 
+    $pages = _ft_filterResultsByTime($pages, $data['after'], $data['before']);
+
     uksort($pages,'ft_pagesorter');
     return $pages;
 }
 
+
+/**
+ * @param array      $results search results in the form pageid => value
+ * @param int|string $after   only returns results with an modified time after this date, accepts timestap or strtotime arguments
+ * @param int|string $before  only returns results with an modified time after this date, accepts timestap or strtotime arguments
+ *
+ * @return array
+ */
+function _ft_filterResultsByTime(array $results, $after, $before) {
+    if ($after || $before) {
+        $after = is_int($after) ? $after : strtotime($after);
+        $before = is_int($before) ? $before : strtotime($before);
+
+        foreach ($results as $id => $value) {
+            $mTime = filemtime(wikiFN($id));
+            if ($after && $after > $mTime) {
+                unset($results[$id]);
+                continue;
+            }
+            if ($before && $before < $mTime) {
+                unset($results[$id]);
+            }
+        }
+    }
+
+    return $results;
+}
+
 /**
  * Tiny helper function for comparing the searched title with the title
  * from the search index. This function is a wrapper around stripos with
@@ -316,6 +373,20 @@ function ft_pagesorter($a, $b){
     return strcmp ($a,$b);
 }
 
+/**
+ * Sort pages by their mtime, from newest to oldest
+ *
+ * @param string $a
+ * @param string $b
+ *
+ * @return int Returns < 0 if $a is newer than $b, > 0 if $b is newer than $a and 0 if they are of the same age
+ */
+function ft_pagemtimesorter($a, $b) {
+    $mtimeA = filemtime(wikiFN($a));
+    $mtimeB = filemtime(wikiFN($b));
+    return $mtimeB - $mtimeA;
+}
+
 /**
  * Creates a snippet extract
  *
@@ -813,4 +884,36 @@ function ft_termParser($Indexer, $term, $consider_asian = true, $phrase_mode = f
     return $parsed;
 }
 
+/**
+ * Recreate a search query string based on parsed parts, doesn't support negated phrases and `OR` searches
+ *
+ * @param array $and
+ * @param array $not
+ * @param array $phrases
+ * @param array $ns
+ * @param array $notns
+ *
+ * @return string
+ */
+function ft_queryUnparser_simple(array $and, array $not, array $phrases, array $ns, array $notns) {
+    $query = implode(' ', $and);
+    if (!empty($not)) {
+        $query .= ' -' . implode(' -', $not);
+    }
+
+    if (!empty($phrases)) {
+        $query .= ' "' . implode('" "', $phrases) . '"';
+    }
+
+    if (!empty($ns)) {
+        $query .= ' @' . implode(' @', $ns);
+    }
+
+    if (!empty($notns)) {
+        $query .= ' ^' . implode(' ^', $notns);
+    }
+
+    return $query;
+}
+
 //Setup VIM: ex: et ts=4 :
diff --git a/inc/html.php b/inc/html.php
index 7cf0452dbf49aec1d0dfcd4cfe7036554e9c5e07..973b1d1213f4ef0e20d4eb3bf219fa148d7d34b7 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -362,78 +362,6 @@ function html_hilight_callback($m) {
     return $hlight;
 }
 
-/**
- * Run a search and display the result
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function html_search(){
-    global $QUERY, $ID;
-    global $lang;
-
-    $intro = p_locale_xhtml('searchpage');
-    // allow use of placeholder in search intro
-    $pagecreateinfo = (auth_quickaclcheck($ID) >= AUTH_CREATE) ? $lang['searchcreatepage'] : '';
-    $intro = str_replace(
-        array('@QUERY@', '@SEARCH@', '@CREATEPAGEINFO@'),
-        array(hsc(rawurlencode($QUERY)), hsc($QUERY), $pagecreateinfo),
-        $intro
-    );
-    echo $intro;
-
-    //do quick pagesearch
-    $data = ft_pageLookup($QUERY,true,useHeading('navigation'));
-    if(count($data)){
-        print '<div class="search_quickresult">';
-        print '<h3>'.$lang['quickhits'].':</h3>';
-        print '<ul class="search_quickhits">';
-        foreach($data as $id => $title){
-            print '<li> ';
-            if (useHeading('navigation')) {
-                $name = $title;
-            }else{
-                $ns = getNS($id);
-                if($ns){
-                    $name = shorten(noNS($id), ' ('.$ns.')',30);
-                }else{
-                    $name = $id;
-                }
-            }
-            print html_wikilink(':'.$id,$name);
-            print '</li> ';
-        }
-        print '</ul> ';
-        //clear float (see http://www.complexspiral.com/publications/containing-floats/)
-        print '<div class="clearer"></div>';
-        print '</div>';
-    }
-
-    //do fulltext search
-    $regex = array();
-    $data = ft_pageSearch($QUERY,$regex);
-    if(count($data)){
-        print '<dl class="search_results">';
-        $num = 1;
-        foreach($data as $id => $cnt){
-            print '<dt>';
-            print html_wikilink(':'.$id,useHeading('navigation')?null:$id,$regex);
-            if($cnt !== 0){
-                print ': '.$cnt.' '.$lang['hits'].'';
-            }
-            print '</dt>';
-            if($cnt !== 0){
-                if($num < FT_SNIPPET_NUMBER){ // create snippets for the first number of matches only
-                    print '<dd>'.ft_snippet($id,$regex).'</dd>';
-                }
-                $num++;
-            }
-        }
-        print '</dl>';
-    }else{
-        print '<div class="nothing">'.$lang['nothingfound'].'</div>';
-    }
-}
-
 /**
  * Display error on locked pages
  *
diff --git a/inc/lang/ar/lang.php b/inc/lang/ar/lang.php
index e25d0ee5da915ecd2caf9c04c7cb66a6b8d014a8..82ef5325fbc610bf24a113ab02766cde554eabe3 100644
--- a/inc/lang/ar/lang.php
+++ b/inc/lang/ar/lang.php
@@ -70,7 +70,6 @@ $lang['badpassconfirm']        = 'عذراً,كلمة السر غير صحيحة
 $lang['minoredit']             = 'تعديلات طفيفة';
 $lang['draftdate']             = 'حفظ المسودات آليا مفعّل';
 $lang['nosecedit']             = 'غُيرت الصفحة في هذه الأثناء، معلومات الجزء اصبحت قديمة. حُمُلت كل الصفحة بدلا.';
-$lang['searchcreatepage']      = 'إن لم تجد ما تبحث عنه، يمكنك إنشاء صفحة جديدة بعنوان ما تبحث عنة بالضغط على زر "حرر هذه الصفحة".';
 $lang['regmissing']            = 'عذرا، عليك ملء جميع الحقول.';
 $lang['reguexists']            = 'عذرا، يوجد مشترك بنفس الاسم.';
 $lang['regsuccess']            = 'أنشئ المستخدم و ارسلت كلمة السر بالبريد.';
diff --git a/inc/lang/ar/searchpage.txt b/inc/lang/ar/searchpage.txt
index 56355f85f809c6810aa423cd36436496fc0156fe..52537c3babef2eb535346e88b7da323b443519f5 100644
--- a/inc/lang/ar/searchpage.txt
+++ b/inc/lang/ar/searchpage.txt
@@ -2,4 +2,3 @@
 
 نتائج البحث .  @CREATEPAGEINFO@
 
-===== نتائج البحث =====
\ No newline at end of file
diff --git a/inc/lang/az/lang.php b/inc/lang/az/lang.php
index 4416215ddf0f9314d618d75801f63ea687768e77..f2c9aa662061a05fa0194d77640ee52f3bd456a5 100644
--- a/inc/lang/az/lang.php
+++ b/inc/lang/az/lang.php
@@ -59,7 +59,6 @@ $lang['badlogin']              = 'Təssüf ki istifadəçi adı və ya şifrə s
 $lang['minoredit']             = 'Az dəyişiklər';
 $lang['draftdate']             = 'Qaralama yadda saxlandı';
 $lang['nosecedit']             = 'Bu vaxt ərzində səhifə dəyişilmişdir, və bölmə haqqında məlumat köhnəlmişdir. Səhifənin tam versiyası yüklənmişdir.';
-$lang['searchcreatepage']      = 'Əgər Siz axtardığınızı tapa bilmədinizsə, onda Siz adı axtarışınız ilə uyğun düşən yeni səhifə yarada bilərsiniz. Bunu eləmək üçün, sadəcə \'\'Səhifəni yarat\'\' düyməsini sıxın.';
 $lang['regmissing']            = 'Təssüf ki Siz bütün xanələri doldurmalısınız.';
 $lang['reguexists']            = 'Təssüf ki bu ad ilə istifadəçi artıq mövcuddur.';
 $lang['regsuccess']            = 'İstivadəci yaradıldı və şifrə sizin e-maila göndərildi.';
diff --git a/inc/lang/az/searchpage.txt b/inc/lang/az/searchpage.txt
index 6b7fce7549582b8771ee78da9827f360909c13d0..9bf5a5b17031fbff32b1f52320ec52003a5e6220 100644
--- a/inc/lang/az/searchpage.txt
+++ b/inc/lang/az/searchpage.txt
@@ -2,4 +2,3 @@
 
 Qarşınızda - axtarışın nəticələridir. @CREATEPAGEINFO@
 
-===== Nəticələr =====
diff --git a/inc/lang/bg/lang.php b/inc/lang/bg/lang.php
index 6296070d44bd01fce925ab4d7179bc836151a776..fd4677c1adbc8f570ea8e81afbbc10cdb8507659 100644
--- a/inc/lang/bg/lang.php
+++ b/inc/lang/bg/lang.php
@@ -67,7 +67,6 @@ $lang['badpassconfirm']        = 'За съжаление паролата е г
 $lang['minoredit']             = 'Промените са незначителни';
 $lang['draftdate']             = 'Черновата е автоматично записана на';
 $lang['nosecedit']             = 'Страницата бе междувременно променена, презареждане на страницата поради неактуална информация.';
-$lang['searchcreatepage']      = 'Ако не намирате каквото сте търсили, може да създадете или редактирате страница, кръстена на вашата заявка, чрез съответния бутон.';
 $lang['regmissing']            = 'Моля, попълнете всички полета.';
 $lang['reguexists']            = 'Вече съществува потребител с избраното име.';
 $lang['regsuccess']            = 'Потребителят е създаден, а паролата е пратена по електронната поща.';
diff --git a/inc/lang/bg/searchpage.txt b/inc/lang/bg/searchpage.txt
index a44c648cab745d1a3198a4dbcb65af0cbf89e109..6da6042e9062478673ec001878a37fa7721c0440 100644
--- a/inc/lang/bg/searchpage.txt
+++ b/inc/lang/bg/searchpage.txt
@@ -2,4 +2,3 @@
 
 Резултата от търсенето ще намерите по-долу. @CREATEPAGEINFO@
 
-===== Резултати =====
diff --git a/inc/lang/ca-valencia/lang.php b/inc/lang/ca-valencia/lang.php
index 120f1ace06dea0e879d49781540997919eb2b8b6..da6bd67c19deed4b9ba3f915083ce3d4e0467c26 100644
--- a/inc/lang/ca-valencia/lang.php
+++ b/inc/lang/ca-valencia/lang.php
@@ -59,7 +59,6 @@ $lang['badlogin']              = 'Disculpe, pero el nom d\'usuari o la contrasen
 $lang['minoredit']             = 'Canvis menors';
 $lang['draftdate']             = 'Borrador gravat el';
 $lang['nosecedit']             = 'La pàgina ha canviat mentres tant, l\'informació de la secció no estava al dia, s\'ha carregat la pàgina sancera.';
-$lang['searchcreatepage']      = 'Si no ha trobat lo que buscava pot crear o editar una pàgina en el mateix nom que el text que ha buscat utilisant el botó corresponent.';
 $lang['regmissing']            = 'Disculpe, pero deu omplir tots els camps.';
 $lang['reguexists']            = 'Disculpe, pero ya existix un usuari en este nom.';
 $lang['regsuccess']            = 'S\'ha creat l\'usuari i se li ha enviat la contrasenya per correu electrònic.';
diff --git a/inc/lang/ca-valencia/searchpage.txt b/inc/lang/ca-valencia/searchpage.txt
index be8d3e1d7748be22749a7521554ef79d21588762..390d6064bbc6906659c2de6fd21158570222430f 100644
--- a/inc/lang/ca-valencia/searchpage.txt
+++ b/inc/lang/ca-valencia/searchpage.txt
@@ -2,4 +2,3 @@
 
 Pot vore els resultats de la busca ací baix.  @CREATEPAGEINFO@
 
-===== Resultats =====
diff --git a/inc/lang/ca/lang.php b/inc/lang/ca/lang.php
index ec353f770de9c017aa50d1c0a28b2fcf535b11e7..5133b37a30c5a1f4baec45344844dbd803de6815 100644
--- a/inc/lang/ca/lang.php
+++ b/inc/lang/ca/lang.php
@@ -71,7 +71,6 @@ $lang['badpassconfirm']        = 'Contrasenya incorrecta';
 $lang['minoredit']             = 'Canvis menors';
 $lang['draftdate']             = 'L\'esborrany s\'ha desat automàticament';
 $lang['nosecedit']             = 'Mentrestant la pàgina ha estat modificada. La informació de seccions estava obsoleta i ha calgut carregar la pàgina sencera.';
-$lang['searchcreatepage']      = 'Si no trobeu allò que buscàveu, podeu crear una pàgina nova per mitjà del botó \'\'Edita aquesta pàgina\'\'.';
 $lang['regmissing']            = 'Heu d\'omplir tots els camps.';
 $lang['reguexists']            = 'Ja existeix un altre usuari amb aquest nom.';
 $lang['regsuccess']            = 'S\'ha creat l\'usuari. La contrasenya s\'ha enviat per correu.';
diff --git a/inc/lang/ca/searchpage.txt b/inc/lang/ca/searchpage.txt
index 27efcdabfd98327ee2ce670a62de677cec7fed6c..68da58ca26404822bc7996a8d9428127fda222a0 100644
--- a/inc/lang/ca/searchpage.txt
+++ b/inc/lang/ca/searchpage.txt
@@ -2,4 +2,3 @@
 
 Heus ací els resultats de la cerca. @CREATEPAGEINFO@
 
-===== Resultats =====
\ No newline at end of file
diff --git a/inc/lang/cs/lang.php b/inc/lang/cs/lang.php
index 11620f8259456787ea1849704d98c82c60621ab2..e6b008c4c7168aa8ad9a6bad75048e612320aeb6 100644
--- a/inc/lang/cs/lang.php
+++ b/inc/lang/cs/lang.php
@@ -83,7 +83,6 @@ $lang['badpassconfirm']        = 'Bohužel špatné heslo';
 $lang['minoredit']             = 'Drobné změny';
 $lang['draftdate']             = 'Koncept automaticky uložen v';
 $lang['nosecedit']             = 'Stránka byla v mezičase změněna. Informace o sekci již nebylo platné, byla načtena celá stránka.';
-$lang['searchcreatepage']      = 'Pokud jste nenašli, co hledáte, zkuste požadovanou stránku sami vytvořit stisknutím tlačítka \'\'Vytvořit stránku\'\'.';
 $lang['regmissing']            = 'Musíte vyplnit všechny údaje.';
 $lang['reguexists']            = 'Uživatel se stejným jménem už je zaregistrován.';
 $lang['regsuccess']            = 'Uživatelský účet byl vytvořen a heslo zasláno e-mailem.';
diff --git a/inc/lang/cs/searchpage.txt b/inc/lang/cs/searchpage.txt
index 2f5e89ff65f074ab0565bcbaad125f098beb5eff..800d61c27191c6f298a2ea7b62092a035e802785 100644
--- a/inc/lang/cs/searchpage.txt
+++ b/inc/lang/cs/searchpage.txt
@@ -2,4 +2,3 @@
 
 Výsledky hledání můžete vidět níže. @CREATEPAGEINFO@
 
-===== Výsledky =====
diff --git a/inc/lang/cy/lang.php b/inc/lang/cy/lang.php
index 7018e007115747c2e5ca48e8f1531ceacd0aab00..de407f80477abe5890ab01641e6b9fd27f10e903 100644
--- a/inc/lang/cy/lang.php
+++ b/inc/lang/cy/lang.php
@@ -70,7 +70,6 @@ $lang['badpassconfirm']        = 'Sori, roedd y cyfrinair yn anghywir';
 $lang['minoredit']             = 'Newidiadau Bach';
 $lang['draftdate']             = 'Awtogadwyd drafft ar'; // full dformat date will be added
 $lang['nosecedit']             = 'Newidiwyd y dudaen yn y cyfamser, roedd gwybodaeth yr adran wedi dyddio, felly llwythwyd y dudalen gyfan.';
-$lang['searchcreatepage']      = 'Os na wnaethoch chi ddod o hyd i\'r hyn roeddech chi am ddarganfod, gallwch chi greu neu golygu\'r dudalen wedi\'i henwi ar ôl eich ymholiad gyda\'r teclyn priodol.';
 
 $lang['regmissing']            = 'Sori, llenwch bob maes.';
 $lang['reguexists']            = 'Sori, mae defnyddiwr â\'r enw hwn yn bodoli eisoes.';
diff --git a/inc/lang/cy/searchpage.txt b/inc/lang/cy/searchpage.txt
index fd554e1e70ef61e28b4fec80c7b28bd8fe21a395..6a645cb57fd25257f6752f791f715942d4e30cb1 100644
--- a/inc/lang/cy/searchpage.txt
+++ b/inc/lang/cy/searchpage.txt
@@ -2,4 +2,3 @@
 
 Gallwch chi ddarganfod canlyniadau eich chwiliad isod. @CREATEPAGEINFO@
 
-===== Canlyniadau =====
diff --git a/inc/lang/da/lang.php b/inc/lang/da/lang.php
index b0e72c2856ec3454822f8bb4049274d31b3e0b64..c9374f21ec4e6e68f75b86648b0a42008ffdff75 100644
--- a/inc/lang/da/lang.php
+++ b/inc/lang/da/lang.php
@@ -80,7 +80,6 @@ $lang['badpassconfirm']        = 'Adgangkode var desværre forkert';
 $lang['minoredit']             = 'Mindre ændringer';
 $lang['draftdate']             = 'Kladde automatisk gemt d.';
 $lang['nosecedit']             = 'Siden blev ændret i mellemtiden, sektions information var for gammel, hentede hele siden i stedet.';
-$lang['searchcreatepage']      = 'Hvis resultaterne ikke indeholder det du søgte efter kan du oprette et nyt dokument med samme navn som søgningen ved at trykke på knappen **\'\'[Opret dette dokument]\'\'**.';
 $lang['regmissing']            = 'Du skal udfylde alle felter.';
 $lang['reguexists']            = 'Dette brugernavn er allerede i brug.';
 $lang['regsuccess']            = 'Du er nu oprettet som bruger. Dit adgangskode bliver sendt til dig i en e-mail.';
diff --git a/inc/lang/da/searchpage.txt b/inc/lang/da/searchpage.txt
index 9cefd419ca2f78acb25522823f1729cc4adeed21..c4447852ffc9d79b1d36ba898c4b1bed2c4e986c 100644
--- a/inc/lang/da/searchpage.txt
+++ b/inc/lang/da/searchpage.txt
@@ -2,4 +2,3 @@
 
 Du kan se resultaterne af din søgning nedenunder. @CREATEPAGEINFO@
 
-===== Søgeresultater =====
diff --git a/inc/lang/de-informal/lang.php b/inc/lang/de-informal/lang.php
index c3f742e89b21e5ff207a30e87af724c5175f51d2..e4e5b4fa76f31ff2eeec69bed71e26a49a0ae262 100644
--- a/inc/lang/de-informal/lang.php
+++ b/inc/lang/de-informal/lang.php
@@ -84,7 +84,6 @@ $lang['badpassconfirm']        = 'Das Passwort war falsch.';
 $lang['minoredit']             = 'Kleine Änderung';
 $lang['draftdate']             = 'Entwurf gespeichert am';
 $lang['nosecedit']             = 'Diese Seite wurde in der Zwischenzeit geändert, da das Sektionsinfo veraltet ist. Die ganze Seite wird stattdessen geladen.';
-$lang['searchcreatepage']      = 'Falls der gesuchte Begriff nicht gefunden wurde, kannst du direkt eine neue Seite für den Suchbegriff anlegen, indem du auf den Knopf **\'\'[Seite anlegen]\'\'** drückst.';
 $lang['regmissing']            = 'Alle Felder müssen ausgefüllt werden';
 $lang['reguexists']            = 'Der Benutzername existiert leider schon.';
 $lang['regsuccess']            = 'Der neue Benutzer wurde angelegt und das Passwort per E-Mail versandt.';
diff --git a/inc/lang/de-informal/searchpage.txt b/inc/lang/de-informal/searchpage.txt
index e78e4abddbc350075dc347ced691ca7bfa5d3183..5de550a7f83908e1e80644a303ecd04b6e34e1a3 100644
--- a/inc/lang/de-informal/searchpage.txt
+++ b/inc/lang/de-informal/searchpage.txt
@@ -2,6 +2,3 @@
 
 Unten sind die Ergebnisse deiner Suche gelistet. @CREATEPAGEINFO@
 
-===== Ergebnisse =====
-
-
diff --git a/inc/lang/de/lang.php b/inc/lang/de/lang.php
index 7ae6940e8935f834992b4980f77231236ff35d9d..7af01bc242891a4c4efc9fd7b89f05830e53c4d9 100644
--- a/inc/lang/de/lang.php
+++ b/inc/lang/de/lang.php
@@ -93,7 +93,7 @@ $lang['badpassconfirm']        = 'Das Passwort war falsch.';
 $lang['minoredit']             = 'kleine Änderung';
 $lang['draftdate']             = 'Entwurf gespeichert am';
 $lang['nosecedit']             = 'Diese Seite wurde in der Zwischenzeit geändert, der Seitenabschnitt ist veraltet, lade stattdessen volle Seite.';
-$lang['searchcreatepage']      = 'Falls der gesuchte Begriff nicht gefunden wurde, können Sie direkt eine neue Seite für den Suchbegriff anlegen, indem Sie auf den **\'\'[Seite anlegen]\'\'** Knopf drücken.';
+$lang['searchcreatepage']      = 'Falls der gesuchte Begriff nicht gefunden wurde, können Sie direkt eine neue, nach Ihrer Anfrage benannte Seite %s anlegen.';
 $lang['regmissing']            = 'Bitte alle Felder ausfüllen!';
 $lang['reguexists']            = 'Der Benutzername existiert leider schon.';
 $lang['regsuccess']            = 'Der neue Benutzer wurde angelegt und das Passwort per E-Mail versandt.';
diff --git a/inc/lang/de/searchpage.txt b/inc/lang/de/searchpage.txt
index 6cd8006ac3cc1ea9a903c98736040511b453a821..19fe84bcc589caa78a1049d9bcc132db6fbb4b66 100644
--- a/inc/lang/de/searchpage.txt
+++ b/inc/lang/de/searchpage.txt
@@ -1,7 +1,3 @@
 ====== Suche ======
 
 Unten sind die Ergebnisse Ihrer Suche gelistet. @CREATEPAGEINFO@
-
-===== Ergebnisse =====
-
-
diff --git a/inc/lang/el/lang.php b/inc/lang/el/lang.php
index 25910cbef6139984387b38757b727adc42727d0f..4533f414d6ea78aa5519b0a40088712dd253a4b6 100644
--- a/inc/lang/el/lang.php
+++ b/inc/lang/el/lang.php
@@ -73,7 +73,6 @@ $lang['badpassconfirm']        = 'Ο κωδικός που εισάγατε εί
 $lang['minoredit']             = 'Ασήμαντες αλλαγές';
 $lang['draftdate']             = 'Αυτόματη αποθήκευση πρόχειρης σελίδας στις';
 $lang['nosecedit']             = 'Η σελίδα τροποποιήθηκε στο μεταξύ και τα στοιχεία της ενότητας δεν ήταν συγχρονισμένα, οπότε φορτώθηκε η πλήρης σελίδα.  ';
-$lang['searchcreatepage']      = 'Αν δεν βρίσκεις αυτό που ψάχνεις, μπορείς να δημιουργήσεις ή να επεξεργαστείς τη σελίδα που ψάχνεις, χρησιμοποιώντας το κατάλληλο εργαλείο.';
 $lang['regmissing']            = 'Πρέπει να συμπληρώσετε όλα τα πεδία.';
 $lang['reguexists']            = 'Αυτός ο λογαριασμός υπάρχει ήδη.';
 $lang['regsuccess']            = 'Ο λογαριασμός δημιουργήθηκε και ο κωδικός εστάλει με e-mail.';
diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php
index 5bb0e5eaf96f97f1517d2edc24b8aa4aa3d6e42b..4d11bac08d924ffb08c19d0d17d90606da555b98 100644
--- a/inc/lang/en/lang.php
+++ b/inc/lang/en/lang.php
@@ -69,7 +69,22 @@ $lang['badpassconfirm']        = 'Sorry, the password was wrong';
 $lang['minoredit']             = 'Minor Changes';
 $lang['draftdate']             = 'Draft autosaved on'; // full dformat date will be added
 $lang['nosecedit']             = 'The page was changed in the meantime, section info was out of date loaded full page instead.';
-$lang['searchcreatepage']      = 'If you didn\'t find what you were looking for, you can create or edit the page named after your query with the appropriate tool.';
+$lang['searchcreatepage']      = 'If you didn\'t find what you were looking for, you can create or edit the page %s, named after your query.';
+
+$lang['search_fullresults']    = 'Fulltext results';
+$lang['js']['search_toggle_tools']   = 'Toggle Search Tools';
+$lang['search_exact_match']    = 'Exact match';
+$lang['search_starts_with']    = 'Starts with';
+$lang['search_ends_with']      = 'Ends with';
+$lang['search_contains']       = 'Contains';
+$lang['search_custom_match']   = 'Custom';
+$lang['search_any_ns']         = 'Any namespace';
+$lang['search_any_time']       = 'Any time';
+$lang['search_past_7_days']    = 'Past week';
+$lang['search_past_month']     = 'Past month';
+$lang['search_past_year']      = 'Past year';
+$lang['search_sort_by_hits']   = 'Sort by hits';
+$lang['search_sort_by_mtime']  = 'Sort by last modified';
 
 $lang['regmissing']            = 'Sorry, you must fill in all fields.';
 $lang['reguexists']            = 'Sorry, a user with this login already exists.';
diff --git a/inc/lang/en/searchpage.txt b/inc/lang/en/searchpage.txt
index ba0960aa682bcc3e5e6a87a7aecba5f913fc0c77..59cbec251994c0adaea1a965efd1dd35b46f1710 100644
--- a/inc/lang/en/searchpage.txt
+++ b/inc/lang/en/searchpage.txt
@@ -2,4 +2,3 @@
 
 You can find the results of your search below. @CREATEPAGEINFO@
 
-===== Results =====
diff --git a/inc/lang/eo/lang.php b/inc/lang/eo/lang.php
index b48efe5cf811e3361bad07bf9ce9517dd8324619..26d3dd234e4b8599643cec6471d4f85fdbd02f38 100644
--- a/inc/lang/eo/lang.php
+++ b/inc/lang/eo/lang.php
@@ -68,7 +68,6 @@ $lang['badpassconfirm']        = 'Pardonu, la pasvorto malĝustis';
 $lang['minoredit']             = 'Etaj modifoj';
 $lang['draftdate']             = 'Lasta konservo de la skizo:';
 $lang['nosecedit']             = 'La paĝo ŝanĝiĝis intertempe, sekcio-informo estis malĝisdata, tial la tuta paĝo estas reŝargita.';
-$lang['searchcreatepage']      = 'Se vi ne trovis tion, kion vi serĉis, vi povas krei novan paĝon kun necesa nomo per la koresponda butono.';
 $lang['regmissing']            = 'Pardonu, vi devas plenigi ĉiujn kampojn.';
 $lang['reguexists']            = 'Pardonu, ĉi tiu uzanto-nomo jam ekzistas.';
 $lang['regsuccess']            = 'La uzanto kreiĝis kaj la pasvorto sendiĝis per retpoŝto.';
diff --git a/inc/lang/eo/searchpage.txt b/inc/lang/eo/searchpage.txt
index bdefe7b59f328c0ef39c83a5752bbb66f90ff36a..20711c2417da09911d8209deb5f0eac82a561d37 100644
--- a/inc/lang/eo/searchpage.txt
+++ b/inc/lang/eo/searchpage.txt
@@ -1,5 +1,4 @@
 ====== Serĉo ======
 
-Sube estas rezultoj de serĉo en la retejo.\\ @CREATEPAGEINFO@
+Sube estas rezultoj de serĉo en la retejo. @CREATEPAGEINFO@
 
-===== Rezultoj =====
diff --git a/inc/lang/es/lang.php b/inc/lang/es/lang.php
index d3163c08281f21ccc5d4065ec6dcf16cdbe10ea5..55f8508b830ad91152d1a18785cbbf9da4f6b065 100644
--- a/inc/lang/es/lang.php
+++ b/inc/lang/es/lang.php
@@ -105,7 +105,6 @@ $lang['badpassconfirm']        = 'Lo siento, la contraseña es errónea';
 $lang['minoredit']             = 'Cambios menores';
 $lang['draftdate']             = 'Borrador guardado automáticamente:';
 $lang['nosecedit']             = 'La página ha cambiado en el lapso, la información de sección estaba anticuada, en su lugar se cargó la página completa.';
-$lang['searchcreatepage']      = 'Si no has encontrado lo que buscabas, puedes crear una nueva página con tu consulta utilizando el botón  \'\'Crea esta página\'\'.';
 $lang['regmissing']            = 'Lo siento, tienes que completar todos los campos.';
 $lang['reguexists']            = 'Lo siento, ya existe un usuario con este nombre.';
 $lang['regsuccess']            = 'El usuario ha sido creado y la contraseña se ha enviado por correo.';
diff --git a/inc/lang/es/searchpage.txt b/inc/lang/es/searchpage.txt
index 819815b15a045421c8e5da3ea436b269d19492da..9bc31616ace0f05908a7343f5e04506bbd30445c 100644
--- a/inc/lang/es/searchpage.txt
+++ b/inc/lang/es/searchpage.txt
@@ -2,4 +2,3 @@
 
 Puedes encontrar los resultados de tu búsqueda abajo. @CREATEPAGEINFO@
 
-===== Resultados =====
\ No newline at end of file
diff --git a/inc/lang/et/lang.php b/inc/lang/et/lang.php
index f8051d0fc0f38a26e9e6921392061adf8c4a13ef..0320812c9d7699abc7dd2a643b340aafd53b4f9b 100644
--- a/inc/lang/et/lang.php
+++ b/inc/lang/et/lang.php
@@ -68,7 +68,6 @@ $lang['badpassconfirm']        = 'Väär salasõna';
 $lang['minoredit']             = 'Ebaolulised muudatused';
 $lang['draftdate']             = 'Mustand automaatselt salvestatud';
 $lang['nosecedit']             = 'Leht on vahepeal muutunud, jaotiste teave osutus aegunuks sestap laeti tervelehekülg.';
-$lang['searchcreatepage']      = "Kui Sa otsitavat ei leidnud võid tekitada oma otsingu nimelise uue lehe kasutades ''Toimeta seda lehte'' nuppu.";
 $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.';
diff --git a/inc/lang/et/searchpage.txt b/inc/lang/et/searchpage.txt
index 6ba57324a4bb1374b2bb7729d62734a96f89df94..546ae0eea151be1c5c67259f76e9dc957cd787b2 100644
--- a/inc/lang/et/searchpage.txt
+++ b/inc/lang/et/searchpage.txt
@@ -2,4 +2,3 @@
 
 Leiad vasted oma otsingule. @CREATEPAGEINFO@
 
-===== Vasted =====
diff --git a/inc/lang/eu/lang.php b/inc/lang/eu/lang.php
index 85891abbe774c024f47f4a0c2fcde38272821d94..4e074f0e76bb4c4febf6c2c09cac29712717e50b 100644
--- a/inc/lang/eu/lang.php
+++ b/inc/lang/eu/lang.php
@@ -68,7 +68,6 @@ $lang['badpassconfirm']        = 'Pasahitz okerra';
 $lang['minoredit']             = 'Aldaketa Txikiak';
 $lang['draftdate']             = 'Zirriborroa automatikoki gorde da hemen:';
 $lang['nosecedit']             = 'Orria aldatua izan da bitartean, info atala zaharkituta geratu da, orri osoa kargatu da horren ordez.';
-$lang['searchcreatepage']      = 'Bilatzen zabiltzana aurkitu ez baduzu, zuk zeuk sortu dezakezu orri berri bat bilaketa ostean \'\'Sortu orri hau\'\' erabiliz.';
 $lang['regmissing']            = 'Barkatu, hutsune guztiak bete behar dituzu.';
 $lang['reguexists']            = 'Barkatu, izen bereko erabiltzailea existitzen da.';
 $lang['regsuccess']            = 'Erabiltzailea sortu da. Pasahitza mailez bidaliko zaizu.';
diff --git a/inc/lang/eu/searchpage.txt b/inc/lang/eu/searchpage.txt
index c632305b995005ab19436d71240c2b50af461c2c..ebd31d0deda8b92160b804444ea87ed2bbe2f369 100644
--- a/inc/lang/eu/searchpage.txt
+++ b/inc/lang/eu/searchpage.txt
@@ -2,4 +2,3 @@
 
 Emaitzak ondorengo aurkiketan bilatu ditzakezu. @CREATEPAGEINFO@
 
-===== Bilaketa emaitzak: =====
diff --git a/inc/lang/fa/lang.php b/inc/lang/fa/lang.php
index 529c9f82086df7c9bbbc59fc7b1daac085899415..d1e16e7fd75973dfcb4114437931214dc2120388 100644
--- a/inc/lang/fa/lang.php
+++ b/inc/lang/fa/lang.php
@@ -78,7 +78,6 @@ $lang['badpassconfirm']        = 'متاسفم، رمز عبور اشتباه ا
 $lang['minoredit']             = 'ویرایش‌های خُرد';
 $lang['draftdate']             = 'ذخیره خودکار پیش‌نویس در';
 $lang['nosecedit']             = 'این صفحه در این میان تغییر کرده است، اطلاعات بخش قدیمی شده است، در عوض محتوای کل نمایش داده می‌شود.';
-$lang['searchcreatepage']      = 'اگر به نتیجه‌ی مطلوبی نرسیده‌اید، می‌توانید صفحه‌ی مورد نظر را ایجاد کنید.';
 $lang['regmissing']            = 'متاسفم، شما باید همه قسمت‌ها را پر کنید.';
 $lang['reguexists']            = 'نام کاربری‌ای که وارد کردید قبلن استفاده شده است.';
 $lang['regsuccess']            = 'کاربر ساخته شد و گذرواژه به صورت ایمیل ارسال گردید.';
diff --git a/inc/lang/fa/searchpage.txt b/inc/lang/fa/searchpage.txt
index f7f1a53094a7e57bca4a65415d68c08f35d81c52..50d872e0553d1923bc4b8e881c7fffb2b2c3438f 100644
--- a/inc/lang/fa/searchpage.txt
+++ b/inc/lang/fa/searchpage.txt
@@ -2,4 +2,3 @@
 
 نتایج جستجو در زیر آمده است. @CREATEPAGEINFO@
 
-===== نتایج =====
\ No newline at end of file
diff --git a/inc/lang/fi/lang.php b/inc/lang/fi/lang.php
index d16c856fdd0a7326db7d96293b9c522881fbfa9e..ebcca3347fc979238a9546d8bac6269de649cf64 100644
--- a/inc/lang/fi/lang.php
+++ b/inc/lang/fi/lang.php
@@ -71,7 +71,6 @@ $lang['badpassconfirm']        = 'Valitan. Salasana oli väärin';
 $lang['minoredit']             = 'Pieni muutos';
 $lang['draftdate']             = 'Luonnos tallennettu automaattisesti';
 $lang['nosecedit']             = 'Sivu on muuttunut välillä ja kappaleen tiedot olivat vanhentuneet. Koko sivu ladattu.';
-$lang['searchcreatepage']      = 'Jos et löytänyt etsimääsi voit luoda uuden sivun tiedustelusi pohjalta käyttämällä \'\'Muokkaa tätä sivua\'\' -napilla.';
 $lang['regmissing']            = 'Kaikki kentät tulee täyttää.';
 $lang['reguexists']            = 'Käyttäjä tällä käyttäjänimellä on jo olemassa.';
 $lang['regsuccess']            = 'Käyttäjä luotiin ja salasana lähetettiin sähköpostilla.';
diff --git a/inc/lang/fi/searchpage.txt b/inc/lang/fi/searchpage.txt
index b2ad8cc986773e031487cbeef44af560e97150ab..8e61bf367a0849f355b18d07ce3e917ff3a07d25 100644
--- a/inc/lang/fi/searchpage.txt
+++ b/inc/lang/fi/searchpage.txt
@@ -2,4 +2,3 @@
 
 Löydät etsinnän tulokset alta. @CREATEPAGEINFO@
 
-===== Tulokset =====
diff --git a/inc/lang/fo/lang.php b/inc/lang/fo/lang.php
index 50f2faca7d25cfc6cea5c034e9f983432ebd3147..9b078d3b62b1d8fc9ec060f93353183fcf6bf4c3 100644
--- a/inc/lang/fo/lang.php
+++ b/inc/lang/fo/lang.php
@@ -58,7 +58,6 @@ $lang['badlogin']              = 'Skeivt brúkaranavn ella loyniorð.';
 $lang['minoredit']             = 'Smærri broytingar';
 $lang['draftdate']             = 'Goym kladdu sett frá';
 $lang['nosecedit']             = 'Hendan síðan var broytt undir tilevnan, brotið var ikki rætt dagfest, heintaði fulla síðu í staðin';
-$lang['searchcreatepage']      = "Um úrslitini ikki innihalda tað sum tú leitaði eftir kanst tú upprætta eitt nýtt skjal við sama navni sum leitingin við at trýsta á **''[Upprætta hetta skjal]''** knappin.";
 $lang['regmissing']            = 'Tú skalt fylla út øll øki.';
 $lang['reguexists']            = 'Hetta brúkaranavn er upptiki.';
 $lang['regsuccess']            = 'Tú ert nú stovnavur sum brúkari. Títt loyniorð verður sent til tín í einum T-posti.';
diff --git a/inc/lang/fo/searchpage.txt b/inc/lang/fo/searchpage.txt
index 33bcc320647ebee530b44b21c1ca3d5580ed6316..896102bfe5dd4040d63ddf5dade3521339053fdb 100644
--- a/inc/lang/fo/searchpage.txt
+++ b/inc/lang/fo/searchpage.txt
@@ -2,4 +2,3 @@
 
 Tú kanst síggja úrslitini av tíni leiting niðanfyri. @CREATEPAGEINFO@
 
-===== Leitiúrslit =====
diff --git a/inc/lang/fr/lang.php b/inc/lang/fr/lang.php
index f7f9dd80991e48532d8a432b322a5f096f451e22..13ae644f97c0f29aa3ff79591d9cd25686dbe9d7 100644
--- a/inc/lang/fr/lang.php
+++ b/inc/lang/fr/lang.php
@@ -99,7 +99,6 @@ $lang['badpassconfirm']        = 'Désolé, le mot de passe est erroné';
 $lang['minoredit']             = 'Modification mineure';
 $lang['draftdate']             = 'Brouillon enregistré automatiquement le';
 $lang['nosecedit']             = 'La page a changé entre temps, les informations de la section sont obsolètes ; la page complète a été chargée à la place.';
-$lang['searchcreatepage']      = 'Si vous n\'avez pas trouvé ce que vous cherchiez, vous pouvez créer ou modifier la page correspondant à votre requête en cliquant sur le bouton approprié.';
 $lang['regmissing']            = 'Désolé, vous devez remplir tous les champs.';
 $lang['reguexists']            = 'Désolé, ce nom d\'utilisateur est déjà pris.';
 $lang['regsuccess']            = 'L\'utilisateur a été créé. Le mot de passe a été expédié par courriel.';
diff --git a/inc/lang/fr/searchpage.txt b/inc/lang/fr/searchpage.txt
index 5577a3a2a3fb1e2bd09014e7855857b70184c958..7866187d49a2aece48ecfddea8c160704ad8713d 100644
--- a/inc/lang/fr/searchpage.txt
+++ b/inc/lang/fr/searchpage.txt
@@ -2,4 +2,3 @@
 
 Voici les résultats de votre recherche. @CREATEPAGEINFO@
 
-===== Résultats =====
diff --git a/inc/lang/gl/lang.php b/inc/lang/gl/lang.php
index 941989a32aa7c3cb91619bbb70b7fc4b89c7ac9f..a83279e822160fc456a97601a47a9d3867f7f472 100644
--- a/inc/lang/gl/lang.php
+++ b/inc/lang/gl/lang.php
@@ -62,7 +62,6 @@ $lang['badlogin']              = 'Sentímolo, mais o nome de usuario ou o contra
 $lang['minoredit']             = 'Trocos Menores';
 $lang['draftdate']             = 'Borrador gardado automaticamente en';
 $lang['nosecedit']             = 'A páxina mudou entrementres, a información da sección estaba desfasada polo que se cargou a páxina completa no seu lugar.';
-$lang['searchcreatepage']      = "Se non atopaches o que estabas a procurar, podes crear ou editar a páxina co nome relacionado coa túa procura empregando o botón axeitado.";
 $lang['regmissing']            = 'Sentímolo, mais tes que cubrir todos os campos.';
 $lang['reguexists']            = 'Sentímolo, mais xa existe un usuario con ese nome.';
 $lang['regsuccess']            = 'O usuario foi creado e o contrasinal enviado por correo-e.';
diff --git a/inc/lang/gl/searchpage.txt b/inc/lang/gl/searchpage.txt
index e37ec46427c5f7a7933b051e16b5eeff9ced3dcc..6c884935541b8c66b7fb7279336d7067c0cfc46a 100644
--- a/inc/lang/gl/searchpage.txt
+++ b/inc/lang/gl/searchpage.txt
@@ -2,4 +2,3 @@
 
 Podes atopar os resultados da túa procura a continuación. @CREATEPAGEINFO@
 
-===== Resultados =====
diff --git a/inc/lang/he/lang.php b/inc/lang/he/lang.php
index 7c7f52f531eea5929c795a24776e71da87d5edd2..655bc5d8054807f557d28571a4f9ed2e102ab4fe 100644
--- a/inc/lang/he/lang.php
+++ b/inc/lang/he/lang.php
@@ -77,7 +77,6 @@ $lang['badpassconfirm']        = 'מצטערים, הסיסמה שגויה';
 $lang['minoredit']             = 'שינוים מזעריים';
 $lang['draftdate']             = 'הטיוטה נשמרה אוטומטית ב־';
 $lang['nosecedit']             = 'הדף השתנה בינתיים, הקטע שערכת אינו מעודכן - העמוד כולו נטען במקום זאת.';
-$lang['searchcreatepage']      = 'אם לא נמצאו דפים בחיפוש, לחיצה על הכפתור "עריכה" תיצור דף חדש על שם מילת החיפוש שהוזנה.';
 $lang['regmissing']            = 'עליך למלא את כל השדות, עמך הסליחה.';
 $lang['reguexists']            = 'משתמש בשם זה כבר נרשם, עמך הסליחה.';
 $lang['regsuccess']            = 'ההרשמה הצליחה, המשתמש נרשם והודעה נשלחה בדוא״ל.';
diff --git a/inc/lang/he/searchpage.txt b/inc/lang/he/searchpage.txt
index 78839c371ba0d9fc6cf75251f98de2d7fc1d21ba..574629b172b5b12609d46ee10fdcc7dd94d39dd7 100644
--- a/inc/lang/he/searchpage.txt
+++ b/inc/lang/he/searchpage.txt
@@ -2,4 +2,3 @@
 
 ניתן לראות את תוצאות החיפוש למטה. @CREATEPAGEINFO@
 
-===== תוצאות =====
\ No newline at end of file
diff --git a/inc/lang/hr/lang.php b/inc/lang/hr/lang.php
index b30e6f04eeb36fa383addebc29be30312aec731b..2694bd714db31230a04fc00d28537e76691ef4a3 100644
--- a/inc/lang/hr/lang.php
+++ b/inc/lang/hr/lang.php
@@ -68,7 +68,6 @@ $lang['badpassconfirm']        = 'Nažalost, lozinka nije ispravna';
 $lang['minoredit']             = 'Manje izmjene';
 $lang['draftdate']             = 'Nacrt promjena automatski spremljen u';
 $lang['nosecedit']             = 'Stranica se u međuvremenu promijenila. Informacija o odjeljku je ostarila pa je učitana kompletna stranica.';
-$lang['searchcreatepage']      = 'Ako ne možete naći što tražite, možete urediti ili stvoriti novu stranicu s odgovarajućim alatom.';
 $lang['regmissing']            = 'Morate popuniti sva polja.';
 $lang['reguexists']            = 'Korisnik s tim korisničkim imenom već postoji.';
 $lang['regsuccess']            = 'Korisnik je uspješno stvoren i poslana je lozinka emailom.';
diff --git a/inc/lang/hr/searchpage.txt b/inc/lang/hr/searchpage.txt
index 90d2ffdf4653e9634b258984aa589b0d5115c147..14c050960edb70665153ffa48ed400431734a0d6 100644
--- a/inc/lang/hr/searchpage.txt
+++ b/inc/lang/hr/searchpage.txt
@@ -2,4 +2,3 @@
 
 Možete naći rezultat vaše pretrage u nastavku. @CREATEPAGEINFO@
 
-====== Rezultati ======
diff --git a/inc/lang/hu/lang.php b/inc/lang/hu/lang.php
index cbb337488c709bdce1cadc5b25dd1ba1ed68bca3..e13c1ecd1bd44c6729596b0a6a02ebdd888c8d9b 100644
--- a/inc/lang/hu/lang.php
+++ b/inc/lang/hu/lang.php
@@ -74,7 +74,6 @@ $lang['badpassconfirm']        = 'Hibás jelszó';
 $lang['minoredit']             = 'Apróbb változások';
 $lang['draftdate']             = 'Piszkozat elmentve:';
 $lang['nosecedit']             = 'Időközben megváltozott az oldal, emiatt a szakasz nem friss. Töltsd újra az egész oldalt!';
-$lang['searchcreatepage']      = 'Ha nem találtad meg amit kerestél, akkor létrehozhatsz egy új oldalt a keresésed alapján \'\'Az oldal szerkesztése\'\' gombbal.';
 $lang['regmissing']            = 'Sajnáljuk, az összes mezőt ki kell töltened.';
 $lang['reguexists']            = 'Sajnáljuk, ilyen azonosítójú felhasználónk már van.';
 $lang['regsuccess']            = 'A felhasználói azonosítót létrehoztuk. A jelszót postáztuk.';
diff --git a/inc/lang/hu/searchpage.txt b/inc/lang/hu/searchpage.txt
index 7e186e5cbb1582077cb38269731218122783c153..6329a46d96a1591091c55d1e785bb1a716710603 100644
--- a/inc/lang/hu/searchpage.txt
+++ b/inc/lang/hu/searchpage.txt
@@ -2,4 +2,3 @@
 
 A keresés eredményét lentebb láthatod. @CREATEPAGEINFO@
 
-===== Eredmény(ek) =====
\ No newline at end of file
diff --git a/inc/lang/ia/lang.php b/inc/lang/ia/lang.php
index b40d99c48f88898fb28a668862b5887758ad7cb3..a00f8bfacce75be2ab673d32c56fd1e43f989068 100644
--- a/inc/lang/ia/lang.php
+++ b/inc/lang/ia/lang.php
@@ -63,7 +63,6 @@ $lang['badlogin']              = 'Le nomine de usator o le contrasigno es incorr
 $lang['minoredit']             = 'Modificationes minor';
 $lang['draftdate']             = 'Version provisori automaticamente salveguardate le';
 $lang['nosecedit']             = 'Le pagina ha essite modificate intertanto. Le informationes del section es ora obsolete, dunque le pagina complete ha essite cargate in su loco.';
-$lang['searchcreatepage']      = 'Si tu non ha trovate lo que tu cerca, tu pote crear o modificar le pagina nominate secundo tu consulta con le button appropriate.';
 $lang['regmissing']            = 'Es necessari completar tote le campos.';
 $lang['reguexists']            = 'Regrettabilemente, un usator con iste nomine ja existe.';
 $lang['regsuccess']            = 'Le conto ha essite create e le contrasigno ha essite inviate per e-mail.';
diff --git a/inc/lang/ia/searchpage.txt b/inc/lang/ia/searchpage.txt
index a8f7fce514c8a3b8ae1f049bf0f20e15a06de0cd..7e093d27f500327bf701b992b408ad780623ee66 100644
--- a/inc/lang/ia/searchpage.txt
+++ b/inc/lang/ia/searchpage.txt
@@ -2,4 +2,3 @@
 
 Le resultatos de tu recerca se trova hic infra. @CREATEPAGEINFO@
 
-===== Resultatos =====
\ No newline at end of file
diff --git a/inc/lang/id/lang.php b/inc/lang/id/lang.php
index fad99299c780f38bbbb46d10a4fe2b0ca379684e..dc9d66259f8b558540414b898fec87f82c393774 100644
--- a/inc/lang/id/lang.php
+++ b/inc/lang/id/lang.php
@@ -64,7 +64,6 @@ $lang['badlogin']              = 'Maaf, username atau password salah.';
 $lang['badpassconfirm']        = 'Maaf, password salah';
 $lang['minoredit']             = 'Perubahan Minor';
 $lang['draftdate']             = 'Simpan draft secara otomatis';
-$lang['searchcreatepage']      = 'Jika Anda tidak menemukan apa yang diinginkan, Anda dapat membuat halaman baru, dengan nama sesuai "text pencarian" Anda. Gunakan tombol "Edit halaman ini".';
 $lang['regmissing']            = 'Maaf, Anda harus mengisi semua field.';
 $lang['reguexists']            = 'Maaf, user dengan user login ini telah ada.';
 $lang['regsuccess']            = 'User telah didaftarkan dan password telah dikirim ke email Anda.';
diff --git a/inc/lang/id/searchpage.txt b/inc/lang/id/searchpage.txt
index b3fb56580057b838bca297d0c6896c9a91c0a68d..c03b6d729af2d1e919ac0cca72aca8f8bc7d935d 100644
--- a/inc/lang/id/searchpage.txt
+++ b/inc/lang/id/searchpage.txt
@@ -2,4 +2,3 @@
 
 Anda dapat menemukan hasil pencarian dibawah ini. @CREATEPAGEINFO@
 
-===== Hasil Pencarian =====
\ No newline at end of file
diff --git a/inc/lang/it/lang.php b/inc/lang/it/lang.php
index 17195ac03d33212f2521ce4fc531c480c3e563b2..5d6a88c338cd24a3f910cf7b943a392db1ab4e2c 100644
--- a/inc/lang/it/lang.php
+++ b/inc/lang/it/lang.php
@@ -82,7 +82,6 @@ $lang['badpassconfirm']        = 'La password è errata';
 $lang['minoredit']             = 'Modifiche minori';
 $lang['draftdate']             = 'Bozza salvata in automatico il';
 $lang['nosecedit']             = 'La pagina è stata modificata nel frattempo; è impossibile modificare solo la sezione scelta, quindi è stata caricata la pagina intera.';
-$lang['searchcreatepage']      = 'Se non hai trovato quello che cercavi, puoi creare una nuova pagina con questo titolo usando il pulsante \'\'Crea questa pagina\'\'.';
 $lang['regmissing']            = 'Devi riempire tutti i campi.';
 $lang['reguexists']            = 'Il nome utente inserito esiste già.';
 $lang['regsuccess']            = 'L\'utente è stato creato. La password è stata spedita via email.';
diff --git a/inc/lang/it/searchpage.txt b/inc/lang/it/searchpage.txt
index 6f269da015e89c172a0ae7c4b2d2fd7f290b3e37..e997ebdb726315ebb49d01142624a02de45f7ce0 100644
--- a/inc/lang/it/searchpage.txt
+++ b/inc/lang/it/searchpage.txt
@@ -2,4 +2,3 @@
 
 Questi sono i risultati della ricerca. @CREATEPAGEINFO@
 
-===== Risultati =====
diff --git a/inc/lang/ja/lang.php b/inc/lang/ja/lang.php
index 3f2101d1f8a86e86bd2d39e691215b7ac411bf7e..5f21a7e941682a79bd042faf881c192671bc9d81 100644
--- a/inc/lang/ja/lang.php
+++ b/inc/lang/ja/lang.php
@@ -72,7 +72,6 @@ $lang['badpassconfirm']        = 'パスワードが間違っています。';
 $lang['minoredit']             = '小変更';
 $lang['draftdate']             = 'ドラフト保存日時:';
 $lang['nosecedit']             = 'ページ内容が変更されていますがセクション情報が古いため、代わりにページ全体をロードしました。';
-$lang['searchcreatepage']      = 'もし、探しているものが見つからない場合、 検索キーワードにちなんだ名前の文書を作成もしくは編集を行ってください。';
 $lang['regmissing']            = '全ての項目を入力してください。';
 $lang['reguexists']            = 'このユーザー名は既に存在しています。';
 $lang['regsuccess']            = '新しいユーザーが作成されました。パスワードは登録したメールアドレス宛てに送付されます。';
diff --git a/inc/lang/ja/searchpage.txt b/inc/lang/ja/searchpage.txt
index 80b0950c6878357b2edd6d3425ce7996e5a8c1e9..3c8751a2d1e4e977e0e46c7a4bcf936dcf88bb47 100644
--- a/inc/lang/ja/searchpage.txt
+++ b/inc/lang/ja/searchpage.txt
@@ -2,4 +2,3 @@
 
 以下に検索結果を表示します。@CREATEPAGEINFO@
 
-===== 結果 =====
diff --git a/inc/lang/ko/lang.php b/inc/lang/ko/lang.php
index 252df6033e3d940f407b15b453029b8074d5fb93..91bd8caaf580a5280cf349a1173832abd9581b73 100644
--- a/inc/lang/ko/lang.php
+++ b/inc/lang/ko/lang.php
@@ -76,7 +76,6 @@ $lang['badpassconfirm']        = '죄송하지만 비밀번호가 잘못되었
 $lang['minoredit']             = '사소한 바뀜';
 $lang['draftdate']             = '초안 자동 저장 시간';
 $lang['nosecedit']             = '한 동안 문서가 바뀌었으며, 문단 정보가 오래되어 문서 전체를 대신 열었습니다.';
-$lang['searchcreatepage']      = '만약 원하는 문서를 찾지 못했다면, \'\'문서 만들기\'\'나 \'\'문서 편집\'\'을 사용해 검색어와 같은 이름의 문서를 만들거나 편집할 수 있습니다.';
 $lang['regmissing']            = '죄송하지만 모든 필드를 채워야 합니다.';
 $lang['reguexists']            = '죄송하지만 같은 이름을 사용하는 사용자가 있습니다.';
 $lang['regsuccess']            = '사용자 계정을 만들었으며 비밀번호는 이메일로 보냈습니다.';
diff --git a/inc/lang/ko/searchpage.txt b/inc/lang/ko/searchpage.txt
index bb834277fa0cf6d6595a861ad9422c2f92d1b0d5..9a3d2f3560df6442923150f6461ad390f86ff341 100644
--- a/inc/lang/ko/searchpage.txt
+++ b/inc/lang/ko/searchpage.txt
@@ -2,4 +2,3 @@
 
 아래에서 검색 결과를 찾을 수 있습니다. @CREATEPAGEINFO@
 
-===== ê²°ê³¼ =====
\ No newline at end of file
diff --git a/inc/lang/ku/lang.php b/inc/lang/ku/lang.php
index 460b5e8a304b87102e70da37d22961dd4c002560..3bfb5e645df81c1f506985bbd0c029e73b311525 100644
--- a/inc/lang/ku/lang.php
+++ b/inc/lang/ku/lang.php
@@ -41,6 +41,5 @@ $lang['lastmod']    = 'Guherandina dawî:';
 $lang['deleted']    = 'hat jê birin';
 $lang['created']    = 'hat afirandin';
 $lang['summary']    = 'Kurteya guhartinê';
-$lang['searchcreatepage']      = "Heke tiştek nehatibe dîtin, tu dikarî dest bi nivîsandina rûpelekê nû bikî. Ji bo vê, ''Vê rûpelê biguherîne'' bitikîne.";
 
 //Setup VIM: ex: et ts=2 :
diff --git a/inc/lang/ku/searchpage.txt b/inc/lang/ku/searchpage.txt
index f762b9873c7f9422eb5871c0b4c168ec90059911..90055b1f7a52384a51b3cfebc0c09aa79f2e7dc2 100644
--- a/inc/lang/ku/searchpage.txt
+++ b/inc/lang/ku/searchpage.txt
@@ -2,4 +2,3 @@
 
 Jêr encamên lêgerandina te tên nîşan dan. @CREATEPAGEINFO@
 
-===== Encam =====
\ No newline at end of file
diff --git a/inc/lang/la/searchpage.txt b/inc/lang/la/searchpage.txt
index 75fd7cd5bcc924e1b699c623e6abce8b10cb60f6..76255d5390cb7bfda8283f70fbc0ae387106450e 100644
--- a/inc/lang/la/searchpage.txt
+++ b/inc/lang/la/searchpage.txt
@@ -2,4 +2,3 @@
 
 Responsiones in hac pagina uidere potes. @CREATEPAGEINFO@
 
-===== Responsiones =====
\ No newline at end of file
diff --git a/inc/lang/lb/lang.php b/inc/lang/lb/lang.php
index f15e878b467c1b7380f51ebb9feb8440e83f69fe..d4d0fb47feeebdad4fd60116833d4412fa704360 100644
--- a/inc/lang/lb/lang.php
+++ b/inc/lang/lb/lang.php
@@ -54,7 +54,6 @@ $lang['badlogin']              = 'Entschëllegt, de Benotzernumm oder d\'Passwue
 $lang['minoredit']             = 'Kleng Ännerungen';
 $lang['draftdate']             = 'Entworf automatesch gespäichert den';
 $lang['nosecedit']             = 'D\'Säit gouf an Zwëschenzäit g\'ännert, Sektiounsinfo veralt. Ganz Säit gouf aplaz gelueden.';
-$lang['searchcreatepage']      = 'Wanns de net fënns wats de gesicht hues kanns de eng nei Säit mam Numm vun denger Sich uleeën.';
 $lang['regmissing']            = 'Du muss all d\'Felder ausfëllen.';
 $lang['reguexists']            = 'Et get schonn e Benotzer mat deem Numm.';
 $lang['regsuccess']            = 'De Benotzer gouf erstallt an d\'Passwuert via Email geschéckt.';
diff --git a/inc/lang/lb/searchpage.txt b/inc/lang/lb/searchpage.txt
index 9f4e5475e5548a69e881aae34a0b9c49f1563d15..c2e76eb7b8499016359ed0251b92e771266e2597 100644
--- a/inc/lang/lb/searchpage.txt
+++ b/inc/lang/lb/searchpage.txt
@@ -2,4 +2,3 @@
 
 Hei ënnendrënner sinn d'Resultater vun der Sich. @CREATEPAGEINFO@
 
-=====Resultater=====
\ No newline at end of file
diff --git a/inc/lang/lt/lang.php b/inc/lang/lt/lang.php
index dcf0985ec04c9bc5abb53a6f616f6d8ae7801735..67fabef92e6f328618875b77135743175f171455 100644
--- a/inc/lang/lt/lang.php
+++ b/inc/lang/lt/lang.php
@@ -61,7 +61,6 @@ $lang['badlogin']              = 'NurodÄ—te blogÄ… vartotojo vardÄ… arba slapta
 $lang['minoredit']             = 'Nedidelis pataisymas';
 $lang['draftdate']             = 'Juodraštis automatiškai išsaugotas';
 $lang['nosecedit']             = 'Puslapis buvo kažkieno pataisytas, teksto dalies informacija tapo pasenusi, todėl pakrautas visas puslapis.';
-$lang['searchcreatepage']      = 'Jeigu neradote to, ko ieškojote, galite sukurti naują puslapį šiuo pavadinimu paspausdami "Redaguoti šį puslapį".';
 $lang['regmissing']            = 'Turite užpildyti visus laukus.';
 $lang['reguexists']            = 'Vartotojas su pasirinktu prisijungimo vardu jau egzistuoja.';
 $lang['regsuccess']            = 'Vartotojas sukurtas, slaptažodis išsiųstas el. paštu.';
diff --git a/inc/lang/lt/searchpage.txt b/inc/lang/lt/searchpage.txt
index f03f5f17b290d87e21cccd0b925ae6bb6f073825..111029d042919e660f2fd1660d46805c326977c8 100644
--- a/inc/lang/lt/searchpage.txt
+++ b/inc/lang/lt/searchpage.txt
@@ -2,4 +2,3 @@
 
 Žemiau matote Jūsų atliktos paieškos rezultatus. @CREATEPAGEINFO@
 
-===== Rezultatai =====
\ No newline at end of file
diff --git a/inc/lang/lv/lang.php b/inc/lang/lv/lang.php
index bdf67cd9e2af2f3dd14f6a36cb7715d928e1a616..1a101ad8b2b3ab85c9c43fba4b07b4a4963e3a0b 100644
--- a/inc/lang/lv/lang.php
+++ b/inc/lang/lv/lang.php
@@ -65,7 +65,6 @@ $lang['badpassconfirm']        = 'Atvaino, aplama parole';
 $lang['minoredit']             = 'SÄ«ki labojumi';
 $lang['draftdate']             = 'Melnraksts automātiski saglabāts';
 $lang['nosecedit']             = 'Lapa pa šo laiku ir mainījusies, sekcijas informācija novecojusi. Ielādēta lapas  pilnās versija.';
-$lang['searchcreatepage']      = 'Ja neatradi meklēto, nospiežot pogu "Labot lapu", vari izveidot jaunu lapu ar tevis meklētajiem atslēgvārdiem nosaukumā.';
 $lang['regmissing']            = 'Atvaino, jāaizpilda visas ailes.';
 $lang['reguexists']            = 'Atvaino, tāds lietotājs jau ir.';
 $lang['regsuccess']            = 'Lietotājs izveidots. Parole nosūtīta pa pastu.';
diff --git a/inc/lang/lv/searchpage.txt b/inc/lang/lv/searchpage.txt
index a67f9f166a5627671519a9db03097b01fb3259d6..a4b5aae35fde8331659abbf55cd266c150ade575 100644
--- a/inc/lang/lv/searchpage.txt
+++ b/inc/lang/lv/searchpage.txt
@@ -2,4 +2,3 @@
 
 Te vari redzēt meklēšanas rezultātus. @CREATEPAGEINFO@
 
-===== Atrasts =====
diff --git a/inc/lang/mg/lang.php b/inc/lang/mg/lang.php
index 240133f29e60de42fd3b0189c873690a9285f2f3..aea3942364d779373a116575b4f4ec32ba2c6670 100644
--- a/inc/lang/mg/lang.php
+++ b/inc/lang/mg/lang.php
@@ -114,7 +114,6 @@ $lang['qb_sig']     = 'Manisy sonia';
 
 $lang['js']['del_confirm']= 'Hofafana ilay andalana?';
 
-$lang['searchcreatepage']      = "Raha tsy nahita izay notadiavinao ianao, dia afaka mamorona pejy vaovao avy amin'ny teny nanaovanao fikarohana; Ampiasao ny bokotra ''Hanova ny pejy''.";
 //Setup VIM: ex: et ts=2 :
 $lang['email_signature_text'] = 'Ity imailaka ity dia navoakan\'ny wiki tao amin\'ny
 @DOKUWIKIURL@';
diff --git a/inc/lang/mg/searchpage.txt b/inc/lang/mg/searchpage.txt
index ef3ed8b19139476703b1853ecf9fabb9d1b0fa58..43fc402d40ea20c8a969e9608b83ecdc698f3973 100644
--- a/inc/lang/mg/searchpage.txt
+++ b/inc/lang/mg/searchpage.txt
@@ -1,7 +1,4 @@
 ====== Karoka ======
 
-Ireto ambany ireto ny valin'ny fikarohanao.
+Ireto ambany ireto ny valin'ny fikarohanao.  @CREATEPAGEINFO@
 
-@CREATEPAGEINFO@
-
-===== Vokatry ny fikarohana =====
\ No newline at end of file
diff --git a/inc/lang/mr/lang.php b/inc/lang/mr/lang.php
index 4b6d1bd69e912de8c89a9894b96fb094e90ffe04..5aa22f30f3466146c66d463824f26b0a84e0f8ed 100644
--- a/inc/lang/mr/lang.php
+++ b/inc/lang/mr/lang.php
@@ -67,7 +67,6 @@ $lang['badlogin']              = 'माफ़ करा, वापरकर्
 $lang['minoredit']             = 'छोटे बदल';
 $lang['draftdate']             = 'प्रत आपोआप सुरक्षित केल्याची तारीख';
 $lang['nosecedit']             = 'मध्यंतरीच्या काळात हे पृष्ठ बदलले आहे.विभागाची माहिती जुनी झाली होती. त्याऐवजी सबंध पृष्ठ परत लोड केले आहे.';
-$lang['searchcreatepage']      = 'जर तुमची शोधत असलेली गोष्ट तुम्हाला सापडली नाही, तर योग्य बटण वापरून तुम्ही शोधत असलेल्या गोष्टीविषयी तुम्ही एखादे पान निर्माण किंवा संपादित करू शकता.';
 $lang['regmissing']            = 'कृपया सर्व रकाने भरा.';
 $lang['reguexists']            = 'या नावाने सदस्याची नोंदणी झालेली आहे, कृपया दुसरे सदस्य नाव निवडा.';
 $lang['regsuccess']            = 'सदस्याची नोंदणी झाली आहे आणि परवलीचा शब्द इमेल केला आहे.';
diff --git a/inc/lang/mr/searchpage.txt b/inc/lang/mr/searchpage.txt
index d41954b4a632c6bc8e3237f06b7afbf3fd820952..707e69939ccbfaf5543b2adfedf77778f03a4ebe 100644
--- a/inc/lang/mr/searchpage.txt
+++ b/inc/lang/mr/searchpage.txt
@@ -2,4 +2,3 @@
 
 तुम्हाला खाली तुमच्या शोधाचे फलित दिसतील. @CREATEPAGEINFO@
 
-====== फलित ======
\ No newline at end of file
diff --git a/inc/lang/ne/lang.php b/inc/lang/ne/lang.php
index fae403f234a9b47ba936f91f6160833ccbd778c7..c0daf29b590f12cab65a4972aac93fc21a8d69c3 100644
--- a/inc/lang/ne/lang.php
+++ b/inc/lang/ne/lang.php
@@ -66,7 +66,6 @@ $lang['badpassconfirm']        = 'माफ गर्नुहोस् , पा
 $lang['minoredit']             = 'सामान्य परिवर्तन';
 $lang['draftdate']             = 'ड्राफ्ट स्वचालित रुपमा वचत भएको';
 $lang['nosecedit']             = 'यो पृष्ठ यसै बखतमा परिवर्तन भयो, खण्ड जानकारी अध्यावधिक हुन सकेन र पूरै पृष्ठ लोड भयो । ';
-$lang['searchcreatepage']      = 'यदि तपाईले आफुले खोजेको पाउनुभएन भने, तपाईलेको उपयुक्त बटन प्रयोग गरी खोज सँग सम्बन्धित शिर्षकहरु भएका पृष्ठ सृजना या सम्पादन गर्न सक्नुहुन्छ ।';
 $lang['regmissing']            = 'माफ गर्नुहोला , सबै ठाउमा भर्नुपर्नेछ ।';
 $lang['reguexists']            = 'यो नामको प्रयोगकर्ता पहिले देखि रहेको छ।';
 $lang['regsuccess']            = 'यो प्रयोगकर्ता बनाइएको छ र प्रवेशशव्द इमेलमा पठइएको छ।';
diff --git a/inc/lang/ne/searchpage.txt b/inc/lang/ne/searchpage.txt
index 021306b4b83c5fa856241dfba673087ce3726d69..02219e72bdcbe83f268b5e85d7904a49a562c74b 100644
--- a/inc/lang/ne/searchpage.txt
+++ b/inc/lang/ne/searchpage.txt
@@ -2,4 +2,3 @@
 
 तपाईले आफ्नो खोजको निम्न नतिजा  पाउन सक्नुहुन्छ। @CREATEPAGEINFO@
 
-===== नतिजा =====
\ No newline at end of file
diff --git a/inc/lang/nl/lang.php b/inc/lang/nl/lang.php
index 2f6000be7c1526090bd867e239584bf0ada9afbe..41fa169779e5674a97cf1e32dc4471d79dc925fa 100644
--- a/inc/lang/nl/lang.php
+++ b/inc/lang/nl/lang.php
@@ -89,7 +89,6 @@ $lang['badpassconfirm']        = 'Sorry, het wachtwoord was onjuist';
 $lang['minoredit']             = 'Kleine wijziging';
 $lang['draftdate']             = 'Concept automatisch opgeslagen op';
 $lang['nosecedit']             = 'De pagina is tussentijds veranderd, sectie-informatie was verouderd, volledige pagina geladen.';
-$lang['searchcreatepage']      = 'Niks gevonden? Maak een nieuwe pagina met als naam je zoekopdracht. Klik hiervoor op \'\'Maak deze pagina aan\'\'.';
 $lang['regmissing']            = 'Vul alle velden in';
 $lang['reguexists']            = 'Er bestaat al een gebruiker met deze loginnaam.';
 $lang['regsuccess']            = 'De gebruiker is aangemaakt. Het wachtwoord is per e-mail verzonden.';
diff --git a/inc/lang/nl/searchpage.txt b/inc/lang/nl/searchpage.txt
index e03679b2b75ded7d597e2fc887ae69d49cb19e3b..b9d1236554c47fe0f316d0346c4226764d818f85 100644
--- a/inc/lang/nl/searchpage.txt
+++ b/inc/lang/nl/searchpage.txt
@@ -2,4 +2,3 @@
 
 Hieronder zijn de resultaten van de zoekopdracht. @CREATEPAGEINFO@
 
-===== Resultaten =====
diff --git a/inc/lang/no/lang.php b/inc/lang/no/lang.php
index bc946366df5cb1366523a811ba2abc536e29e19f..b8d3d3b1626b45be148515ff64ee0b9ce8ab7b26 100644
--- a/inc/lang/no/lang.php
+++ b/inc/lang/no/lang.php
@@ -86,7 +86,6 @@ $lang['badpassconfirm']        = 'Beklager, passordet var feil';
 $lang['minoredit']             = 'Mindre endringer';
 $lang['draftdate']             = 'Kladd autolagret';
 $lang['nosecedit']             = 'Siden er i mellomtiden endret, seksjonsinfo har blitt foreldet - lastet full side istedet.';
-$lang['searchcreatepage']      = 'Hvis du ikke finner det du leter etter, så kan du skape en ny side med samme navn som ditt søk ved å klikke på \'\'**Lag denne siden**\'\'-knappen.';
 $lang['regmissing']            = 'Vennligst fyll ut alle felt.';
 $lang['reguexists']            = 'Det finnes allerede en konto med dette brukernavnet.';
 $lang['regsuccess']            = 'Brukerkonto har blitt laget og passord har blitt sendt via e-post.';
diff --git a/inc/lang/no/searchpage.txt b/inc/lang/no/searchpage.txt
index 2e7b0d887a62cf92696df7f3c5309050d3abb73f..b8d9f01697e2aa45a97f4c353755148270d7402f 100644
--- a/inc/lang/no/searchpage.txt
+++ b/inc/lang/no/searchpage.txt
@@ -2,4 +2,3 @@
 
 Du ser resultatet av dette søket nedenfor. @CREATEPAGEINFO@
 
-===== Resultat =====
diff --git a/inc/lang/pl/lang.php b/inc/lang/pl/lang.php
index 7832711bf2d5221e5821ce8a7a8372f4c81fdc66..f8e3fe83b07a5f55d505a0f7a61de2b0ac8373ae 100644
--- a/inc/lang/pl/lang.php
+++ b/inc/lang/pl/lang.php
@@ -81,7 +81,6 @@ $lang['badpassconfirm']        = 'Niestety, hasło jest niepoprawne.';
 $lang['minoredit']             = 'Mniejsze zmiany';
 $lang['draftdate']             = 'Czas zachowania szkicu';
 $lang['nosecedit']             = 'Strona została zmodyfikowana, sekcje zostały zmienione. Załadowano całą stronę.';
-$lang['searchcreatepage']      = 'Jeśli nie znaleziono szukanego hasła, możesz utworzyć nową stronę, której tytułem będzie poszukiwane hasło.';
 $lang['regmissing']            = 'Wypełnij wszystkie pola.';
 $lang['reguexists']            = 'Użytkownik o tej nazwie już istnieje.';
 $lang['regsuccess']            = 'Utworzono użytkownika. Hasło zostało przesłane pocztą.';
diff --git a/inc/lang/pl/searchpage.txt b/inc/lang/pl/searchpage.txt
index 442975fe10e06dd04198d314cb2d42b4f4ae1894..70e1de6497d0917009b89348e0444e0f2b9e1ac0 100644
--- a/inc/lang/pl/searchpage.txt
+++ b/inc/lang/pl/searchpage.txt
@@ -2,4 +2,3 @@
 
 Wyniki wyszukiwania. @CREATEPAGEINFO@
 
-===== Wyniki =====
diff --git a/inc/lang/pt-br/lang.php b/inc/lang/pt-br/lang.php
index 33c24f216c5363d2111336380466e68081fc6109..f671f9c689143f294aae581899eaff128b14123c 100644
--- a/inc/lang/pt-br/lang.php
+++ b/inc/lang/pt-br/lang.php
@@ -84,7 +84,6 @@ $lang['badpassconfirm']        = 'Desculpe, mas a senha está errada ';
 $lang['minoredit']             = 'Alterações mínimas';
 $lang['draftdate']             = 'O rascunho foi salvo automaticamente em';
 $lang['nosecedit']             = 'A página foi modificada nesse intervalo de tempo. Como a informação da seção estava desatualizada, foi carregada a página inteira.';
-$lang['searchcreatepage']      = 'Se você não encontrou o que está procurando, pode criar ou editar a página com o nome que você especificou, usando o botão apropriado.';
 $lang['regmissing']            = 'Desculpe, mas você precisa preencher todos os campos.';
 $lang['reguexists']            = 'Desculpe, mas já existe um usuário com esse nome.';
 $lang['regsuccess']            = 'O usuário foi criado e a senha enviada para seu e-mail.';
diff --git a/inc/lang/pt-br/searchpage.txt b/inc/lang/pt-br/searchpage.txt
index 636bfeb7aef96b79031def5d209b9293a5d9aabf..2e8dd59aa326ee71fcacc359d9700c3acd77e01c 100644
--- a/inc/lang/pt-br/searchpage.txt
+++ b/inc/lang/pt-br/searchpage.txt
@@ -2,4 +2,3 @@
 
 Você pode encontrar os resultados da sua pesquisa abaixo. @CREATEPAGEINFO@
 
-===== Resultados =====
diff --git a/inc/lang/pt/lang.php b/inc/lang/pt/lang.php
index 2b10b228b83f0d46f244534e941ed82666499a1f..64c25fa9f0ee8dc54df9f500727d252491c391c8 100644
--- a/inc/lang/pt/lang.php
+++ b/inc/lang/pt/lang.php
@@ -76,7 +76,6 @@ $lang['badpassconfirm']        = 'Infelizmente a palavra-passe não é a correct
 $lang['minoredit']             = 'Alterações Menores';
 $lang['draftdate']             = 'Rascunho automaticamente gravado em';
 $lang['nosecedit']             = 'A página foi modificada entretanto. Como a informação da secção estava desactualizada, foi carregada a página inteira.';
-$lang['searchcreatepage']      = 'Se não encontrou o que procurava pode criar uma nova página com o nome da sua pesquisa, usando o botão apropriado.';
 $lang['regmissing']            = 'Por favor, preencha todos os campos.';
 $lang['reguexists']            = 'Este utilizador já está inscrito. Por favor escolha outro nome de utilizador.';
 $lang['regsuccess']            = 'O utilizador foi criado e a senha foi enviada para o endereço de correio electrónico usado na inscrição.';
diff --git a/inc/lang/pt/searchpage.txt b/inc/lang/pt/searchpage.txt
index 563ce28343796e8c3781c06f817c765542d9ed00..27a6baafdea3bb10d19e1166b8c08b792da75ea0 100644
--- a/inc/lang/pt/searchpage.txt
+++ b/inc/lang/pt/searchpage.txt
@@ -2,4 +2,3 @@
 
 Pode encontrar os resultados da sua pesquisa abaixo. @CREATEPAGEINFO@
 
-===== Resultados =====
diff --git a/inc/lang/ro/lang.php b/inc/lang/ro/lang.php
index b5fa379dd075e212b68f77e6fc5b30c50f382904..69d04abba2e89307b0c990d8814c6cf817c7a5be 100644
--- a/inc/lang/ro/lang.php
+++ b/inc/lang/ro/lang.php
@@ -72,7 +72,6 @@ $lang['badpassconfirm']        = 'Ne pare rau, parola este gresita';
 $lang['minoredit']             = 'Modificare minoră';
 $lang['draftdate']             = 'Schiță salvată automat la';
 $lang['nosecedit']             = 'Pagina s-a modificat între timp, secțiunea info a expirat, s-a încărcat pagina întreagă în loc.';
-$lang['searchcreatepage']      = 'Dacă nu ai găsit ce ai căutat, poți crea o pagină nouă prin folosirea butonului \'\'Editează această pagină\'\'.';
 $lang['regmissing']            = 'Ne pare rău, trebuie să completezi toate cîmpurile.';
 $lang['reguexists']            = 'Ne pare rău, un utilizator cu acest nume este deja autentificat.';
 $lang['regsuccess']            = 'Utilizatorul a fost creat. Parola a fost trimisă prin e-mail.';
diff --git a/inc/lang/ro/searchpage.txt b/inc/lang/ro/searchpage.txt
index d4e3df2ee7a1001458367ec8820bc5d7fceb2469..5b262fe03c0a129259405b2432769f1645f47bc6 100644
--- a/inc/lang/ro/searchpage.txt
+++ b/inc/lang/ro/searchpage.txt
@@ -2,4 +2,3 @@
 
 Rezultatele căutării sunt afișate mai jos. @CREATEPAGEINFO@
 
-===== Rezultate =====
diff --git a/inc/lang/ru/lang.php b/inc/lang/ru/lang.php
index 572c7fd1820555617fb8db5328591ca3791f2cb7..4712b4c6f51d7864f6939cf8fb4dc883744b1aed 100644
--- a/inc/lang/ru/lang.php
+++ b/inc/lang/ru/lang.php
@@ -97,7 +97,6 @@ $lang['badpassconfirm']        = 'Простите, пароль неверны
 $lang['minoredit']             = 'Незначительные изменения';
 $lang['draftdate']             = 'Черновик сохранён';
 $lang['nosecedit']             = 'За это время страница была изменена и информация о секции устарела. Загружена полная версия страницы.';
-$lang['searchcreatepage']      = 'Если вы не нашли то, что искали, вы можете создать новую страницу с именем, совпадающим с запросом. Чтобы сделать это, просто нажмите на кнопку «Создать страницу».';
 $lang['regmissing']            = 'Извините, вам следует заполнить все поля.';
 $lang['reguexists']            = 'Извините, пользователь с таким логином уже существует.';
 $lang['regsuccess']            = 'Пользователь создан; пароль выслан на адрес электронной почты.';
diff --git a/inc/lang/ru/searchpage.txt b/inc/lang/ru/searchpage.txt
index d12a848c65c07e261af220abfcd17abbbc78c52b..deea577ed2b07e08ad25d592b7e88ada394272b6 100644
--- a/inc/lang/ru/searchpage.txt
+++ b/inc/lang/ru/searchpage.txt
@@ -2,4 +2,3 @@
 
 Перед вами результаты поиска. @CREATEPAGEINFO@
 
-===== Результаты =====
\ No newline at end of file
diff --git a/inc/lang/sk/lang.php b/inc/lang/sk/lang.php
index 78840b46306fb6dcedfdff311a25b0aac40a9070..bd8d1c9a3409583830eff0778944d4e0b67ab009 100644
--- a/inc/lang/sk/lang.php
+++ b/inc/lang/sk/lang.php
@@ -67,7 +67,6 @@ $lang['badpassconfirm']        = 'Ľutujem, heslo bolo nesprávne.';
 $lang['minoredit']             = 'Menšie zmeny';
 $lang['draftdate']             = 'Koncept automaticky uložený';
 $lang['nosecedit']             = 'Stránka bola medzičasom zmenená, informácie o sekcii sú zastaralé a z tohto dôvodu bola nahraná celá stránka.';
-$lang['searchcreatepage']      = 'Pokiaľ ste nenašli, čo hľadáte, skúste požadovanú stránku sami vytvoriť stlačením tlačidla \'\'Vytvoriť stránku\'\'.';
 $lang['regmissing']            = 'Musíte vyplniť všetky údaje.';
 $lang['reguexists']            = 'Používateľ s rovnakým menom je už zaregistrovaný.';
 $lang['regsuccess']            = 'Používateľský účet bol vytvorený a heslo zaslané emailom.';
diff --git a/inc/lang/sk/searchpage.txt b/inc/lang/sk/searchpage.txt
index 3684f1c6c38562f9dbae0910cd93e0b2596479a3..5905db6646b76a7f8258710025f5fa067cfbf1ec 100644
--- a/inc/lang/sk/searchpage.txt
+++ b/inc/lang/sk/searchpage.txt
@@ -2,4 +2,3 @@
 
 Výsledky hľadania môžete vidieť nižšie. @CREATEPAGEINFO@
 
-===== Výsledky =====
diff --git a/inc/lang/sl/lang.php b/inc/lang/sl/lang.php
index 23d99e48e52372e85c8ff5cb31fa1f2d7666dded..213e0f83a70e2827eb4d7085a2b78f8a1460e7eb 100644
--- a/inc/lang/sl/lang.php
+++ b/inc/lang/sl/lang.php
@@ -71,7 +71,6 @@ $lang['badpassconfirm']        = 'Napaka! Geslo ni pravo.';
 $lang['minoredit']             = 'Manjše spremembe';
 $lang['draftdate']             = 'Samodejno shranjevanje osnutka je omogočeno';
 $lang['nosecedit']             = 'Stran je bila v vmesnem času spremenjena. Podatki strani so bili zastareli, zato se je celotna vsebina naložila znova.';
-$lang['searchcreatepage']      = 'V kolikor rezultati niso skladni z zahtevami iskanja, je mogoče ustvariti  novo stran z nazivom vaše poizvedbe preko povezave \'\'Uredi stran\'\'.';
 $lang['regmissing']            = 'Izpolniti je treba vsa polja.';
 $lang['reguexists']            = 'Uporabnik s tem imenom že obstaja.';
 $lang['regsuccess']            = 'Uporabniški račun je uspešno ustvarjen. Geslo je bilo poslano na naveden elektronski naslov.';
diff --git a/inc/lang/sl/searchpage.txt b/inc/lang/sl/searchpage.txt
index 6ccfa96a4563666875b62d1f824901dada4b15b7..d19d5e275b519fd85149566d34671652bf0bf1f6 100644
--- a/inc/lang/sl/searchpage.txt
+++ b/inc/lang/sl/searchpage.txt
@@ -2,4 +2,3 @@
 
 Spodaj so izpisani rezultati iskanja. @CREATEPAGEINFO@
 
-===== Rezultati =====
\ No newline at end of file
diff --git a/inc/lang/sq/lang.php b/inc/lang/sq/lang.php
index 6de6af81ec7044f00c5eb801116fdca8a3d76371..5313ddd221f6cfc0b0a6e86e173524a98ea8dd38 100644
--- a/inc/lang/sq/lang.php
+++ b/inc/lang/sq/lang.php
@@ -62,7 +62,6 @@ $lang['badlogin']              = 'Na vjen keq, emri ose fjalëkalimi është gab
 $lang['minoredit']             = 'Ndryshime të Vogla';
 $lang['draftdate']             = 'Skica u ruajt automatikisht në';
 $lang['nosecedit']             = 'Faqja u ndryshua ndëwrkohë, informacioni i kwtij seksioni ishte i vjetër, u ngarkua faqja e tërë në vend të saj.';
-$lang['searchcreatepage']      = 'Nëse nuk e gjetët atë që po kërkonit, mund të krijoni ose redaktoni një faqe pas pyetjes suaj me butonin përkatës.';
 $lang['regmissing']            = 'Na vjen keq, duhet të plotësoni të gjitha fushat.';
 $lang['reguexists']            = 'Na vjen keq, ekziston një përdorues tjetër me të njëjtin emër.';
 $lang['regsuccess']            = 'Përdoruesi u regjistrua dhe fjalëkalimi u dërgua me email.';
diff --git a/inc/lang/sq/searchpage.txt b/inc/lang/sq/searchpage.txt
index b0d6d1f31fb57826ca2048461dd55d5f1b430d3d..4c72f22dbab231617fc109961231b07e3285b063 100644
--- a/inc/lang/sq/searchpage.txt
+++ b/inc/lang/sq/searchpage.txt
@@ -2,4 +2,3 @@
 
 Mund të gjeni rezultatet e kërkimit tuaj më poshtë. @CREATEPAGEINFO@
 
-===== Rezultate =====
\ No newline at end of file
diff --git a/inc/lang/sr/lang.php b/inc/lang/sr/lang.php
index a30c20355c5f2d1cab361e1cce9ef0a876aed929..9182c1b7f637967121071f57765d21953e6401da 100644
--- a/inc/lang/sr/lang.php
+++ b/inc/lang/sr/lang.php
@@ -68,7 +68,6 @@ $lang['badpassconfirm']        = 'Нажалост, лозинка је била
 $lang['minoredit']             = 'Мала измена';
 $lang['draftdate']             = 'Нацрт је аутоматски сачуван';
 $lang['nosecedit']             = 'Страна је у међувремену промењена, поглавље је застарело и поново се учитава цела страна.';
-$lang['searchcreatepage']      = 'Ако нисте нашли то што сте тражили, можете да направите нову страницу названу по Вашем упиту користећи дугме \'\'Измени ову страницу\'\'.';
 $lang['regmissing']            = 'Извините, морате да попуните сва поља.';
 $lang['reguexists']            = 'Извините, корисник са истим именом већ постоји.';
 $lang['regsuccess']            = 'Корисник је направљен и лозинка је послата путем е-поште.';
diff --git a/inc/lang/sr/searchpage.txt b/inc/lang/sr/searchpage.txt
index 458c5b1fc9e9e9e358922b3383b5d8393ca18a8c..4663f47fc03f81d88476826042d83b3842fe70de 100644
--- a/inc/lang/sr/searchpage.txt
+++ b/inc/lang/sr/searchpage.txt
@@ -2,4 +2,3 @@
 
 Испод можете да нађете резултате Ваше претраге. @CREATEPAGEINFO@
 
-===== Резултати =====
diff --git a/inc/lang/sv/lang.php b/inc/lang/sv/lang.php
index e39f8487de15b19a61edeab9cda0019423b40e4b..14864212e6ee1f5ce61b57c82d1b9918ecb06a4c 100644
--- a/inc/lang/sv/lang.php
+++ b/inc/lang/sv/lang.php
@@ -78,7 +78,6 @@ $lang['badpassconfirm']        = 'Ledsen, lösenordet var felaktigt';
 $lang['minoredit']             = 'Små ändringar';
 $lang['draftdate']             = 'Utkast automatiskt sparat';
 $lang['nosecedit']             = 'Sidan ändrades medan du skrev, sektionsinformationen var inte uppdaterad. Laddar hela sidan istället.';
-$lang['searchcreatepage']      = 'Om du inte hittar det du letar efter, så kan du skapa eller redigera sidan med någon av knapparna.';
 $lang['regmissing']            = 'Du måste fylla i alla fälten.';
 $lang['reguexists']            = 'Det finns redan en användare med det användarnamnet.';
 $lang['regsuccess']            = 'Användarkontot skapat, lösenordet har skickats via e-post.';
diff --git a/inc/lang/sv/searchpage.txt b/inc/lang/sv/searchpage.txt
index 7b2d3bca36155f1a9014088901a22b4b0e12f2ab..d01bf23e4467bde166f89771aaedbc1f08b4d4b2 100644
--- a/inc/lang/sv/searchpage.txt
+++ b/inc/lang/sv/searchpage.txt
@@ -2,4 +2,3 @@
 
 Nedan ser du resultatet av sökningen. @CREATEPAGEINFO@
 
-===== Resultat =====
diff --git a/inc/lang/th/lang.php b/inc/lang/th/lang.php
index 570d92968d0fa18b1f16f49a05656e1ba277e090..b2b2fd852f09df767a9c85892dae15293a2930f6 100644
--- a/inc/lang/th/lang.php
+++ b/inc/lang/th/lang.php
@@ -69,7 +69,6 @@ $lang['badpassconfirm']        = 'พาสเวิร์ดไม่ถูก
 $lang['minoredit']             = 'เป็นการแก้ไขเล็กน้อย';
 $lang['draftdate']             = 'บันทึกฉบับร่างเมื่อ';
 $lang['nosecedit']             = 'ในช่วงเวลาที่ผ่านมานี้เพจถูกแก้ไขไปแล้ว, เนื้อหาในเซคชั่นนี้ไม่ทันสมัย กรุณาโหลดเพจใหม่ทั้งหน้าแทน';
-$lang['searchcreatepage']      = 'ถ้าคุณไม่พบสิ่งที่คนมองหา คุณสามารถเลือกที่จะสร้าง หรือแก้ไขชื่อเพจหลังจากดูผลสืบค้นแล้วด้วยปุ่มที่เหมาะสม';
 $lang['regmissing']            = 'ขออภัย คุณต้องกรอกให้ครบทุกช่อง';
 $lang['reguexists']            = 'ชื่อบัญชีที่ใส่นั้นมีผู้อื่นได้ใช้แล้ว กรุณาเลือกชื่อผู้ใช้อื่น';
 $lang['regsuccess']            = 'ผู้ใช้ถูกสร้างแล้ว และรหัสผ่านได้ถูกส่งไปทางอีเมลแล้ว';
diff --git a/inc/lang/th/searchpage.txt b/inc/lang/th/searchpage.txt
index 263c656abf91c7081b1b0c5594c4c57b319dc126..87153b08a946a0452b3c98dc7c0f2cd9ddea867a 100644
--- a/inc/lang/th/searchpage.txt
+++ b/inc/lang/th/searchpage.txt
@@ -2,4 +2,3 @@
 
 คุณสามารถพบผลลัพธ์การสืบค้นของคุณด้านล่าง @CREATEPAGEINFO@
 
-====== ผลลัพธ์ ======
\ No newline at end of file
diff --git a/inc/lang/tr/lang.php b/inc/lang/tr/lang.php
index 49236c5f9e37e73429fe0665e78c60384cd75759..4147a13578b263902b7be25f3d70641cd9255dca 100644
--- a/inc/lang/tr/lang.php
+++ b/inc/lang/tr/lang.php
@@ -74,7 +74,6 @@ $lang['badpassconfirm']        = 'Üzgünüz, parolanız yanlış';
 $lang['minoredit']             = 'Küçük Değişiklikler';
 $lang['draftdate']             = 'Taslak ÅŸu saatte otomatik kaydedildi:';
 $lang['nosecedit']             = 'Sayfa yakın zamanda değiştirilmiştir, bölüm bilgisi eski kalmıştır. Bunun için bölüm yerine tüm sayfa yüklenmiştir.';
-$lang['searchcreatepage']      = 'Aradığınız şeyi bulamadıysanız, \'\'Sayfayı değiştir\'\' tuşuna tıklayarak girdiğiniz sorgu adıyla yeni bir sayfa oluşturabilirsiniz .';
 $lang['regmissing']            = 'Üzgünüz, tüm alanları doldurmalısınız.';
 $lang['reguexists']            = 'Üzgünüz, bu isime sahip bir kullanıcı zaten mevcut.';
 $lang['regsuccess']            = 'Kullanıcı oluşturuldu ve şifre e-posta adresine gönderildi.';
diff --git a/inc/lang/tr/searchpage.txt b/inc/lang/tr/searchpage.txt
index bdb3ddf17494ee7044f84ff082d9c692b5cad428..05660eb4fe0ce6467e01b2f8a295fcff7659539b 100644
--- a/inc/lang/tr/searchpage.txt
+++ b/inc/lang/tr/searchpage.txt
@@ -2,4 +2,3 @@
 
 Aşağıda aramanın sonuçları listelenmiştir. @CREATEPAGEINFO@
 
-===== Sonuçlar =====
diff --git a/inc/lang/uk/lang.php b/inc/lang/uk/lang.php
index e02b40767636aabfb530b5f08f617be50c7e9f99..e9ed28aa3a05ca81f4e0d6229f26555ba1046c36 100644
--- a/inc/lang/uk/lang.php
+++ b/inc/lang/uk/lang.php
@@ -76,7 +76,6 @@ $lang['badpassconfirm']        = 'Вибачте, але пароль невір
 $lang['minoredit']             = 'Незначні зміни';
 $lang['draftdate']             = 'Чернетка збережена';
 $lang['nosecedit']             = 'Сторінку змінено, дані розділу застарілі. Завантажено сторінку повністю.';
-$lang['searchcreatepage']      = 'Якщо ви не знайшли те, що ви шукали, ви можете створити або редагувати сторінку, що має таке ж ім’я, що і пошуковий запит за допомогою відповідної кнопки.';
 $lang['regmissing']            = 'Необхідно заповнити всі поля.';
 $lang['reguexists']            = 'Користувач з таким іменем вже існує.';
 $lang['regsuccess']            = 'Користувача створено. Пароль відправлено на e-mail.';
diff --git a/inc/lang/uk/searchpage.txt b/inc/lang/uk/searchpage.txt
index 3889a7618c3814595700af0087875b3e461129f5..f323c4ae4c1108fb8510f37735b1c3e6b9e87be0 100644
--- a/inc/lang/uk/searchpage.txt
+++ b/inc/lang/uk/searchpage.txt
@@ -2,4 +2,3 @@
 
 Дивіться результати пошуку нижче. @CREATEPAGEINFO@
 
-===== Результати =====
diff --git a/inc/lang/vi/lang.php b/inc/lang/vi/lang.php
index ea1d053a8443ffe85207d1d226d157c156f37836..8e49dec375e3196dd4b140f4de87ec3f157a1034 100644
--- a/inc/lang/vi/lang.php
+++ b/inc/lang/vi/lang.php
@@ -59,7 +59,6 @@ $lang['badlogin']              = 'Username hoặc password không đúng.';
 $lang['minoredit']             = 'Minor Changes';
 $lang['draftdate']             = 'Bản nháp được tự động lưu lúc';
 $lang['nosecedit']             = 'Các trang web đã được thay đổi trong khi chờ đợi, phần thông tin quá hạn đã được thay thế bằng trang đầy đủ.';
-$lang['searchcreatepage']      = "Nếu bạn không thấy được những gì bạn đang tìm, bạn có thể tạo một trang mới bằng cách bấm vào nút ''Biên soạn trang này'', khi đó bạn sẽ có 1 trang mới với tên trang chính là tuwfw khóa bạn đã tìm kiếm.";
 $lang['regmissing']            = 'Bạn cần điền vào tất cả các trường';
 $lang['reguexists']            = 'Bạn khác đã dùng username này rồi.';
 $lang['regsuccess']            = 'Đã tạo username, và đã gởi password.';
diff --git a/inc/lang/vi/searchpage.txt b/inc/lang/vi/searchpage.txt
index c0c748545f08eebe6379742fd4c0eefa4da8be10..cbba3fa4825e1e986a86f7a8de0dd8d260bbb122 100644
--- a/inc/lang/vi/searchpage.txt
+++ b/inc/lang/vi/searchpage.txt
@@ -2,4 +2,3 @@
 
 Sau đây là kết quả mà bạn đã tìm. @CREATEPAGEINFO@
 
-===== Kết quả =====
diff --git a/inc/lang/zh-tw/lang.php b/inc/lang/zh-tw/lang.php
index bc49b33dcafbcd69eab4915dc556ffda17aef802..e7384cffb81d4bd1023dfb427aa7deb933c8e700 100644
--- a/inc/lang/zh-tw/lang.php
+++ b/inc/lang/zh-tw/lang.php
@@ -77,7 +77,6 @@ $lang['badpassconfirm']        = '抱歉,這密碼是錯的';
 $lang['minoredit']             = '小修改';
 $lang['draftdate']             = '草稿已自動存檔於';
 $lang['nosecedit']             = '在您編輯期間,其他使用者修改過本頁面。區段資料已逾時,因此系統載入了全頁,以取代之。';
-$lang['searchcreatepage']      = '若沒找到您想要的,可按下按鈕建立或編輯和查詢關鍵字同名的頁面。';
 $lang['regmissing']            = '很抱歉,所有欄位都要填寫。';
 $lang['reguexists']            = '很抱歉,有人已使用了這個帳號。';
 $lang['regsuccess']            = '使用者帳號已建立,密碼已寄發至該電郵。';
diff --git a/inc/lang/zh-tw/searchpage.txt b/inc/lang/zh-tw/searchpage.txt
index 96680019d5c878401fe212bb77e117a19b49248a..9e2c13ac7c0224d4ac527550dc127c963d584a57 100644
--- a/inc/lang/zh-tw/searchpage.txt
+++ b/inc/lang/zh-tw/searchpage.txt
@@ -2,4 +2,3 @@
 
 提示:您可以在下面找到您的搜尋結果。@CREATEPAGEINFO@
 
-===== 搜尋結果 =====
diff --git a/inc/lang/zh/lang.php b/inc/lang/zh/lang.php
index b998946649e3c1faf89895598c39e830cedc720e..3de6a2f1cee98ed6fa96c29ced62476f3fc95e78 100644
--- a/inc/lang/zh/lang.php
+++ b/inc/lang/zh/lang.php
@@ -90,7 +90,6 @@ $lang['badpassconfirm']        = '对不起,密码错误';
 $lang['minoredit']             = '细微修改';
 $lang['draftdate']             = '草稿自动保存于';
 $lang['nosecedit']             = '在您编辑期间本页刚被他人修改过,局部信息已过期,故载入全页。';
-$lang['searchcreatepage']      = '如果没有找到您想要的东西,您可以使用相应的按钮来创建或编辑该页面。';
 $lang['regmissing']            = '对不起,您必须填写所有的字段。';
 $lang['reguexists']            = '对不起,该用户名已经存在。';
 $lang['regsuccess']            = '新用户已建立,密码将通过电子邮件发送给您。';
diff --git a/inc/lang/zh/searchpage.txt b/inc/lang/zh/searchpage.txt
index be7ae7909262120e1e3c25a514f0e6c25297f2c5..0ea6cb5e4352b83de22e8fa6675560e669e4862e 100644
--- a/inc/lang/zh/searchpage.txt
+++ b/inc/lang/zh/searchpage.txt
@@ -2,4 +2,3 @@
 
 下面将显示您的搜索结果。@CREATEPAGEINFO@
 
-===== 搜索结果 =====
\ No newline at end of file
diff --git a/inc/template.php b/inc/template.php
index 1ce7d340bb3d420faea5353d0668f5c3f3823546..510475d5b2a9b1d659f614c702b108c584839512 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -667,20 +667,46 @@ function tpl_searchform($ajax = true, $autocomplete = true) {
     global $lang;
     global $ACT;
     global $QUERY;
+    global $ID;
 
     // don't print the search form if search action has been disabled
     if(!actionOK('search')) return false;
 
-    print '<form action="'.wl().'" accept-charset="utf-8" class="search" id="dw__search" method="get" role="search"><div class="no">';
-    print '<input type="hidden" name="do" value="search" />';
-    print '<input type="text" ';
-    if($ACT == 'search') print 'value="'.htmlspecialchars($QUERY).'" ';
-    print 'placeholder="'.$lang['btn_search'].'" ';
-    if(!$autocomplete) print 'autocomplete="off" ';
-    print 'id="qsearch__in" accesskey="f" name="id" class="edit" title="[F]" />';
-    print '<button type="submit" title="'.$lang['btn_search'].'">'.$lang['btn_search'].'</button>';
-    if($ajax) print '<div id="qsearch__out" class="ajax_qsearch JSpopup"></div>';
-    print '</div></form>';
+    $searchForm = new dokuwiki\Form\Form([
+        'action' => wl(),
+        'method' => 'get',
+        'role' => 'search',
+        'class' => 'search',
+        'id' => 'dw__search',
+    ], true);
+    $searchForm->addTagOpen('div')->addClass('no');
+    $searchForm->setHiddenField('do', 'search');
+    $searchForm->setHiddenField('id', $ID);
+    $searchForm->addTextInput('q')
+        ->addClass('edit')
+        ->attrs([
+            'title' => '[F]',
+            'accesskey' => 'f',
+            'placeholder' => $lang['btn_search'],
+            'autocomplete' => $autocomplete ? 'on' : 'off',
+        ])
+        ->id('qsearch__in')
+        ->val($ACT === 'search' ? $QUERY : '')
+        ->useInput(false)
+    ;
+    $searchForm->addButton('', $lang['btn_search'])->attrs([
+        'type' => 'submit',
+        'title' => $lang['btn_search'],
+    ]);
+    if ($ajax) {
+        $searchForm->addTagOpen('div')->id('qsearch__out')->addClass('ajax_qsearch JSpopup');
+        $searchForm->addTagClose('div');
+    }
+    $searchForm->addTagClose('div');
+    trigger_event('FORM_QUICKSEARCH_OUTPUT', $searchForm);
+
+    echo $searchForm->toHTML();
+
     return true;
 }
 
diff --git a/lib/exe/js.php b/lib/exe/js.php
index ee017a41ee63d83c73791c262ee339b57012ee14..4c614f08023f3474bafffce15fea7d0b6289ac62 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -47,6 +47,7 @@ function js_out(){
                 DOKU_INC.'lib/scripts/cookie.js',
                 DOKU_INC.'lib/scripts/script.js',
                 DOKU_INC.'lib/scripts/qsearch.js',
+                DOKU_INC.'lib/scripts/search.js',
                 DOKU_INC.'lib/scripts/tree.js',
                 DOKU_INC.'lib/scripts/index.js',
                 DOKU_INC.'lib/scripts/textselection.js',
diff --git a/lib/plugins/config/lang/en/lang.php b/lib/plugins/config/lang/en/lang.php
index 269d24f4c96a601abc3906e8d4daf74d1af75695..cee84604cfde26e843993a83a4bf3a81084bb657 100644
--- a/lib/plugins/config/lang/en/lang.php
+++ b/lib/plugins/config/lang/en/lang.php
@@ -178,6 +178,12 @@ $lang['xsendfile']   = 'Use the X-Sendfile header to let the webserver deliver s
 $lang['renderer_xhtml']   = 'Renderer to use for main (xhtml) wiki output';
 $lang['renderer__core']   = '%s (dokuwiki core)';
 $lang['renderer__plugin'] = '%s (plugin)';
+$lang['search_limit_to_first_ns'] = 'Limit the search to the current X namespaces. When a search is executed from a page within a deeper namespace, the first X namespaces will be added as filter';
+$lang['search_default_fragment_behaviour'] = 'Specify the default fragment search behavior';
+$lang['search_default_fragment_behaviour_o_exact'] = 'exact';
+$lang['search_default_fragment_behaviour_o_starts_with'] = 'starts with';
+$lang['search_default_fragment_behaviour_o_ends_with'] = 'ends with';
+$lang['search_default_fragment_behaviour_o_contains'] = 'contains';
 
 /* Network Options */
 $lang['dnslookups'] = 'DokuWiki will lookup hostnames for remote IP addresses of users editing pages. If you have a slow or non working DNS server or don\'t want this feature, disable this option';
diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php
index 0527bb9c3ea730947f5ad323880f1985f979ecd9..750245957dbd38a4fd7a67b396ceed91a6652f80 100644
--- a/lib/plugins/config/settings/config.metadata.php
+++ b/lib/plugins/config/settings/config.metadata.php
@@ -219,6 +219,8 @@ $meta['broken_iua']  = array('onoff');
 $meta['xsendfile']   = array('multichoice','_choices' => array(0,1,2,3),'_caution' => 'warning');
 $meta['renderer_xhtml'] = array('renderer','_format' => 'xhtml','_choices' => array('xhtml'),'_caution' => 'warning');
 $meta['readdircache'] = array('numeric');
+$meta['search_limit_to_first_ns'] = array('numeric', '_min' => 0);
+$meta['search_default_fragment_behaviour'] = array('multichoice','_choices' => array('exact', 'starts_with', 'ends_with', 'contains'),);
 
 $meta['_network']    = array('fieldset');
 $meta['dnslookups']  = array('onoff');
diff --git a/lib/scripts/search.js b/lib/scripts/search.js
new file mode 100644
index 0000000000000000000000000000000000000000..363170825a2d3090cfdb560e28fb6f164c0e3073
--- /dev/null
+++ b/lib/scripts/search.js
@@ -0,0 +1,48 @@
+jQuery(function () {
+    'use strict';
+
+    const $searchForm = jQuery('.search-results-form');
+    if (!$searchForm.length) {
+        return;
+    }
+
+    const $toggleAssistanceButton = jQuery('<button>')
+        .addClass('toggleAssistant')
+        .attr('type', 'button')
+        .attr('aria-expanded', 'false')
+        .text(LANG.search_toggle_tools)
+        .prependTo($searchForm.find('fieldset'))
+    ;
+
+    $toggleAssistanceButton.on('click', function () {
+        jQuery('.advancedOptions').toggle(0, function () {
+            var $me = jQuery(this);
+            if ($me.attr('aria-hidden')) {
+                $me.removeAttr('aria-hidden');
+                $toggleAssistanceButton.attr('aria-expanded', 'true');
+                DokuCookie.setValue('sa', 'on');
+            } else {
+                $me.attr('aria-hidden', 'true');
+                $toggleAssistanceButton.attr('aria-expanded', 'false');
+                DokuCookie.setValue('sa', 'off');
+            }
+        });
+    });
+
+    if (DokuCookie.getValue('sa') === 'on') {
+        $toggleAssistanceButton.click();
+    }
+
+    $searchForm.find('.advancedOptions .toggle div.current').on('click', function () {
+        var $me = jQuery(this);
+        $me.parent().siblings().removeClass('open');
+        $me.parent().siblings().find('ul:first').attr('aria-expanded', 'false');
+        $me.parent().toggleClass('open');
+        if ($me.parent().hasClass('open')) {
+            $me.parent().find('ul:first').attr('aria-expanded', 'true');
+        } else {
+            $me.parent().find('ul:first').attr('aria-expanded', 'false');
+        }
+    });
+
+});
diff --git a/lib/tpl/dokuwiki/css/_search.css b/lib/tpl/dokuwiki/css/_search.css
deleted file mode 100644
index a8972ae725868eea71fa4d3742b2d412b509f11a..0000000000000000000000000000000000000000
--- a/lib/tpl/dokuwiki/css/_search.css
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * This file provides styles for the search results page (?do=search)
- * and the AJAX search popup.
- */
-
-/* search results page
-********************************************************************/
-
-/* loading gif */
-#dw__loading {
-    text-align: center;
-    margin-bottom: 1.4em;
-}
-
-/*____________ matching pagenames ____________*/
-
-.dokuwiki div.search_quickresult {
-    margin-bottom: 1.4em;
-}
-.dokuwiki div.search_quickresult h3 {
-}
-.dokuwiki div.search_quickresult ul {
-    padding: 0;
-}
-.dokuwiki div.search_quickresult ul li {
-    float: left;
-    width: 12em;
-    margin: 0 1.5em;
-}
-[dir=rtl] .dokuwiki div.search_quickresult ul li {
-    float: right;
-}
-
-/*____________ search results ____________*/
-
-.dokuwiki dl.search_results {
-    margin-bottom: 1.2em;
-}
-
-/* search heading */
-.dokuwiki dl.search_results dt {
-    font-weight: normal;
-    margin-bottom: .2em;
-}
-/* search snippet */
-.dokuwiki dl.search_results dd {
-    color: @ini_text_alt;
-    background-color: inherit;
-    margin: 0 0 1.2em 0;
-}
-
-/* search hit in normal text */
-.dokuwiki .search_hit {
-    color: @ini_text;
-    background-color: __highlight__;
-}
-/* search hit in search results */
-.dokuwiki .search_results strong.search_hit {
-    font-weight: normal;
-}
-/* ellipsis separating snippets */
-.dokuwiki .search_results .search_sep {
-    color: @ini_text;
-    background-color: inherit;
-}
-
-/* "nothing found" at search + media */
-.dokuwiki div.nothing {
-    margin-bottom: 1.4em;
-}
-
-
-/* AJAX quicksearch popup
-********************************************************************/
-
-.dokuwiki form.search div.no {
-    position: relative;
-}
-
-/* .JSpopup */
-.dokuwiki form.search div.ajax_qsearch {
-    position: absolute;
-    top: 0;
-    left: -13.5em; /* -( width of #qsearch__in + padding of .ajax_qsearch + a bit more ) */
-    width: 12em;
-    padding: 0.5em;
-    font-size: .9em;
-    z-index: 20;
-    text-align: left;
-    display: none;
-}
-[dir=rtl] .dokuwiki form.search div.ajax_qsearch {
-    left: auto;
-    right: -13.5em;
-    text-align: right;
-}
-.dokuwiki form.search div.ajax_qsearch strong {
-    display: block;
-    margin-bottom: .3em;
-}
-.dokuwiki form.search div.ajax_qsearch ul {
-    margin: 0 !important;
-    padding: 0 !important;
-}
-.dokuwiki form.search div.ajax_qsearch ul li {
-    margin: 0;
-    padding: 0;
-    display: block !important;
-}
diff --git a/lib/tpl/dokuwiki/css/_search.less b/lib/tpl/dokuwiki/css/_search.less
new file mode 100644
index 0000000000000000000000000000000000000000..ad41ac58193453401f58965cacf7c007bbdc0909
--- /dev/null
+++ b/lib/tpl/dokuwiki/css/_search.less
@@ -0,0 +1,201 @@
+/**
+ * This file provides styles for the search results page (?do=search)
+ * and the AJAX search popup.
+ */
+
+/* general
+********************************************************************/
+
+/* search hit in normal text */
+.dokuwiki .search_hit {
+    color: @ini_text;
+    background-color: __highlight__;
+}
+
+/* "nothing found" at search + media */
+.dokuwiki div.nothing {
+    margin-bottom: 1.4em;
+}
+
+/* search results page
+********************************************************************/
+
+/*____________ advanced search form ____________*/
+.dokuwiki .search-results-form fieldset.search-form {
+    width: 100%;
+    margin: 1em 0;
+
+    input[name="q"] {
+        width: 50%;
+    }
+
+    button.toggleAssistant {
+        float: right;
+    }
+
+    .advancedOptions {
+        padding: 1em 0;
+
+        > div {
+            display: inline-block;
+            position: relative;
+            margin: 0 0.5em;
+        }
+
+        div.toggle {
+            // default closed toggle state
+            div.current {
+                cursor: pointer;
+                max-width: 10em;
+                white-space: nowrap;
+                overflow: hidden;
+                text-overflow: ellipsis;
+
+                &::after {
+                    content: 'â–¼';
+                    font-size: smaller;
+                    color: @ini_text_alt;
+                }
+            }
+            div.changed {
+                font-weight: bold;
+            }
+            ul {
+                display: none;
+                position: absolute;
+                border: 1px solid @ini_border;
+                background-color: @ini_background;
+                padding: 0.25em 0.5em;
+                text-align: left;
+                min-width: 10em;
+                max-width: 15em;
+                max-height: 50vh;
+                overflow: auto;
+                z-index: 100;
+                li {
+                    margin: 0.25em 0;
+                    list-style: none;
+
+                    a {
+                        display: block;
+                    }
+                }
+            }
+
+            // open toggle state
+            &.open {
+                div.current::after {
+                    content: 'â–²';
+                }
+
+                ul {
+                    display: block;
+                }
+            }
+        }
+    }
+}
+
+[dir=rtl] .search-results-form fieldset.search-form .advancedOptions {
+    div.toggle ul {
+        text-align: right;
+    }
+}
+
+
+/*____________ matching pagenames ____________*/
+
+.dokuwiki div.search_quickresult {
+    margin-bottom: 1.4em;
+
+    h3 {
+    }
+    ul {
+        padding: 0;
+
+        li {
+            float: left;
+            width: 12em;
+            margin: 0 1.5em;
+        }
+    }
+}
+
+[dir=rtl] .dokuwiki div.search_quickresult ul li {
+    float: right;
+}
+
+/*____________ search results ____________*/
+
+.dokuwiki dl.search_results {
+    margin-bottom: 1.2em;
+
+    /* search heading */
+    dt {
+        font-weight: normal;
+        margin-bottom: .2em;
+    }
+
+    /* search snippet */
+    dd {
+        color: @ini_text_alt;
+        background-color: inherit;
+        margin: 0 0 1.2em 0;
+
+        /* search hit in search results */
+        strong.search_hit {
+            font-weight: normal;
+            /* color is set in general */
+        }
+
+        /* ellipsis separating snippets */
+        .search_sep {
+            color: @ini_text;
+            background-color: inherit;
+        }
+    }
+}
+
+/* AJAX quicksearch popup
+********************************************************************/
+
+.dokuwiki form.search {
+    div.no {
+        position: relative;
+    }
+
+    /* .JSpopup */
+    div.ajax_qsearch {
+        position: absolute;
+        top: 0;
+        left: -13.5em; /* -( width of #qsearch__in + padding of .ajax_qsearch + a bit more ) */
+        width: 12em;
+        padding: 0.5em;
+        font-size: .9em;
+        z-index: 20;
+        text-align: left;
+        display: none;
+
+        strong {
+            display: block;
+            margin-bottom: .3em;
+        }
+
+        ul {
+            margin: 0 !important;
+            padding: 0 !important;
+
+            li {
+                margin: 0;
+                padding: 0;
+                display: block !important;
+            }
+        }
+    }
+}
+
+[dir=rtl] .dokuwiki form.search div.ajax_qsearch {
+    left: auto;
+    right: -13.5em;
+    text-align: right;
+}
diff --git a/lib/tpl/dokuwiki/style.ini b/lib/tpl/dokuwiki/style.ini
index ca6de6aa1ed3338d5a49a9704d9ed6be976cbad7..723e8bc8fbcbaee30e7feb3490b4ee732c44be1a 100644
--- a/lib/tpl/dokuwiki/style.ini
+++ b/lib/tpl/dokuwiki/style.ini
@@ -25,7 +25,7 @@ css/_tabs.css             = screen
 css/_links.css            = screen
 css/_toc.css              = screen
 css/_footnotes.css        = screen
-css/_search.css           = screen
+css/_search.less          = screen
 css/_recent.css           = screen
 css/_diff.css             = screen
 css/_edit.css             = screen