diff --git a/.gitignore b/.gitignore
index e06d9263de8b4d0dc7b2a482925c619a35d843b8..dffc66b4d51ad227838b39529211c867d8ebc6b3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@ Homestead.yaml
 .env
 .orig
 .vscode
+langfiles.zip
 # The Files created by Gulp in the build process
 /public/build
 /public/js/lib.js
diff --git a/app/Http/Controllers/LanguageController.php b/app/Http/Controllers/LanguageController.php
index 80d3fecf88b3b33425ac08835c6c0d8e3ca33f11..a7b3c710c97f1e6992d8de00da4d05d0f98ba3ee 100644
--- a/app/Http/Controllers/LanguageController.php
+++ b/app/Http/Controllers/LanguageController.php
@@ -6,19 +6,26 @@ use Illuminate\Http\Request;
 use App\Models\LanguageObject;
 use RecursiveDirectoryIterator;
 use RecursiveIteratorIterator;
+use ZipArchive;
 
 class LanguageController extends Controller
 {
+
+    public function __construct() 
+    {
+       $this->languageFilePath = resource_path()."/lang/";
+       $this->languages = array('de','en','fr','es','nd');
+    }
+
     public function createOverview(Request $request)
     {
-        $languageFilePath = resource_path() . "/lang/";
-        $files            = scandir($languageFilePath);
+        $languageFolders  = scandir($this->languageFilePath);
         $dirs             = [];
-        foreach ($files as $file) {
-            if (is_dir($languageFilePath . $file) && $file !== "." && $file !== "..") {
-                $dirs[] = $file;
-            }
 
+        foreach ($languageFolders as $folder) {
+            if (is_dir($this->languageFilePath . $folder) && $folder !== "." && $folder !== "..") {
+                $dirs[] = $folder;
+            }
         }
         # Im Array "$dirs" haben wir nun alle Verzeichnisse mit dem entsprechenden Sprachkürzel
         # Alle von uns bislang unterstützen Sprachen sind hier eingetragen.
@@ -26,7 +33,7 @@ class LanguageController extends Controller
         $sum       = [];
         foreach ($dirs as $dir) {
             # Wir überprüfen nun für jede Datei die Anzahl der vorhandenen Übersetzungen
-            $di                           = new RecursiveDirectoryIterator($languageFilePath . $dir);
+            $di                           = new RecursiveDirectoryIterator($this->languageFilePath . $dir);
             $langTexts[$dir]["textCount"] = 0;
             $langTexts[$dir]["fileCount"] = 0;
             foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
@@ -37,9 +44,7 @@ class LanguageController extends Controller
                         $sum = array_merge($sum, $this->getValues([$key => $value], basename($filename)));
                         $langTexts[$dir]["textCount"] += count($this->getValues([$key => $value]));
                     }
-
                 }
-
             }
         }
         $deComplete = $langTexts["de"]["textCount"] === count($sum) ? true : false;
@@ -52,17 +57,17 @@ class LanguageController extends Controller
 
     public function createEditPage($from, $to, $exclude = "", $email = "")
     {
-        $languageFilePath = resource_path() . "/lang/";
-        $files            = scandir($languageFilePath);
+        $languageFolders  = scandir($this->languageFilePath);
         $dirs             = [];
-        foreach ($files as $file) {
-            if (is_dir($languageFilePath . $file) && $file !== "." && $file !== "..") {
-                $dirs[$file] = $file;
-            }
 
+        foreach ($languageFolders as $folder) {
+            if (is_dir($this->languageFilePath . $folder) && $folder !== "." && $folder !== "..") {
+                $dirs[$folder] = $folder;
+            }
         }
+
         # Abbruchbedingungen:
-        if ($from === "" || $to === "" || ($from !== "de" && $from !== "all") || ($from === "all" && $to !== "de") && !array_has($dirs, $to)) {
+        if (!in_array($to, $this->languages) || $from === "" || $to === "" || ($from !== "de" && $from !== "all") || ($from === "all" && $to !== "de") && !array_has($dirs, $to)) {
             return redirect(url('languages'));
         }
 
@@ -77,7 +82,7 @@ class LanguageController extends Controller
             }
 
             # Wir überprüfen nun für jede Datei die Anzahl der vorhandenen Übersetzungen
-            $di              = new RecursiveDirectoryIterator($languageFilePath . $dir);
+            $di              = new RecursiveDirectoryIterator($this->languageFilePath . $dir);
             $langTexts[$dir] = 0;
             foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
                 if (!$this->endsWith($filename, ".")) {
@@ -89,32 +94,20 @@ class LanguageController extends Controller
                     }
                     $filePath[basename($filename)] = preg_replace("/lang\/.*?\//si", "lang/$to/", substr($filename, strpos($filename, "lang")));
                 }
-
             }
         }
 
         $langs = [];
         $fn    = "";
         $t     = [];
-        $ex    = ['files' => [], 'new' => 0];
-        if ($exclude !== "") {
-            try {
-                $ex = unserialize(base64_decode($exclude));
-            } catch (ErrorException $e) {
-                $ex = ['files' => [], 'new' => 0];
-            }
-        }
+        $ex = $this->decodeExcludedFiles($exclude);
 
         foreach ($texts as $filename => $text) {
-            $has = false;
             foreach ($ex['files'] as $file) {
                 if ($file === $filename) {
-                    $has = true;
+                    continue 2;
                 }
             }
-            if ($has) {
-                continue;
-            }
             while ($this->hasToMuchDimensions($text)) {
                 $text = $this->deMultidimensionalizeArray($text);
             }
@@ -124,15 +117,10 @@ class LanguageController extends Controller
                     continue;
                 }
 
-                $complete = true;
                 foreach ($languages as $lang => $value) {
                     if ($lang !== $to) {
                         $langs = array_add($langs, $lang, $lang);
                     }
-                    if (!isset($languages[$to]) && isset($languages[$lang])) {
-                        $complete = false;
-                    }
-
                 }
                 if (!isset($languages[$to])) {
                     $fn = $filePath[$filename];
@@ -143,7 +131,6 @@ class LanguageController extends Controller
         }
         $t = $this->htmlEscape($t, $to);
         $t = $this->createHints($t, $to);
-
         return view('languages.edit')
             ->with('texts', $t)             //Array mit vorhandenen Ãœbersetzungen der Datei $fn in beiden Sprachen
             ->with('filename', $fn)         //Pfad zur angezeigten Datei
@@ -158,30 +145,22 @@ class LanguageController extends Controller
 
     public function createSynopticEditPage(Request $request, $exclude = "") 
     {
-        $languageFilePath = resource_path() . "/lang/";
-        $languageFolders  = scandir($languageFilePath); 
-        #Enthält zu jeder Sprache ein Objekt mit allen Daten
+        $languageFolders  = scandir($this->languageFilePath); 
+        # Enthält zu jeder Sprache ein Objekt mit allen Daten
         $languageObjects  = [];
-        $to = [];
+        $to = []; # Alle vorhandenen Sprachen
 
-        #Dekodieren ausgeschlossener Dateien anhand des URL-Parameters
-        $ex    = ['files' => [], 'new' => 0];
-        if ($exclude !== "") {
-            try {
-                $ex = unserialize(base64_decode($exclude));
-            } catch (\ErrorException $e) {
-                $ex = ['files' => [], 'new' => 0];
-            }
-        }
+        # Dekodieren ausgeschlossener Dateien anhand des URL-Parameters
+        $ex = $this->decodeExcludedFiles($exclude);
 
-        #Instanziiere LanguageObject
+        # Instanziiere LanguageObject
         foreach ($languageFolders as $folder) {
-            if (is_dir($languageFilePath . $folder) && $folder !== "." && $folder !== "..") {
-                $languageObjects[$folder] = new LanguageObject($folder, $languageFilePath.$folder);
+            if (is_dir($this->languageFilePath . $folder) && $folder !== "." && $folder !== "..") {
+                $languageObjects[$folder] = new LanguageObject($folder, $this->languageFilePath.$folder);
             }
         }
 
-        #Speichere Daten in LanguageObject, überspringe ausgeschlossene Dateien
+        # Speichere Daten in LanguageObject, überspringe ausgeschlossene Dateien
         foreach ($languageObjects as $folder => $languageObject) {
             $to[] = $folder;
             $di = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($languageObject->filePath));
@@ -202,7 +181,7 @@ class LanguageController extends Controller
 
         $fn = "";
 
-        #Wähle die erste, unbearbeitete Datei aus
+        # Wähle die erste, unbearbeitete Datei aus
         foreach($languageObjects as $folder => $languageObject) {
             foreach($languageObject->stringMap as $languageFileName => $languageFile) {
                 $fn = $languageFileName;
@@ -210,13 +189,9 @@ class LanguageController extends Controller
             }
         }
 
-        if($fn === "") {
-            //Alles bearbeitet -> zeige entsprechende Nachricht
-        }
-
         $snippets = [];
 
-        #Speichere den Inhalt der ausgewählten Datei in allen Sprachen in $snippets ab
+        # Speichere den Inhalt der ausgewählten Datei in allen Sprachen in $snippets ab
         foreach($languageObjects as $folder => $languageObject) {
             foreach($languageObject->stringMap as $languageFileName => $languageFile) {
                 if($languageFileName === $fn) {
@@ -228,7 +203,7 @@ class LanguageController extends Controller
             }
         }
 
-        #Fülle $snippets auf mit leeren Einträgen für übrige Sprachen
+        # Fülle $snippets auf mit leeren Einträgen für übrige Sprachen
         foreach($to as $t) {
             foreach($snippets as $key => $langArray) {
                 if(!isset($langArray[$t])) {
@@ -238,9 +213,9 @@ class LanguageController extends Controller
         }
 
         return view('languages.synoptic')
-            ->with('to', $to)           #Alle vorhandenen Sprachen
-            ->with('texts', $snippets)         #Array mit Sprachsnippets
-            ->with('filename', $fn)     #Name der Datei
+            ->with('to', $to)           # Alle vorhandenen Sprachen
+            ->with('texts', $snippets)         # Array mit Sprachsnippets
+            ->with('filename', $fn)     # Name der Datei
             ->with('title', trans('titles.languages.edit'));
     }
 
@@ -258,6 +233,124 @@ class LanguageController extends Controller
         return $t;
     }
 
+    public function processSynopticPageInput(Request $request, $exclude = "") {
+
+        $filename = $request->input('filename');
+
+        # Identifizieren des gedrückten Buttons
+        if(isset($request['nextpage'])) {
+
+            # Leite weiter zur nächsten Seite
+            $ex = [];
+
+            if ($exclude !== "") {
+                try {
+                    $ex = unserialize(base64_decode($exclude));
+                } catch (\ErrorException $e) {
+                    $ex = [];
+                }
+
+                if (!isset($ex["files"])) {
+                    $ex["files"] = [];
+                }
+            }
+            if (!isset($ex["new"])) {
+                $ex["new"] = 0;
+            }
+            $ex['files'][] = basename($filename);
+            $ex = base64_encode(serialize($ex));
+
+            return redirect(url('synoptic', ['exclude' => $ex]));
+
+        } elseif(isset($request['download'])) {
+        # Andernfalls auslesen, zippen und herunterladen der veränderten Dateien 
+         
+            $data = [];
+            $new  = 0;
+            $editedFiles = [];
+
+            foreach ($request->all() as $key => $value) {
+
+                if ($key === "filename" || $value === "") {
+                    continue;
+                }
+
+                $key = base64_decode($key);
+
+                # Pfad zur Datei anhand des Schlüsselnamens rekonstruieren (Schlüssel enthält Sprachkürzel)
+                $langdir = $this->extractLanguage($key);
+                $filepath = "lang/".$langdir."/".$filename;
+     
+                if (strpos($key, "_new_") === 0 && $value !== "" || MailController::isEdited($this->processKey($key), $value, $filepath)) {
+                    $new++;
+                    $editedFiles[$langdir] = $filepath;
+                } 
+            }     
+
+            # Erneute Iteration über Request, damit Dateien mitsamt vorherigen Einträgen abgespeichert werden 
+            foreach($request->all() as $key => $value) {
+
+                if ($key === "filename" || $value === "") {
+                    continue;
+                }
+
+                $key = base64_decode($key);
+
+                # Pfad zur Datei anhand des Schlüsselnamens rekonstruieren (Schlüssel enthält Sprachkürzel)
+                $langdir = $this->extractLanguage($key);
+
+                # Ãœberspringe Datei, falls diese nicht bearbeitet worden ist
+                if(!isset($editedFiles[$langdir])) {
+                    continue;
+                }
+
+                # Key kuerzen, sodass er nur den eigentlichen Keynamen enthält
+                $key = $this->processKey($key);
+                
+                if (!strpos($key, "#")) {
+                    $data[$langdir][$key] = $value;
+                # Aufdröseln von 2D-Arrays
+                } else {
+                    $ref = &$data;
+                    do {
+                        $ref = &$ref[$langdir][substr($key, 0, strpos($key, "#"))];
+                        $key = substr($key, strpos($key, "#") + 1);
+                    } while (strpos($key, "#"));
+                    $ref = &$ref[$key];
+                    $ref = $value;
+                }
+            }
+
+            if(file_exists("langfiles.zip"))
+                unlink("langfiles.zip");
+
+            $zip = new ZipArchive();
+
+            if (empty($data) || $zip->open("langfiles.zip", ZipArchive::CREATE) !== TRUE) {
+                return redirect(url('synoptic', ['exclude' => $exclude]));
+            } 
+                
+            try{
+            # Erstelle Ausgabedateien
+                foreach($data as $lang => $entries) {
+                    $output = json_encode($entries, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
+                    $output = preg_replace("/\{/si", "[", $output);
+                    $output = preg_replace("/\}/si", "]", $output);
+                    $output = preg_replace("/\": ([\"\[])/si", "\"\t=>\t$1", $output);
+                    $output = "<?php\n\nreturn $output;\n";
+                    $zip->addEmptyDir($lang);
+                    $zip->addFromString($lang."/".$filename, $output);
+                }
+
+            $zip->close();
+
+            return response()->download("langfiles.zip", $filename.".zip");
+                    } catch(ErrorException $e) {
+                echo("Failed to write ".$filename);
+                }
+        }
+    }
+
     private function createHints($t, $to)
     {
         foreach ($t as $key => $langTexts) {
@@ -278,6 +371,21 @@ class LanguageController extends Controller
         return $t;
     }
 
+    private function decodeExcludedFiles($exclude)
+    {
+        $ex = ['files' => [], 'new' => 0];
+
+        if ($exclude !== "") {
+            try {
+                $ex = unserialize(base64_decode($exclude));
+            } catch (ErrorException $e) {
+                $ex = ['files' => [], 'new' => 0];
+            }
+        }
+
+        return $ex;
+    }
+
     private function getValues($values, $prefix = "")
     {
         $return = [];
@@ -324,7 +432,6 @@ class LanguageController extends Controller
                     if (is_array($val)) {
                         $isArray = true;
                     }
-
                 }
             } else {
                 $tmp[$key] = $value;
@@ -359,4 +466,27 @@ class LanguageController extends Controller
         // search forward starting from end minus needle length characters
         return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== false);
     }
+
+    private function extractLanguage($key) 
+    {   
+        # Kürzt bspw. "_new_de_redirect bzw. "de_redirect" zu "de"
+        preg_match("/^(?:_new_)?([^_]*)/", $key, $matches);
+        foreach($matches as $dir) {
+            if(strlen($dir) == 2)
+                return $dir;
+            }
+    }
+
+    private function processKey($key) 
+    {   
+        $key = trim($key);
+        # Kürzt bspw. "_new_de_redirect bzw. "de_redirect" zu "redirect"
+        preg_match("/^(?:_new_)?(?:[^_]*)_(\w*.?\w*#?.?\w*)/", $key, $matches);
+        foreach($matches as $processedKey) {
+            if(strpos($processedKey, "_") === FALSE) {
+                return $processedKey;
+            }
+        }
+        return $key;
+    }
 }
diff --git a/app/Http/Controllers/MailController.php b/app/Http/Controllers/MailController.php
index 5b80d7e5c9adcb47e1d7768e44cc554d2e9eadf3..55ca74ea64dc8aa4955cfef242d08a5a251eaaeb 100644
--- a/app/Http/Controllers/MailController.php
+++ b/app/Http/Controllers/MailController.php
@@ -9,7 +9,6 @@ use Illuminate\Http\Request;
 use Illuminate\Http\Response;
 use LaravelLocalization;
 use Mail;
-use ZipArchive;
 
 class MailController extends Controller
 {
@@ -119,7 +118,7 @@ class MailController extends Controller
     }
 
     #Ueberprueft ob ein bereits vorhandener Eintrag bearbeitet worden ist
-    private function isEdited($k, $v, $filename)
+    public static function isEdited($k, $v, $filename)
     {
         try {
             $temp = include resource_path()."/".$filename;
@@ -135,29 +134,6 @@ class MailController extends Controller
         return false;
     }
 
-    private function extractLanguage($key) 
-    {   
-        #Kürzt bspw. "_new_de_redirect bzw. "de_redirect" zu "de"
-        preg_match("/^(?:_new_)?([^_]*)/", $key, $matches);
-        foreach($matches as $dir) {
-            if(strlen($dir) == 2)
-                return $dir;
-            }
-    }
-
-    private function processKey($key) 
-    {   
-        $key = trim($key);
-        #Kürzt bspw. "_new_de_redirect bzw. "de_redirect" zu "redirect"
-        preg_match("/^(?:_new_)?(?:[^_]*)_(\w*.?\w*#?.?\w*)/", $key, $matches);
-        foreach($matches as $processedKey) {
-            if(strpos($processedKey, "_") === FALSE) {
-                return $processedKey;
-            }
-        }
-        return $key;
-    }
-
     public function sendLanguageFile(Request $request, $from, $to, $exclude = "", $email ="")
     {
         $filename = $request->input('filename');
@@ -243,130 +219,4 @@ class MailController extends Controller
         return redirect(url('languages/edit', ['from' => $from, 'to' => $to, 'exclude' => $ex, 'email' => $emailAddress]));
     }
 
-
-
-    public function processSynopticPageInput(Request $request, $exclude = "") {
-
-        $filename = $request->input('filename');
-
-        #Identifizieren des gedrückten Buttons
-        if(isset($request['nextpage'])) {
-            #Leite weiter zur nächsten Seite
-            $ex = [];
-
-            if ($exclude !== "") {
-                try {
-                    $ex = unserialize(base64_decode($exclude));
-                } catch (\ErrorException $e) {
-                    $ex = [];
-                }
-
-                if (!isset($ex["files"])) {
-                    $ex["files"] = [];
-                }
-            }
-            if (!isset($ex["new"])) {
-                $ex["new"] = 0;
-            }
-            $ex['files'][] = basename($filename);
-            $ex = base64_encode(serialize($ex));
-
-            return redirect(url('synoptic', ['exclude' => $ex]));
-        }
-
-        #Andernfalls auslesen, zippen und herunterladen der veränderten Dateien 
-        $data = [];
-        $new  = 0;
-        $editedFiles = [];
-
-        foreach ($request->all() as $key => $value) {
-
-            if ($key === "filename" || $value === "") {
-                continue;
-            }
-
-            $key = base64_decode($key);
-
-            #Pfad zur Datei anhand des Schlüsselnamens rekonstruieren (Schlüssel enthält Sprachkürzel)
-            $langdir = $this->extractLanguage($key);
-            $filepath = "lang/".$langdir."/".$filename;
- 
-            if (strpos($key, "_new_") === 0 && $value !== "" || $this->isEdited($this->processKey($key), $value, $filepath)) {
-                $new++;
-                $editedFiles[$langdir] = $filepath;
-            } 
-        }     
-
-        #Erneute Iteration über Request, damit Dateien mitsamt vorherigen Einträgen abgespeichert werden 
-        foreach($request->all() as $key => $value) {
-
-            if ($key === "filename" || $value === "") {
-                continue;
-            }
-
-            $key = base64_decode($key);
-
-            #Pfad zur Datei anhand des Schlüsselnamens rekonstruieren (Schlüssel enthält Sprachkürzel)
-            $langdir = $this->extractLanguage($key);
-
-            #Ãœberspringe Datei, falls diese nicht bearbeitet worden ist
-            if(!isset($editedFiles[$langdir])) {
-                continue;
-            }
-
-            #Key kuerzen, sodass er nur den eigentlichen Keynamen enthält
-            $key = $this->processKey($key);
-            
-            if (!strpos($key, "#")) {
-                $data[$langdir][$key] = $value;
-            #Aufdröseln von 2D-Arrays
-            } else {
-                $ref = &$data;
-                do {
-                    $ref = &$ref[$langdir][substr($key, 0, strpos($key, "#"))];
-                    $key = substr($key, strpos($key, "#") + 1);
-                } while (strpos($key, "#"));
-                $ref = &$ref[$key];
-                $ref = $value;
-            }
-        }
-
-        if(empty($data)) {
-            return redirect(url('synoptic', ['exclude' => $exclude]));
-        }
-
-
-        if(file_exists("langfiles.zip"))
-            unlink("langfiles.zip");
-
-        $zip = new ZipArchive();
-
-        if ($zip->open("langfiles.zip", ZipArchive::CREATE) !== TRUE) {  
-            exit("Cannot open ".$filename);
-        } 
-            
-        try{
-        #Erstelle Ausgabedateien
-            foreach($data as $lang => $entries) {
-                $output = json_encode($entries, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
-                $output = preg_replace("/\{/si", "[", $output);
-                $output = preg_replace("/\}/si", "]", $output);
-                $output = preg_replace("/\": ([\"\[])/si", "\"\t=>\t$1", $output);
-                $output = "<?php\n\nreturn $output;\n";
-                $zip->addEmptyDir($lang);
-                $zip->addFromString($lang."/".$filename, $output);
-            }
-        } catch(ErrorException $e) {
-            exit("Failed to write ".$filename);
-        }
-
-        $zip->close();
-
-        return response()->download("langfiles.zip", $filename.".zip");
-
-
-    }
-
-
-
 }
diff --git a/app/Http/Controllers/StartpageController.php b/app/Http/Controllers/StartpageController.php
index 87610daedfd1b61211faae06c9feeedfaf59aa26..51d8dc60135b927b18cf322c91b9e8ac2aeb9920 100644
--- a/app/Http/Controllers/StartpageController.php
+++ b/app/Http/Controllers/StartpageController.php
@@ -51,7 +51,8 @@ class StartpageController extends Controller
             ->with('time', $request->input('param_time', '1500'))
             ->with('sprueche', $request->input('param_sprueche', 'on'))
             ->with('newtab', $request->input('param_newtab', 'on'))
-            ->with('maps', $maps = $request->input('param_maps', 'off'));
+            ->with('maps', $maps = $request->input('param_maps', 'off'))
+            ->with('key', $request->input('param_key', ''));
     }
 
     public function loadPage($subpage)
diff --git a/app/Models/LanguageObject.php b/app/Models/LanguageObject.php
index 971e905cdd16eddf2cb5969981a5e02c1d77f220..bd8c6e49a76bb8764e920eed16e50dfde21c4dfb 100644
--- a/app/Models/LanguageObject.php
+++ b/app/Models/LanguageObject.php
@@ -30,7 +30,7 @@ class LanguageObject
  	   }
 	}
 
-
+    #Helferfunktion für saveData
     private function deMultiDimensionalize($filename, $key, $value)
     {
     	foreach($value as $key2 => $value2) {
diff --git a/app/Models/parserSkripte/Minisucher.php b/app/Models/parserSkripte/Minisucher.php
index d44fb6fef33a6f255e65f6b9a20b7a385798037b..8614479d96c53f0b97720b7c59fb43d0fedd140d 100644
--- a/app/Models/parserSkripte/Minisucher.php
+++ b/app/Models/parserSkripte/Minisucher.php
@@ -10,6 +10,10 @@ class Minisucher extends Searchengine
     public function __construct(\SimpleXMLElement $engine, \App\MetaGer $metager)
     {
         parent::__construct($engine, $metager);
+        # Für die Newssuche stellen wir die Minisucher auf eine Sortierung nach Datum um.
+        if($metager->getFokus() === "nachrichten"){
+            $this->getString .= "sort=" . $this->urlencode("documentDate desc");
+        }
     }
 
     public function loadResults($content)
@@ -42,6 +46,15 @@ class Minisucher extends Searchengine
                     $descr .= $description->__toString();
                 }
                 $descr    = strip_tags($descr);
+
+                $dateString = $result->xpath('//doc/date[@name="documentDate"]')[0]->__toString();
+
+                $date = date_create_from_format("Y-m-d\TH:i:s\Z", $dateString);
+
+                $dateVal = $date->getTimestamp();
+
+                $additionalInformation = ['date' => $dateVal];
+
                 $provider = $result->xpath('//doc/str[@name="subcollection"]')[0]->__toString();
 
                 if (isset($providerCounter[$provider]) && $providerCounter[$provider] > 10) {
@@ -67,7 +80,8 @@ class Minisucher extends Searchengine
                     $link,
                     $descr,
                     $gefVon,
-                    $counter
+                    $counter,
+                    $additionalInformation
                 );
             } catch (\ErrorException $e) {
                 continue;
diff --git a/app/Models/parserSkripte/Opencrawlpolitik.php b/app/Models/parserSkripte/Opencrawlpolitik.php
index 22660f37ad310aaf880b41e671c550885fec7a61..bc6ab7ca65f4700c694c9a627286d061d8cf91c8 100644
--- a/app/Models/parserSkripte/Opencrawlpolitik.php
+++ b/app/Models/parserSkripte/Opencrawlpolitik.php
@@ -3,6 +3,7 @@
 namespace app\Models\parserSkripte;
 
 use App\Models\Searchengine;
+use Log;
 
 class Opencrawlpolitik extends Searchengine
 {
@@ -29,6 +30,14 @@ class Opencrawlpolitik extends Searchengine
                     break;
                 }
 
+                $dateString = $result->{"opencrawlDate"}->__toString();
+
+                $date = date_create_from_format("Ymd-Hi", $dateString);
+
+                $dateVal = $date->getTimestamp();
+
+                $additionalInformation = ['date' => $dateVal];
+
                 $title       = $result->{"title"}->__toString();
                 $link        = $result->{"link"}->__toString();
                 $anzeigeLink = $link;
@@ -41,7 +50,8 @@ class Opencrawlpolitik extends Searchengine
                     $anzeigeLink,
                     $descr,
                     $this->gefVon,
-                    $this->counter
+                    $this->counter,
+                    $additionalInformation
                 );
                 $count++;
             }
diff --git a/gulpfile.js b/gulpfile.js
index 77fbbb46811228b8697c7dd117ecd9991d4e5d90..f1d1d6a76440aa96fffefe60e0f3b0581949a089 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -30,7 +30,8 @@ elixir(function (mix) {
   mix.scripts(['scriptStartPage.js', 'results.js'], 'public/js/scriptStartPage.js');
   // result page
   mix.scripts(['scriptResultPage.js', 'results.js'], 'public/js/scriptResultPage.js');
-  // versioning
+  mix.scripts(['scriptSubpages.js'], 'public/js/scriptSubpages.js');
+    // versioning
   mix.version(['css/themes/default.css', 'js/lib.js', 'js/quicktips.js']);
   // utility
   mix.scripts('utility.js', 'public/js/utility.js');
diff --git a/public/img/blacklist-tutorial-searchexample.png b/public/img/blacklist-tutorial-searchexample.png
index 17af7986f23ff7c9f1f41e2bdcbd27e6bb56c2b2..a55918f4c8381c6b0fdc39ff82b5ccb74436ca56 100644
Binary files a/public/img/blacklist-tutorial-searchexample.png and b/public/img/blacklist-tutorial-searchexample.png differ
diff --git a/public/js/scriptSubPages.js b/public/js/scriptSubPages.js
new file mode 100644
index 0000000000000000000000000000000000000000..c95bece6c2a76e7729867b59605cdb13e5498df7
--- /dev/null
+++ b/public/js/scriptSubPages.js
@@ -0,0 +1,13 @@
+$(document).ready(function () {
+  if (localStorage) {
+    var theme = localStorage.getItem('theme');
+    if (theme != null) {
+      if ((theme.match(/,/g) || []).length != 3) {
+        localStorage.removeItem('theme');
+      } else {
+        theme = theme.split(',');
+        $('#theme').attr('href', '/css/theme.css.php?r=' + theme[0] + '&g=' + theme[1] + '&b=' + theme[2] + '&a=' + theme[3]);
+      }
+    }
+  }
+});
\ No newline at end of file
diff --git a/public/js/settings.js b/public/js/settings.js
index 3fd07f37684b1f91dd83a1c255ec3217abb57798..8910eb9cdd6aec2504b8d2c11e9e19f796edb211 100644
--- a/public/js/settings.js
+++ b/public/js/settings.js
@@ -5,10 +5,13 @@ $(document).ready(function () {
     $('#save').removeClass('hidden');
     $('#save').click(function () {
       localStorage.setItem('pers', true);
-      $('input[type=checkbox]:checked, input[type=hidden]').each(function (el) {
+      $('input[type=checkbox]:checked, input[type=hidden]').each(function () {
         localStorage.setItem($(this).attr('name'), $(this).val());
       });
-      $('select').each(function (el) {
+      $('select').each(function () {
+        localStorage.setItem($(this).attr('name'), $(this).val());
+      });
+      $('input[type=text]').each(function () {
         localStorage.setItem($(this).attr('name'), $(this).val());
       });
       document.location.href = $('#save').attr('data-href');
diff --git a/public/langfiles.zip b/public/langfiles.zip
deleted file mode 100644
index 601229310be12f9f35e1c77f29b1b62ab90afe68..0000000000000000000000000000000000000000
Binary files a/public/langfiles.zip and /dev/null differ
diff --git a/resources/assets/js/scriptResultPage.js b/resources/assets/js/scriptResultPage.js
index 838c4b820f95a4454003de9d94dce891999391b3..7b1cbf53572fb899e6a4fd2f9c847e1c0b9348c1 100644
--- a/resources/assets/js/scriptResultPage.js
+++ b/resources/assets/js/scriptResultPage.js
@@ -4,9 +4,9 @@ $(document).ready(function () {
   var custom = $('#foki > li.active').hasClass('custom-focus-tab-selector');
   getDocumentReadyForUse(focus, custom);
   botProtection();
-  new Results().updateResultPageInterface();      // Adds the saved Results if they are present
-  if(document.location.href.indexOf("focus=container") !== -1){
-    $($("#foki > li#savedFokiTabSelector").get(0)).find(">a").tab("show");
+  new Results().updateResultPageInterface(); // Adds the saved Results if they are present
+  if (document.location.href.indexOf('focus=container') !== -1) {
+    $($('#foki > li#savedFokiTabSelector').get(0)).find('>a').tab('show');
   }
 });
 
@@ -63,8 +63,6 @@ function pluginInfo () {
   }
 }
 
-
-
 function theme () {
   if (localStorage) {
     var theme = localStorage.getItem('theme');
@@ -513,18 +511,18 @@ function initialLoadContent (fokus) {
   });
 }
 
-function resultSaver(index) {
-  var title = $("div.tab-pane.active .result[data-count=" + index + "] a.title").html();
-  var link = $("div.tab-pane.active .result[data-count=" + index + "] a.title").attr("href");
-  var anzeigeLink = $("div.tab-pane.active .result[data-count=" + index + "] div.link-link > a").html();
-  var gefVon = $("div.tab-pane.active .result[data-count=" + index + "] span.hoster").html();
-  var hoster =  $("div.tab-pane.active .result[data-count=" + index + "] a.title").attr("data-hoster");
-  var anonym = $("div.tab-pane.active .result[data-count=" + index + "] a.proxy").attr("href");
-  var description = $("div.tab-pane.active .result[data-count=" + index + "] div.description").html();
-  var color = $("div.tab-pane.active .result[data-count=" + index + "] div.number").css("color");
-  var rank = parseFloat($("div.tab-pane.active .result[data-count=" + index + "]").attr("data-rank"));
+function resultSaver (index) {
+  var title = $('div.tab-pane.active .result[data-count=' + index + '] a.title').html();
+  var link = $('div.tab-pane.active .result[data-count=' + index + '] a.title').attr('href');
+  var anzeigeLink = $('div.tab-pane.active .result[data-count=' + index + '] div.link-link > a').html();
+  var gefVon = $('div.tab-pane.active .result[data-count=' + index + '] span.hoster').html();
+  var hoster = $('div.tab-pane.active .result[data-count=' + index + '] a.title').attr('data-hoster');
+  var anonym = $('div.tab-pane.active .result[data-count=' + index + '] a.proxy').attr('href');
+  var description = $('div.tab-pane.active .result[data-count=' + index + '] div.description').html();
+  var color = $('div.tab-pane.active .result[data-count=' + index + '] div.number').css('color');
+  var rank = parseFloat($('div.tab-pane.active .result[data-count=' + index + ']').attr('data-rank'));
   new Result(title, link, anzeigeLink, gefVon, hoster, anonym, description, color, rank, undefined);
-  var to = $("#savedFokiTabSelector").length ? $("#savedFokiTabSelector") : $("#foki");
-  $("div.tab-pane.active .result[data-count=" + index + "]").transfer({to: to, duration: 1000});
+  var to = $('#savedFokiTabSelector').length ? $('#savedFokiTabSelector') : $('#foki');
+  $('div.tab-pane.active .result[data-count=' + index + ']').transfer({to: to, duration: 1000});
   new Results().updateResultPageInterface();
 }
diff --git a/resources/assets/js/scriptStartPage.js b/resources/assets/js/scriptStartPage.js
index 3416e000172ebc12ae852cbf12c775f1f71552de..98ec339b26ce6024995339e557d49fb67df62776 100644
--- a/resources/assets/js/scriptStartPage.js
+++ b/resources/assets/js/scriptStartPage.js
@@ -1,9 +1,22 @@
+const DEFAULT_FOCUS = 'web';
+
 $(document).ready(function () {
   // checkPlugin()
   if (location.href.indexOf('#plugin-modal') > -1) {
     $('#plugin-modal').modal('show');
   }
   $('button').popover();
+
+  loadLocalStorage();
+  setActionListeners();
+  loadInitialCustomFocuses();
+  loadSavedResults();
+});
+
+/**
+ * Loads the user theme and stored settings from local storage
+ */
+function loadLocalStorage () {
   if (localStorage) {
     var theme = localStorage.getItem('theme');
     if (theme != null) {
@@ -18,11 +31,11 @@ $(document).ready(function () {
       setSettings();
     }
   }
-  setActionListeners();
-  loadInitialCustomFocuses();
-  loadSavedResults();
-});
+}
 
+/**
+ * Sets all action listeners for this page
+ */
 function setActionListeners () {
   $('button').on('shown.bs.popover', function () {
     $('#color-chooser a').click(function () {
@@ -46,11 +59,10 @@ function setActionListeners () {
       window.location = './settings/';
     });
   }
-  $('#addFocusBtn').click(function () {
-    showFocusCreateDialog('');
-  });
+  $('#addFocusBtn').click(() => showFocusCreateDialog(''));
   $('#save-focus-btn').click(saveFocus);
   $('#delete-focus-btn').click(deleteFocus);
+  // Save Focus on clicking enter while in the focus name input
   $('#focus-name').keyup(function (event) {
     if (event.keyCode == 13) {
       $('#save-focus-btn').click();
@@ -61,9 +73,11 @@ function setActionListeners () {
   });
 }
 
+/**
+ * Loads stored settings from local storage
+ */
 function setSettings () {
-  for (var i = 0; i < localStorage.length; i++) {
-    var key = localStorage.key(i);
+  for (var key in localStorage) {
     var value = localStorage.getItem(key);
     if (key.startsWith('param_') && !key.endsWith('lang') && !key.endsWith('autocomplete')) {
       key = key.substring(key.indexOf('param_') + 6);
@@ -71,15 +85,15 @@ function setSettings () {
     }
     $('#foki input[type=radio]#angepasst').attr('checked', true);
   }
-  if (localStorage.getItem('param_lang') !== null) {
-    var value = localStorage.getItem('param_lang');
-    // Change the value of the lang input field to the given parameter
-    $('input[name=lang]').val(value);
+  // Change the value of the lang input field to the given parameter
+  var lang = localStorage.getItem('param_lang');
+  if (lang !== null) {
+    $('input[name=lang]').val(lang);
   }
-  if (localStorage.getItem('param_autocomplete') !== null) {
-    var value = localStorage.getItem('param_autocomplete');
-    // Change the value of the lang input field to the given parameter
-    $('input[name=eingabe]').attr('autocomplete', value);
+  // Change the value of the lang input field to the given parameter
+  var autocomplete = localStorage.getItem('param_autocomplete');
+  if (autocomplete !== null) {
+    $('input[name=eingabe]').attr('autocomplete', autocomplete);
   }
   if ($('fieldset#foki.mobile').length) {
     $('fieldset.mobile input#bilder').val('angepasst');
@@ -421,17 +435,24 @@ function resetOptions () {
   }
 }
 
+/**
+ * Sets the selected focus to default
+ */
 function setFocusToDefault () {
-  setFocus('web');
+  setFocus(DEFAULT_FOCUS);
 }
 
+/**
+ * Sets the selected focus
+ * @param {String} focusID The id of the focus, without #
+ */
 function setFocus (focusID) {
   $('#' + focusID).prop('checked', true);
 }
 
-function loadSavedResults() {
+function loadSavedResults () {
   var results = new Results();
-  if(results.length > 0){
+  if (results.length > 0) {
     var html = $('\
     <div class="focus">\
       <input id="savedResults" class="focus-radio hide" name="focus" value="container" form="searchForm" type="radio" required="">\
@@ -442,9 +463,9 @@ function loadSavedResults() {
       </label>\
     </div>\
     ');
-    $("#addFocusBtnDiv").before(html);
-    $("#foki input#savedResults").change(function(){
-      if($(this).prop("checked")) $("#searchForm").submit();
+    $('#addFocusBtnDiv').before(html);
+    $('#foki input#savedResults').change(function () {
+      if ($(this).prop('checked')) $('#searchForm').submit();
     });
   }
 }
diff --git a/resources/assets/less/metager/base.less b/resources/assets/less/metager/base.less
index 20d31a459d60f17810b40fe0be47a12b3c1afe16..1dfecf33935e3b23253d324a140d98dce36e2530 100644
--- a/resources/assets/less/metager/base.less
+++ b/resources/assets/less/metager/base.less
@@ -1,5 +1,5 @@
 @body-background-color: @base-body-backround-color;
-@aufruf-winter-a-normal-or-visited: @base-aufruf-winter-color!important;
+@aufruf-winter-a-normal-or-visited: @base-aufruf-winter-color;
 @aufruf-winter-aufruf-action-btn-color: @base-aufruf-winter-btn-color!important;
 @aufruf-winter-aufruf-action-btn-background-color: @base-aufruf-winter-color!important;
 @aufruf-winter-aufruf-action-btn-border-color: @base-aufruf-winter-border-color;
diff --git a/resources/lang/de/about.php b/resources/lang/de/about.php
index aff24b560c660da9c954ce0756631eb884c262f2..041e2c2d9562999275f9a17c956335f6b5524169 100644
--- a/resources/lang/de/about.php
+++ b/resources/lang/de/about.php
@@ -3,7 +3,17 @@
 return [
     'head.1' => 'Ãœber uns',
     'head.2' => 'Welche Vorteile bietet die Nutzung von MetaGer?',
+    'head.3' => 'Was MetaGer auszeichnet',
 
+    '3.0' => 'Verwirklichung von freiem Wissenszugang und digitaler Demokratie, durch:',
+    '3.1' => 'Wissenszugang ohne Ãœberwachung und ohne Bevormundung durch Staaten oder Konzerne',
+    '3.2' => 'Keine Speicherung von Nutzerdaten, höchste Anforderungen an Datenschutz und Privatsphäre',
+    '3.3' => 'damit auch anonymen Zugang, AUCH zu den SuchERGEBNISSEN',
+    '3.4' => 'realisiert auf mehreren Wegen: durch anonymen Proxy und TOR-hidden-Zugang',
+    '3.5' => 'als Open-Source-Software und damit nachprüfbar (nur Open-Source-Software ist wirklich vertrauenswürdig)',
+    '3.6' => 'dies alles nicht nur für die Informationssuche, sondern auch für die Routenplanung und geographische Suche (<a href="https://maps.metager.de" target="_blank">maps.metager.de</a>), OHNE Speicherung des Standortverlaufes der Nutzer',
+    '3.7' => 'in einer transparenten Organisationsstrukur (gemeinnütziger Träger-Verein <a href="https://suma-ev.de" target="_blank">SUMA-EV</a>), in der JEDE/R Mitglied werden kann',
+    
     'list.1' => 'Datenschutz und Privatsphäre sind bei uns einfach und selbstverständlich: Fertig eingebaut und automatisch bei jeder Suche angewandt. <a href="/datenschutz/">Mehr dazu…</a>',
     'list.2' => 'Wir arbeiten nicht gewinnorientiert, wir sind ein <a href="/spende/">gemeinnütziger Verein</a>: Wir haben nicht das Ziel, uns durch Ihre Klicks und schon gar nicht durch Ihre Daten zu bereichern.',
     'list.3' => '<a href="https://de.wikipedia.org/wiki/MetaGer" target="_blank" rel="noopener">MetaGer</a> ist primär eine <a href="https://de.wikipedia.org/wiki/Metasuchmaschine" target="_blank" rel="noopener"><em>Meta</em>-Suchmaschine:</a> Wir fragen bis zu 50 Suchmaschinen ab. Damit können wir echte Vielfalt in den Ergebnissen liefern.',
diff --git a/resources/lang/de/hilfe.php b/resources/lang/de/hilfe.php
index 048f5d2bf7923ae07eaeb6b55afa049cb2ec556d..f17e54afb0f7a07de502c026a02b59387c6e2b4f 100644
--- a/resources/lang/de/hilfe.php
+++ b/resources/lang/de/hilfe.php
@@ -49,10 +49,11 @@ return [
     "domains.showcase.explanation.1" => "Zusätzlich bieten wir Ihnen die Möglichkeit Subdomains beziehungsweise Top-Level-Domains direkt auf der Ergebnisseite auszuschließen. Bei jedem unserer Ergebnisse erscheint dieses kleine Symbol für die Optionen:",
     "domains.showcase.explanation.2" => "Wenn Sie auf dieses Symbol klicken, erscheint folgendes Menü:",
     "domains.showcase.menu.1"        => "Mit diesem Menü lassen sich:",
-    "domains.showcase.menu.2"        => "Eine neue Suche nur auf der Domain des Ergebnisses (de.wikipedia.de) starten",
-    "domains.showcase.menu.3"        => "Eine Suche ohne Ergebnisse der Subdomain (de.wikipedia.de) starten",
-    "domains.showcase.menu.4"        => "Eine Suche ohne Ergebnisse der Top-Level-Domain (wikipedia.de) starten",
-    "domains.showcase.menu.5"        => "Probieren Sie es doch gleich einmal aus, indem Sie die Optionen anklicken.",
+    "domains.showcase.menu.2"        => "Ergebnisse zwischenspeichern zum weiteren filtern (siehe <a href=\"#searchinsearch\"> hier</a>)",
+    "domains.showcase.menu.3"        => "Eine neue Suche nur auf der Domain des Ergebnisses (de.wikipedia.de) starten",
+    "domains.showcase.menu.4"        => "Eine Suche ohne Ergebnisse der Subdomain (de.wikipedia.de) starten",
+    "domains.showcase.menu.5"        => "Eine Suche ohne Ergebnisse der Top-Level-Domain (wikipedia.de) starten",
+    "domains.showcase.menu.6"        => "Probieren Sie es doch gleich einmal aus, indem Sie die Optionen anklicken.",
 
     'urls.title' => 'URLs ausschließen',
     'urls.explanation' => 'Sie können Suchergebnisse ausschließen, deren Ergebnislinks bestimmte Worte enthalten, indem Sie in ihrer Suche "-url:" verwenden.',
@@ -92,4 +93,7 @@ return [
     "sucheingabe"                    => "Sucheingabe",
     "bang.title"                     => "!bangs",
     "bang.1"                         => "MetaGer unterstützt in geringem Umfang eine Schreibweise, die oft als „!bang“-Syntax bezeichnet wird.<br>Ein solches „!bang“ beginnt immer mit einem Ausrufezeichen und enthält keine Leerzeichen. Beispiele sind hier „!twitter“ oder „!facebook“.<br>Wird ein !bang, das wir unterstützen, in der Suchanfrage verwendet, erscheint in unseren Quicktips ein Eintrag, über den man die Suche auf Knopfdruck mit dem jeweiligen Dienst (hier Twitter oder Facebook) fortführen kann.<p>Warum sich unser Vorgehen hier von anderen Anbietern unterscheidet lesen Sie in <a href=\"/faq/#bangs\" target=\"_blank\" rel=\"noopener\">unseren FAQ</a>.",
+    "searchinsearch.title"           => "Suche in der Suche",
+    "searchinsearch.1"               => "Auf die Funktion der Suche in der Suche kann mit Hilfe des <a href=\"#exampleimg\"> kleinen blauen Dreiecks </a> rechts neben der Ergebnis-URL zugegriffen werden. Beim Klick auf dieses öffnet sich ein Kontextmenü mit dem Eintrag \"Ergebnis in Tab speichern\". Hierdurch wird das jeweilige Ergebnis in einem separaten Speicher abgelegt. Der Inhalt dieses Speichers kann mit einem Klick auf \"gespeicherte Ergebnisse\" unterhalb des Suchfeldes angezeigt werden. Innerhalb dieser Ansicht können Sie die gespeicherten Ergebnisse nach Schlüsselworten filtern oder umsortieren lassen. Mit einem Klick auf \"Web\", links von \"gespeicherte Ergebnisse\" gelangen Sie wieder in die ursprüngliche Suchergebnis-Ansicht. 
+        Mehr Infos dazu unter <a href=\"http://blog.suma-ev.de/node/225\" target=\"_blank\" rel=\"noopener\"> http://blog.suma-ev.de/node/225</a>."
 ];
diff --git a/resources/lang/de/metaGer.php b/resources/lang/de/metaGer.php
index a59c6c2eb8ab1bad4d9073f34a3da2d7adf3cdc6..e5e33246bb24830ce0fe342526f2a4b4c8ea1865 100644
--- a/resources/lang/de/metaGer.php
+++ b/resources/lang/de/metaGer.php
@@ -18,4 +18,5 @@ return [
 
     'sitesearch.failed'        => 'Sie wollten eine Sitesearch auf :site durchführen. Leider unterstützen die eingestellten Suchmaschinen diese nicht. Sie können <a href=":searchLink">hier</a> die Sitesearch im Web-Fokus durchführen. Es werden ihnen Ergebnisse ohne Sitesearch angezeigt.',
     'sitesearch.success'       => 'Sie führen eine Sitesearch durch. Es werden nur Ergebnisse von der Seite: <a href="http://:site" target="_blank" rel="noopener">":site"</a> angezeigt.',
+    'feedback'                 => 'Nichts passendes auf dabei? Geben Sie uns Feedback: ',
 ];
diff --git a/resources/lang/de/settings.php b/resources/lang/de/settings.php
index 1d58f3267c5ff8cd7874af47e6a483288a1ae6d0..6dd97f81f7b5a75113dd12982e38d9f3681f95bc 100644
--- a/resources/lang/de/settings.php
+++ b/resources/lang/de/settings.php
@@ -36,10 +36,13 @@ return [
 
     'request'           => 'Abfragemethode',
 
-    'autocomplete'      => 'Auto-Vervollständigung (Sucheingabe)',
+    'autocomplete.label'=> 'Auto-Vervollständigung (Sucheingabe)',
     'autocomplete.on'   => 'ein',
     'autocomplete.off'  => 'aus',
 
+    'key.label'       => 'Schlüssel für werbefreie Suche',
+    'key.placeholder' => 'Schlüssel eingeben',
+
     "foki.web"          => "Web",
     "foki.andere"       => "Andere",
     "foki.produktsuche" => "Produktsuche",
diff --git a/resources/lang/en/hilfe.php b/resources/lang/en/hilfe.php
index 71593ef592501751978d78049225c130326faaf0..5c5f9fc081dd1dab485fffffdf6fb6808c5a94c1 100644
--- a/resources/lang/en/hilfe.php
+++ b/resources/lang/en/hilfe.php
@@ -37,10 +37,11 @@ return [
     "domains.showcase.explanation.1" => "Additionally there is the option to exclude hosts or domains on the result page: All of the results have the small triangle sign:",
     "domains.showcase.explanation.2" => "Click for the menu shown below:",
     "domains.showcase.menu.1"        => "Decide here:",
-    "domains.showcase.menu.2"        => "To start a new search with just the domain of the result (de.wikipedia.de)",
-    "domains.showcase.menu.3"        => "To start a search without the results of that subdomain (de.wikipedia.de)",
-    "domains.showcase.menu.4"        => "To start a search without results of the top level domain (wikipedia.de)",
-    "domains.showcase.menu.5"        => "Click \"Options\" to try it now.",
+    "domains.showcase.menu.2"        => "To cache your search results in a separate tab (see <a href=\"#searchinsearch\"> here</a>)",
+    "domains.showcase.menu.3"        => "To start a new search with just the domain of the result (de.wikipedia.de)",
+    "domains.showcase.menu.4"        => "To start a search without the results of that subdomain (de.wikipedia.de)",
+    "domains.showcase.menu.5"        => "To start a search without results of the top level domain (wikipedia.de)",
+    "domains.showcase.menu.6"        => "Click \"Options\" to try it now.",
     "dienste"                        => "Tools-free of charge",
     "app.title"                      => "Android-App",
     "app.1"                          => "You can use MetaGer within an app, too. To do so just download the <a href=\"https://play.google.com/store/apps/details?id=de.metager.metagerapp\" target=\"_blank\" rel=\"noopener\">MetaGer App</a> on your Android smartphone.",
diff --git a/resources/lang/en/metaGer.php b/resources/lang/en/metaGer.php
index 57660e567050f3dd8f3bab84c2b5c59f72d52ef3..8e2389238d6409ec77603794ae6acbdb52731da1 100644
--- a/resources/lang/en/metaGer.php
+++ b/resources/lang/en/metaGer.php
@@ -12,5 +12,6 @@ return [
     "formdata.stopwords"	=>	"You have excluded results with the following words: \":stopwords\"",
     "formdata.phrase"	=>	"You are doing a string search: :phrase",
     "sitesearch.failed"	=>	"You intend to do a site search on :site. Unfortunately the chosen search engines do not support that. You can do a site search <a href=\":searchLink\">here</a> within the Web focus",
-    "sitesearch.success"	=>	"You are doing a site search. Only results of the website <a href=\"http://:site\" target=\"_blank\" rel=\"noopener\">\":site\"</a> will be shown."
+    "sitesearch.success"	=>	"You are doing a site search. Only results of the website <a href=\"http://:site\" target=\"_blank\" rel=\"noopener\">\":site\"</a> will be shown.",
+    "feedback"              => "Not what you were looking for? Give us feedback: ",
 ];
\ No newline at end of file
diff --git a/resources/lang/es/hilfe.php b/resources/lang/es/hilfe.php
index 5837a277fdf909c3f3703ec02692512eb7eeed72..5a789868d71f1160e8606817a08a4755b9537938 100644
--- a/resources/lang/es/hilfe.php
+++ b/resources/lang/es/hilfe.php
@@ -35,10 +35,11 @@ return [
     "domains.blacklist.example.6"    => "<i>término de búsqueda</i> -site:*.wikipedia.org",
     "domains.showcase.explanation.1" => "Nuestra oferta adicional: exluye subdominios y top-level dominios directo en cada resultado. Hacer clic el icono deltoideo.",
     "domains.showcase.explanation.2" => "Hacer clic sobre el icono el menu siguiente aparece:",
-    "domains.showcase.menu.1"        => "Con eso menu:",
-    "domains.showcase.menu.2"        => "Una búsqueda nueva en el dominio do resultado.",
-    "domains.showcase.menu.3"        => "Una búsqueda nueva sin los resultados do subdominio",
-    "domains.showcase.menu.4"        => "Una búsqueda nueva sin los resultados do top-level dominio",
+    "domains.showcase.menu.1"        => "Con eso menu se puede:",
+    "domains.showcase.menu.3"        => "Comenzar una búsqueda nueva en el dominio do resultado.",
+    "domains.showcase.menu.4"        => "Comenzar una búsqueda nueva sin los resultados do subdominio",
+    "domains.showcase.menu.5"        => "Comenzar una búsqueda nueva sin los resultados do top-level dominio",
+    "domains.showcase.menu.6"        => "Aquí se puede experimentar:",
     "dienste"                        => "Servicios",
     "app.title"                      => "Android-App",
     "app.1"                          => "Descargar <a href=\"https://play.google.com/store/apps/details?id=de.metager.metagerapp\" target=\"_blank\" rel=\"noopener\">MetaGer App</a> para Android.",
diff --git a/resources/views/about.blade.php b/resources/views/about.blade.php
index e3ecb5d5f44b87ee6b0fab844d5c7dd1f9a8834b..4c814b0e6fb2572d0f37dcbb2280c7d7c8b6d913 100644
--- a/resources/views/about.blade.php
+++ b/resources/views/about.blade.php
@@ -4,6 +4,17 @@
 
 @section('content')
 	<h1>{{ trans('about.head.1') }}</h1>
+	<h2>{{ trans('about.head.3') }}</h2>
+	{!! trans('about.3.0') !!}
+	<ul class="dotlist">
+		<li>{!! trans('about.3.1') !!}</li>
+		<li>{!! trans('about.3.2') !!}</li>
+		<li>{!! trans('about.3.3') !!}</li>
+		<li>{!! trans('about.3.4') !!}</li>
+		<li>{!! trans('about.3.5') !!}</li>
+		<li>{!! trans('about.3.6') !!}</li>
+		<li>{!! trans('about.3.7') !!}</li>
+	</ul>
 	<h2>{{ trans('about.head.2') }}</h2>
 	<ul class="dotlist">
 		<li>{!! trans('about.list.1') !!}</li>
diff --git a/resources/views/datenschutz.blade.php b/resources/views/datenschutz.blade.php
index 0e02a93e66a885607bec99dcbe7c147755e3de6d..680a6f0382843416a6544f27e0d01e7699eaaf8b 100644
--- a/resources/views/datenschutz.blade.php
+++ b/resources/views/datenschutz.blade.php
@@ -21,20 +21,20 @@
 		<li>{!! trans('datenschutz.policy.18') !!}</li>
 		<li>{!! trans('datenschutz.policy.19') !!}</li>
 	</ul>
-	<h2>{!! trans('datenschutz.twitter') !!}</h2>
-<pre><p>&gt; 7.4.2014 C. Schulzki-Haddouti @kooptech
-&gt; MetaGer dürfte im Moment die sicherste Suchmaschine weltweit sein</p>
-<p>&gt; 8.4.2014 Stiftung Datenschutz @DS_Stiftung
-&gt; Wenn das Suchergebnis anonym bleiben soll: @MetaGer, die gemeinnützige
-&gt; Suchmaschine aus #Hannover</p>
-<p>&gt; 8.4.2014 Markus Käkenmeister @markus2009
-&gt; Suchmaschine ohne Tracking</p>
-<p>&gt; 8.4.2014 Marko [~sHaKaL~] @mobilef0rensics 
-&gt; Nice; anonymous Search and find with MetaGer</p>
-<p>&gt; 7.4.2014 Anfahrer @anfahrer
-&gt; Websuche mit #Datenschutz dank #MetaGer : Anonyme Suche und
-&gt; Ergebnisse via Proxy</p>
-<p>&gt; 8.4.2014 stupidit&eacute; pue @dummheitstinkt
-&gt; wow, is this the MetaGer I used in the end 90s in internet cafes???
-&gt; "Anonymes Suchen und Finden mit MetaGer | heise"</p></pre>
-@endsection
+		<h2>{!! trans('datenschutz.twitter') !!}</h2>
+	<pre><p>&gt; 7.4.2014 C. Schulzki-Haddouti @kooptech
+	&gt; MetaGer dürfte im Moment die sicherste Suchmaschine weltweit sein</p>
+	<p>&gt; 8.4.2014 Stiftung Datenschutz @DS_Stiftung
+	&gt; Wenn das Suchergebnis anonym bleiben soll: @MetaGer, die gemeinnützige
+	&gt; Suchmaschine aus #Hannover</p>
+	<p>&gt; 8.4.2014 Markus Käkenmeister @markus2009
+	&gt; Suchmaschine ohne Tracking</p>
+	<p>&gt; 8.4.2014 Marko [~sHaKaL~] @mobilef0rensics 
+	&gt; Nice; anonymous Search and find with MetaGer</p>
+	<p>&gt; 7.4.2014 Anfahrer @anfahrer
+	&gt; Websuche mit #Datenschutz dank #MetaGer : Anonyme Suche und
+	&gt; Ergebnisse via Proxy</p>
+	<p>&gt; 8.4.2014 stupidit&eacute; pue @dummheitstinkt
+	&gt; wow, is this the MetaGer I used in the end 90s in internet cafes???
+	&gt; "Anonymes Suchen und Finden mit MetaGer | heise"</p></pre>
+@endsection
\ No newline at end of file
diff --git a/resources/views/hilfe.blade.php b/resources/views/hilfe.blade.php
index 550c96b573203dbce8a786e9b84f7b16c754f8f5..9e7685944f94628f5d5018a502b90df91c770381 100644
--- a/resources/views/hilfe.blade.php
+++ b/resources/views/hilfe.blade.php
@@ -99,7 +99,7 @@
 				<div class="well well-sm">{!! trans('hilfe.domains.blacklist.example.6') !!}</div></li>
 			</ul>
 			<p>{!! trans('hilfe.domains.showcase.explanation.1') !!}</p>
-			<img src="/img/blacklist-tutorial-searchexample.png">
+			<img id="exampleimg" src="/img/blacklist-tutorial-searchexample.png">
 			<p>{!! trans('hilfe.domains.showcase.explanation.2') !!}<p>
 			<div id="result_option_showcase" style="margin-top: -300px"></div>
 			<div style="margin-top: 315px; margin-bottom: 10px;">
@@ -108,6 +108,12 @@
 					<h3 class="popover-title"><i class="fa fa-cog" aria-hidden="true"></i> Optionen</h3>
 					<div class="popover-content">
 						<ul class="options-list list-unstyled small">
+							<li>
+								<a href="#exampleimg">
+								<i class="glyphicon glyphicon-floppy-disk"></i>
+									Ergebnis in Tab speichern.
+								</a>
+							</li>
 							<li>
 								<a href="javascript:setDummySearch('wikipedia site:de.wikipedia.org')">
 									Suche auf dieser Domain neu starten
@@ -138,8 +144,9 @@
 					<li>{!! trans('hilfe.domains.showcase.menu.2') !!}</li>
 					<li>{!! trans('hilfe.domains.showcase.menu.3') !!}</li>
 					<li>{!! trans('hilfe.domains.showcase.menu.4') !!}</li>
+					<li>{!! trans('hilfe.domains.showcase.menu.5') !!}</li>
 				</ul>
-				<p>{!! trans('hilfe.domains.showcase.menu.5') !!}</p>
+				<p>{!! trans('hilfe.domains.showcase.menu.6') !!}</p>
 			</div>
 			<div>
 				<div class="well well-sm"><i>meine suche</i> <span id="dummy_search"></span></div>
@@ -166,6 +173,14 @@
 			<p>{!! trans('hilfe.bang.1') !!}</p>
 		</div>
 	</div>
+	<div class="panel panel-default" id="searchinsearch">
+		<div class="panel-heading">
+			<h3 class="panel-title">{!! trans('hilfe.searchinsearch.title') !!}</h3>
+		</div>
+		<div class="panel-body">
+			<p>{!! trans('hilfe.searchinsearch.1') !!}</p>
+		</div>
+	</div>
 	<h2 id="dienste">{!! trans('hilfe.dienste') !!}</h2>
 	<div class="panel panel-default">
 		<div id="mg-app" style="margin-top: -100px"></div>
diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php
index edf21767b8b04b32e9a9c8336c9c7f458addd116..57d07ca997cff20572b3bccb0e9da75d6b476542 100644
--- a/resources/views/index.blade.php
+++ b/resources/views/index.blade.php
@@ -291,6 +291,7 @@
 					<input type="hidden" name="sprueche" value={{ $sprueche }} >
 					<input type="hidden" name="newtab" value={{ $newtab }} >
 					<input type="hidden" name="maps" value={{ $maps }} >
+					<input type="hidden" name="key" value={{ $key }} >
 					@foreach ($focusPages as $fp)
 						<input type="hidden" name={{ $fp }} value="on">
 					@endforeach
@@ -309,11 +310,14 @@
 				<a href="#" data-toggle="modal" data-target="#plugin-modal" class="btn btn-default mutelink" title="{{ trans('index.plugintitle') }}"><i class="fa fa-plug" aria-hidden="true"></i> {{ trans('index.plugin') }}</a>
 			</li>
 			@endunless
+			@if (LaravelLocalization::getCurrentLocale() == "de")
 			<li>
-				<a href="http://blog.suma-ev.de/node/225" target="_blank" class="btn btn-default mutelink">Neu: Die Suche in der Suche</a>
-			</li>
+                <a href="https://suma-ev.de/presse/Werbefreie-Suche-mit-MetaGer.html" target="_blank" class="btn btn-default mutelink">
+                    Werbefreie Suche mit MetaGer
+                </a>
+            </li>
+            @endif
 		</ul>
-	<script src="{{ elixir('js/lib.js') }}"></script>
 	<script src="{{ elixir('js/scriptStartPage.js') }}"></script>
 	<script type="text/javascript" src="{{ elixir('js/utility.js') }}"></script>
 @endsection
diff --git a/resources/views/kontakt/kontakt.blade.php b/resources/views/kontakt/kontakt.blade.php
index 7cf317c9a64221867a097892f4a2288777e312db..eb8b1f9350d37f778c88d11b6dc39f1b14eefd18 100644
--- a/resources/views/kontakt/kontakt.blade.php
+++ b/resources/views/kontakt/kontakt.blade.php
@@ -16,7 +16,7 @@
 		<div class="form-group kontakt-form-group">
 			<input class="form-control" name="email" placeholder="{!! trans('kontakt.form.5') !!}" type="text"></div>
 			<div class="form-group kontakt-form-group">
-				<textarea class="form-control" id="message" name="message" placeholder="{!! trans('kontakt.form.6') !!}"></textarea>
+				<textarea class="form-control" id="message" name="message" placeholder="{!! trans('kontakt.form.6') !!}">@if($url !== "")Die Suche unter "{{ base64_decode($url) }}" ist unvollständig.@endif</textarea>
 			</div>
 			<div class="form-group kontakt-form-group">
 			<p>{!! trans('kontakt.form.7') !!}</p>
diff --git a/resources/views/languages/synoptic.blade.php b/resources/views/languages/synoptic.blade.php
index 234a057546f6f69839b0de5e0ca9209acd196183..70b2bedefe710e4fc2f058b7fb1a4ea190aee4b7 100644
--- a/resources/views/languages/synoptic.blade.php
+++ b/resources/views/languages/synoptic.blade.php
@@ -3,7 +3,7 @@
 @section('title', $title )
 
 @section('content')
-	<h1>Ãœbersicht</h1>
+	<h1>{{ trans('languages.header') }}</h1>
 <?php /*
 	<!--
 	<div class="progress">
diff --git a/resources/views/layouts/resultPage.blade.php b/resources/views/layouts/resultPage.blade.php
index e2321177f6da66620aa02f00170dbfc958f7cd0b..299601f534f58560347145313bdbb5af035f6d6c 100644
--- a/resources/views/layouts/resultPage.blade.php
+++ b/resources/views/layouts/resultPage.blade.php
@@ -26,6 +26,12 @@
 				@yield('results')
 			</div>
 		@endif
+		<div id="feedback" style="width:50%;margin-left:25%;position: relative; top:10px;" class="alert alert-danger alert-dismissable">
+			<a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
+  				<strong> {!! trans('metaGer.feedback') !!}<a href="{{URL::to('')}}/kontakt/{{base64_encode(Request::fullUrl())}}/" target="_blank">
+  					{!! trans('kontakt.form.1') !!}</a>
+  				</strong>
+		</div>
 		<footer>
 			<div class="row">
 				<div @if(LaravelLocalization::getCurrentLocale() === "de") class="col-xs-4"@else class="col-xs-6"@endif>
diff --git a/resources/views/layouts/staticPages.blade.php b/resources/views/layouts/staticPages.blade.php
index 43480c0048248b10753cb3ef7cc55763e011460e..2763065dbd932597564864345cdefa3cf7a1114d 100644
--- a/resources/views/layouts/staticPages.blade.php
+++ b/resources/views/layouts/staticPages.blade.php
@@ -1,6 +1,7 @@
 <!DOCTYPE html>
 <html lang="{!! trans('staticPages.meta.language') !!}">
 	<head>
+		<script src="{{ elixir('js/lib.js') }}"></script>
 		<meta charset="utf-8" />
 		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
 		<title>@yield('title')</title>
@@ -223,4 +224,5 @@
 			<img src="{{ action('ImageController@generateImage')}}?site={{ urlencode(url()->current()) }}" class="hidden" />
 		</div>
 	</body>
+	<script src="{{ elixir('js/scriptSubPages.js') }}"></script>
 </html>
diff --git a/resources/views/metager3.blade.php b/resources/views/metager3.blade.php
index 23081528fa9953a925793680be14afa31f4064de..cd41558e1a0e13a7aff22b2bc929e9ae90535644 100644
--- a/resources/views/metager3.blade.php
+++ b/resources/views/metager3.blade.php
@@ -25,7 +25,10 @@
 		<div class="col-xs-12 col-md-12 resultContainer">
 	@endif
 		@if($metager->hasProducts())
-			@include('layouts.products', ['products' => $metager->getProducts()])
+    		@if( $metager->getFokus() !== "produktsuche" && !$apiAuthorized)
+    		    @include('layouts.products', ['products' => $metager->getProducts()])
+    		@endif
+
 		@else
 			@for($i = 0; $i <= 2; $i++)
 				@include('layouts.ad', ['ad' => $metager->popAd()])
diff --git a/resources/views/metager3results.blade.php b/resources/views/metager3results.blade.php
index e9a0ea13aec30c3c13bef5c2c9bc019f8adffa23..a1f66a4e879a8efa4c2d411b885931555b76bc77 100644
--- a/resources/views/metager3results.blade.php
+++ b/resources/views/metager3results.blade.php
@@ -18,7 +18,9 @@
 @endif
 <div class="col-xs-12 col-md-8">
 	@if($metager->hasProducts())
-		@include('layouts.products', ['products' => $metager->getProducts()])
+	    @if( $metager->getFokus() !== "produktsuche" && !$apiAuthorized)
+		    @include('layouts.products', ['products' => $metager->getProducts()])
+		@endif
 	@else
 		@for($i = 0; $i <= 2; $i++)
 			@include('layouts.ad', ['ad' => $metager->popAd()])
diff --git a/resources/views/settings.blade.php b/resources/views/settings.blade.php
index 790f0ed9545fbac74a900000e51ef7f98a378870..4a0b993e7ffbfd941dc3abdfd81976c0ca950b84 100644
--- a/resources/views/settings.blade.php
+++ b/resources/views/settings.blade.php
@@ -46,12 +46,16 @@
 					</select>
 				</div>
 				<div class="col-sm-6 col-md-4 col-lg-3">
-					<label class="select-label">@lang('settings.autocomplete'):</label>
+					<label class="select-label">@lang('settings.autocomplete.label'):</label>
 					<select class="form-control settings-form-control" name="param_autocomplete">
 						<option value="on" selected>@lang('settings.autocomplete.on')</option>
 						<option value="off">@lang('settings.autocomplete.off')</option>
 					</select>
 				</div>
+				<div class="col-sm-6 col-md-4 col-lg-3">
+					<label class="select-label">@lang('settings.key.label'):</label>
+					<input type="text" class="form-control settings-form-control" name="param_key" placeholder="@lang('settings.key.placeholder')">
+				</div>
 			</div>
 		</container>
 		<div id="settingsButtons">
@@ -61,6 +65,5 @@
 			<input id="plugin" class="btn btn-primary settings-btn" type="submit" value="{!! trans('settings.speichern.3') !!}">
 		</div>
 	</form>
-	<script src="{{ elixir('js/lib.js') }}"></script>
 	<script src="{{ elixir('js/settings.js') }}"></script>
 @endsection
diff --git a/resources/views/spende/danke.blade.php b/resources/views/spende/danke.blade.php
index 8db0db09d56b29462f3d7820d6dab20d16b079ff..3094fc72da783ef680f68547c6f986f2b1fc6915 100644
--- a/resources/views/spende/danke.blade.php
+++ b/resources/views/spende/danke.blade.php
@@ -5,19 +5,19 @@
 @section('navbarFocus.donate', 'class="dropdown active"')
 
 @section('content')
-	<h1>{{ trans('spenden.danke.title') }}</h1>
+	<h1>{{ trans('spende.danke.title') }}</h1>
 	<div class="col">
 		<div id="left" class="col-lg-6 col-md-12 col-sm-12 others">
-			<p style="width:100%;" class="text-muted">{{ trans('spenden.danke.nachricht') }}</p>
-			<h2>{{ trans('spenden.danke.kontrolle') }}</h2>
+			<p style="width:100%;" class="text-muted">{{ trans('spende.danke.nachricht') }}</p>
+			<h2>{{ trans('spende.danke.kontrolle') }}</h2>
 			<div>
 				<table class="table table-condensed">
 					<tr>
-						<td>{{ trans('spenden.lastschrift.3.placeholder')}}</td>
+						<td>{{ trans('spende.lastschrift.3.placeholder')}}</td>
 						<td>{{ $data['name'] }}</td>
 					</tr>
 					<tr>
-						<td>{{ trans('spenden.telefonnummer') }}</td>
+						<td>{{ trans('spende.telefonnummer') }}</td>
 						<td>{{ $data['telefon'] }}</td>
 					</tr>
 					<tr>
@@ -25,27 +25,27 @@
 						<td>{{ $data['email'] }}</td>
 					</tr>
 					<tr>
-						<td>{{ trans('spenden.iban') }}</td>
+						<td>{{ trans('spende.iban') }}</td>
 						<td>{{ $data['kontonummer'] }}</td>
 					</tr>
 					<tr>
-						<td>{{ trans('spenden.bic') }}</td>
+						<td>{{ trans('spende.bic') }}</td>
 						<td>{{ $data['bankleitzahl'] }}</td>
 					</tr>
 					<tr>
-						<td>{{ trans('spenden.danke.message') }}</td>
+						<td>{{ trans('spende.danke.message') }}</td>
 						<td>{{ $data['nachricht'] }}</td>
 					</tr>
 				</table>
 			</div>
-			<button type="button" class="btn btn-primary noprint" onclick="window.print();">{{ trans('spenden.drucken') }}</button>
+			<button type="button" class="btn btn-primary noprint" onclick="window.print();">{{ trans('spende.drucken') }}</button>
 		</div>
 		<div class="col-lg-6 col-md-12 col-sm-12 others noprint" id="right">
-			<h2>{{ trans('spenden.about.1') }}</h2>
-			<p>{!! trans('spenden.about.2') !!}</p>
-			<p>{!! trans('spenden.about.3') !!}</p>
-			<p>{!! trans('spenden.about.4') !!}</p>
-			<p>{!! trans('spenden.about.5') !!}</p>
+			<h2>{{ trans('spende.about.1') }}</h2>
+			<p>{!! trans('spende.about.2') !!}</p>
+			<p>{!! trans('spende.about.3') !!}</p>
+			<p>{!! trans('spende.about.4') !!}</p>
+			<p>{!! trans('spende.about.5') !!}</p>
 		</div>
 		<div class="clearfix"></div>
 	</div>
diff --git a/resources/views/widget/sitesearch.blade.php b/resources/views/widget/sitesearch.blade.php
index 8ab6a204a19842f04be4ed8b6e08c7d573a9153d..0f296bb23a2d00b80406c91657191ee07086e6b7 100644
--- a/resources/views/widget/sitesearch.blade.php
+++ b/resources/views/widget/sitesearch.blade.php
@@ -77,6 +77,5 @@
 			</form>;
 		</textarea>
 	@endif
-	<script src="{{ elixir('js/lib.js') }}"></script>
 	<script src="{{ elixir('js/widgets.js') }}"></script>
 @endsection
diff --git a/resources/views/widget/websearch.blade.php b/resources/views/widget/websearch.blade.php
index 3c2afce820ec8eb42e2d432a7d20152ba4f2f772..62920bae88ffdaf24cd40837f058cd8d7845f1f6 100644
--- a/resources/views/widget/websearch.blade.php
+++ b/resources/views/widget/websearch.blade.php
@@ -65,6 +65,5 @@
 			<input type="hidden" name="lang" value="{{ trans('websearch.head.6') }}">
 		</form>
 	</textarea>
-	<script src="{{ elixir('js/lib.js') }}"></script>
 	<script src="{{ elixir('js/widgets.js') }}"></script>
 @endsection
diff --git a/routes/web.php b/routes/web.php
index 42174d2b71f1274e3a181221f229e3a69dd48eeb..2b11d23e6ab11ff651a10caa3c0827c293dd81dc 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -48,10 +48,11 @@ Route::group(
                 ->with('navbarFocus', 'kontakt');
         });
 
-        Route::get('kontakt', function () {
+        Route::get('kontakt/{url?}', function ($url = "") {
             return view('kontakt.kontakt')
                 ->with('title', trans('titles.kontakt'))
-                ->with('navbarFocus', 'kontakt');
+                ->with('navbarFocus', 'kontakt')
+                ->with('url', $url);
         });
 
         Route::post('kontakt', 'MailController@contactMail');
@@ -159,7 +160,7 @@ Route::group(
         });
         Route::get('languages', 'LanguageController@createOverview');
         Route::get('synoptic/{exclude?}', 'LanguageController@createSynopticEditPage');
-        Route::post('synoptic/{exclude?}', 'MailController@processSynopticPageInput');
+        Route::post('synoptic/{exclude?}', 'LanguageController@processSynopticPageInput');
         Route::get('languages/edit/{from}/{to}/{exclude?}/{email?}', 'LanguageController@createEditPage');
         Route::post('languages/edit/{from}/{to}/{exclude?}/{email?}', 'MailController@sendLanguageFile');
         Route::get('berlin', 'StartpageController@berlin');
diff --git a/storage/app/public/ads.txt b/storage/app/public/ads.txt
index 69c9c2c41ce7232cbdbc7f41114b74cc535f2dfa..d9eaa2ab438c0606fb5c545865a1bae952bed153 100644
--- a/storage/app/public/ads.txt
+++ b/storage/app/public/ads.txt
@@ -1,4 +1,10 @@
 [	
+	{
+		"title" : "Werbefreie Suche mit MetaGer:",
+		"summary" : "SUMA-EV-Mitglieder suchen werbefrei!",
+		"URL" : "http://suma-ev.de/presse/Werbefreie-Suche-mit-MetaGer.html"
+
+	},	
 	{
 		"title" : "MetaGer-Neuentwicklung: Die Suche in der Suche",
 		"summary" : "",
diff --git a/storage/app/public/tips.txt b/storage/app/public/tips.txt
index 9a4ea03ab56cd35b32c89381dbd623f33e2ae6e5..f07c536cb025955263e8b81c0b3fa447e943a491 100644
--- a/storage/app/public/tips.txt
+++ b/storage/app/public/tips.txt
@@ -1,4 +1,4 @@
-Mit dem kleinen schwarzen Dreieck rechts neben den Suchergebnis-Links können Sie Ihre Suche präzisieren: eine Suche <strong>nur</strong> auf dieser Domain starten, oder diese Domain mit einer neuen Suche <strong>ausschließen</strong>.
+Mit dem kleinen blauen Dreieck rechts neben den Suchergebnis-Links können Sie Ihre Suche präzisieren: eine Suche <strong>nur</strong> auf dieser Domain starten, oder diese Domain mit einer neuen Suche <strong>ausschließen</strong>.
 Wenn Sie eine bestimmte Wortfolge suchen, können Sie diese "Wörter in Anführungszeichen" einschließen. So stellen Sie sicher, dass diese Wörter in genau dieser Reihenfolge im Suchergebnis vorkommen.
 Sie können die Suche auf eine Website einschränken, indem sie den site-Parameter benutzen, z.B. "site:de.wikipedia.org" (für Treffer aus der deutschen Wikipedia) an die Suchwörter rechts anfügen.
 Sie können Suchbegriffe von der Suche ausschließen, indem Sie ihnen ein Minus voranstellen, z.B.: Sport -Fußball
diff --git a/synoptic b/synoptic
deleted file mode 100644
index fc24c0f08a5aa3888a7eef5685658a336557c2aa..0000000000000000000000000000000000000000
--- a/synoptic
+++ /dev/null
@@ -1,336 +0,0 @@
-
-
-
-<!DOCTYPE html>
-<html lang="de">
-	<head>
-		<meta charset="utf-8" />
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Sprachdateien bearbeiten - MetaGer</title>
-		<meta name="description" content="Sicher suchen und finden unter Wahrung der Privatsphäre. Das digitale Wissen der Welt muss ohne Bevormundung durch Staaten oder Konzerne frei zugänglich sein und bleiben." />
-		<meta name="keywords" content="Internetsuche, privatsphäre, privacy, Suchmaschine, Datenschutz, Anonproxy, anonym suchen, Bildersuche, Suchmaschine, anonym, MetaGer, metager, metager.de" />
-		<meta name="page-topic" content="Dienstleistung" />
-		<meta name="robots" content="index,follow" />
-		<meta name="revisit-after" content="7 days" />
-		<meta name="audience" content="all" />
-		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
-		<meta rel="icon" type="image/x-icon" href="/favicon.ico" />
-		<meta rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
-		<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE" />
-		<meta HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE" />
-		<link rel="search" type="application/opensearchdescription+xml" title="MetaGer: Sicher suchen &amp; finden, Privatsphäre schützen" href="http://localhost:8000/plugins/YTowOnt9/opensearch.xml">
-		<link type="text/css" rel="stylesheet" href="/css/themes/default.css" />
-		<link id="theme" type="text/css" rel="stylesheet" href="/css/theme.css.php" />
-			</head>
-	<body>
-		<header>
-				<a class="navbar-brand" href="http://localhost:8000/">
-		<div class="logo">
-			<h1>MetaGer</h1>
-		</div>
-	</a>
-		<nav id="navbar-static-pages" class="navbar-resultpage">
-
-
-			<ul id="metager-static-nav-list" class="list-inline pull-right">
-				<li id="toggle-nav-hide" class="hidden">
-					<a class="metager-navbar-toggle pull-right" href="#" data-original-title="" title="">
-									<span class="sr-only">Navigation anzeigen</span>
-									<i class="fa fa-bars" aria-hidden="true"></i>
-					</a>
-					<div class="clearfix"></div>
-				</li>
-				<li id="toggle-nav-show">
-					<a class="metager-navbar-toggle pull-right" href="#metager-static-nav-list" data-original-title="" title="">
-									<span class="sr-only">Navigation anzeigen</span>
-									<i class="fa fa-bars" aria-hidden="true"></i>
-					</a>
-					<div class="clearfix"></div>
-				</li>
-				<li  class="active"  >
-					<a href="http://localhost:8000/"  tabindex="200" id="navigationSuche">Suche</a>
-				</li>
-				<li  class="metager-dropdown"  >
-					<a class="metager-dropdown-toggle" role="button" aria-expanded="false" tabindex="201">Fördern
-								<span class="caret"></span></a>
-								<ul class="metager-dropdown-menu">
-									<li>
-										<a href="http://localhost:8000/spende" tabindex="202">Spenden</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/beitritt" tabindex="203">Beitrittsformular SUMA-EV</a>
-									</li>
-									<li>
-										<a href="https://www.boost-project.com/de/shops?charity_id=1129&amp;tag=bl" tabindex="204">Einkaufen bei MetaGer-Fördershops</a>
-									</li>
-								</ul>
-							</li>
-														<li id="gutscheine" class="metager-dropdown"  >
-								<a href="https://metager.de/gutscheine/">Gutscheine</a>
-								<a class="metager-dropdown-toggle" data-role="button" aria-expanded="false" tabindex="205"><span class="caret"></span></span>
-								<ul class="metager-dropdown-menu">
-									<li>
-										<a href="https://metager.de/gutscheine/congstar/" tabindex="206" >Congstar Gutschein</a>
-									</li>
-									<li>
-										<a href="https://metager.de/gutscheine/check24/" tabindex="207" >Check24 Gutschein</a>
-									</li>
-									<li>
-										<a href="https://metager.de/gutscheine/handyflash/" tabindex="208" >Handyflash Gutschein</a>
-									</li>
-									<li>
-										<a href="https://metager.de/gutscheine/groupon/" tabindex="209" >Groupon Gutschein</a>
-									</li>
-									<li>
-										<a href="https://metager.de/gutscheine/medion/" tabindex="210" >Medion Gutschein</a>
-									</li>
-									<li>
-										<a href="https://metager.de/gutscheine/navabi/" tabindex="211" >Navabi Gutschein</a>
-									</li>
-									<li>
-										<a href="https://metager.de/gutscheine/netcologne/" tabindex="212" >Netcologne Gutschein</a>
-									</li>
-									<li>
-										<a href="https://metager.de/gutscheine/teufel/" tabindex="213" >Teufel Gutschein</a>
-									</li>
-									<li role="separator" class="divider"></li>
-									<li>
-										<a href="https://metager.de/gutscheine/alle-gutscheine/" tabindex="214" >Alle Gutscheine</a>
-									</li>
-								</ul>
-							</li>
-														<li  >
-								<a href="http://localhost:8000/datenschutz" id="navigationPrivacy" tabindex="215">Datenschutz</a>
-							</li>
-							<li  class="metager-dropdown"  >
-								<a class="metager-dropdown-toggle" role="button" aria-haspopup="true" aria-expanded="false" id="navigationHilfe" tabindex="216">Hilfe
-								<span class="caret"></span></a>
-								<ul class="metager-dropdown-menu">
-									<li>
-										<a href="http://localhost:8000/hilfe" tabindex="217">Hilfe</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/faq" tabindex="218">FAQ</a>
-									</li>
-								</ul>
-							</li>
-							<li  class="metager-dropdown"  >
-								<a class="metager-dropdown-toggle" role="button" aria-haspopup="true" aria-expanded="false" id="navigationKontakt" tabindex="219">Kontakt
-								<span class="caret"></span></a>
-								<ul class="metager-dropdown-menu">
-									<li>
-										<a href="http://forum.suma-ev.de/" tabindex="220">Forum</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/kontakt" tabindex="221">Kontakt</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/team" tabindex="222">Team</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/about" tabindex="223">Ãœber uns</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/impressum" tabindex="224">Impressum</a>
-									</li>
-								</ul>
-							</li>
-							<li  class="metager-dropdown"  >
-								<a class="metager-dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" tabindex="225">Dienste
-								<span class="caret"></span></a>
-								<ul class="metager-dropdown-menu">
-									<li>
-										<a href="http://localhost:8000/widget" tabindex="226">Widget</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/zitat-suche" tabindex="227">Zitatsuche</a>
-									</li>
-									<li>
-										<a href="https://metager.de/klassik/asso/" tabindex="228">Assoziator</a>
-									</li>
-									<li>
-										<a href="http://code.metager.de/" tabindex="229">Code-Suche</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/app" tabindex="230">MetaGer App</a>
-									</li>
-									<li>
-										<a href="https://metager.to/" tabindex="231">URL-Verkürzer</a>
-									</li>
-									<li>
-										<a href="https://maps.metager.de" target="_blank" tabindex="232">Maps.MetaGer.de</a>
-									</li>
-									<li>
-										<a href="https://gitlab.metager3.de/open-source/MetaGer" tabindex="233">MetaGer Quellcode</a>
-									</li>
-									<li>
-										<a href="http://forum.suma-ev.de/viewtopic.php?f=3&amp;t=43" tabindex="234">TOR-Hidden-Service</a>
-									</li>
-								</ul>
-							</li>
-							<li class="metager-dropdown">
-								<a class="metager-dropdown-toggle" role="button" aria-haspopup="true" aria-expanded="false" id="navigationSprache" tabindex="235">Sprache (Deutsch)
-								<span class="caret"></span></a>
-								<ul class="metager-dropdown-menu">
-																			<li>
-											<a rel="alternate" hreflang="de" href="http://localhost:8000/synoptic" tabindex="235">Deutsch</a>
-										</li>
-																			<li>
-											<a rel="alternate" hreflang="en" href="http://localhost:8000/en/synoptic" tabindex="236">English</a>
-										</li>
-																			<li>
-											<a rel="alternate" hreflang="es" href="http://localhost:8000/es/synoptic" tabindex="237">español</a>
-										</li>
-																			<li>
-											<a rel="alternate" hreflang="fr" href="http://localhost:8000/fr/synoptic" tabindex="238">français</a>
-										</li>
-																	</ul>
-							</li>
-			</ul>
-		</nav>
-
-		</header>
-		<div class="wrapper">
-			<main class="mg-panel container">
-																					<h1>Ãœbersicht</h1>
-	<h2>results.php</h2>
-	<form id="submit" method="POST">
-		<input type="hidden" name="filename" value="results.php" />
-	</form>
-	<table class="table">
-		<thead>
-			<tr>
-				<th>#ID</th>
-									<th>de</th>
-									<th>en</th>
-									<th>es</th>
-									<th>fr</th>
-									<th>nd</th>
-								
-			</tr>
-		</thead>
- <tbody> 
-							<tr> <!--Key -->
-				<td class="name language-name">redirect</td>
-															<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZGVfcmVkaXJlY3Q=">(mit redirect) </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZW5fcmVkaXJlY3Q=">(with redirect) </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZXNfcmVkaXJlY3Q=">(con desviar) </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19mcl9yZWRpcmVjdA=="></textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19uZF9yZWRpcmVjdA=="></textarea>
-						</td>
-													</tr>
-							<tr> <!--Key -->
-				<td class="name language-name">weiter</td>
-															<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZGVfd2VpdGVy">Weitersuchen </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZW5fd2VpdGVy">more </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZXNfd2VpdGVy">Continuar </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19mcl93ZWl0ZXI="></textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19uZF93ZWl0ZXI="></textarea>
-						</td>
-													</tr>
-							<tr> <!--Key -->
-				<td class="name language-name">zurueck</td>
-															<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZGVfenVydWVjaw==">Zurück </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZW5fenVydWVjaw==">back </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZXNfenVydWVjaw==">Atrás </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19mcl96dXJ1ZWNr"></textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19uZF96dXJ1ZWNr"></textarea>
-						</td>
-													</tr>
-							<tr> <!--Key -->
-				<td class="name language-name">filter</td>
-															<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZGVfZmlsdGVy">Die Suchergebnisse wurden gefiltert: &lt;strong&gt;[:filter]&lt;/strong&gt;. &lt;a href=&quot;:link&quot; target=&quot;_blank&quot;&gt;Filter abschalten.&lt;/a&gt; </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZW5fZmlsdGVy">Results are filtered by language: &lt;strong&gt;[:filter]&lt;/strong&gt;. &lt;a href=&quot;:link&quot; target=&quot;_blank&quot;&gt;Disable this filter.&lt;/a&gt; </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZXNfZmlsdGVy">Resultados filtraban:  &lt;strong&gt;[:filter]&lt;/strong&gt;. &lt;a href=&quot;:link&quot; target=&quot;_blank&quot;&gt;Desactivar filtro.&lt;/a&gt; </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19mcl9maWx0ZXI="></textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19uZF9maWx0ZXI="></textarea>
-						</td>
-													</tr>
-							<tr> <!--Key -->
-				<td class="name language-name">filter.default</td>
-															<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZGVfZmlsdGVyLmRlZmF1bHQ=">Sie erhalten die Benutzeroberfläche in &lt;strong&gt;:langName&lt;/strong&gt;, aber Ergebnisse in &lt;strong&gt;ALLEN&lt;/strong&gt; Sprachen. Für ausschließlich deutschsprachige Ergebnisse können Sie unter &lt;a href=&quot;/settings&quot; target=&quot;_blank&quot;&gt;anpassen&lt;/a&gt; die &quot;Sprache auswählen&quot;. </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZW5fZmlsdGVyLmRlZmF1bHQ=">The interface language is set to &lt;strong&gt;:langName&lt;/strong&gt; but you will receive results in &lt;strong&gt;ALL&lt;/strong&gt; languages. If you want to restrict the results to a specific language, please click  &lt;a href=&quot;/en/settings&quot; target=&quot;_blank&quot;&gt;customize&lt;/a&gt; and choose your desired language there. </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZXNfZmlsdGVyLmRlZmF1bHQ=">Recibís el interfaz del usuario en &lt;strong&gt;:langName&lt;/strong&gt;, pero resultados en &lt;strong&gt;TODOS&lt;/strong&gt; idiomas. Usan  &lt;a href=&quot;/settings&quot; target=&quot;_blank&quot;&gt;adjustar&lt;/a&gt; para seleccionar una idioma para los resultados. </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19mcl9maWx0ZXIuZGVmYXVsdA=="></textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19uZF9maWx0ZXIuZGVmYXVsdA=="></textarea>
-						</td>
-													</tr>
-					</tbody>  
-
-	</table>
-<!--
-	<p>Sobald du mit deinen Texten zufrieden bist, kannst du uns diese mit einem Klick auf folgenden Knopf automatisch zusenden. Wenn es mehr fehlende Texte in der angegebenen Sprache gibt, wird dein Browser dich danach direkt zu diesen leiten.</p>
-	<p><b>Hinweis</b>: Die übermittelten Texte werden von diesem Tool erst erkannt, sobald diese von uns gesichtet und eingefügt wurden. Wenn du deine Arbeit sichern möchtest um diese zu einem späteren Zeitpunkt fortzusetzen (auch wenn wir deine bisherige Arbeit noch nicht übernehmen konnten), so reicht es vollkommen, den aktuellen Link aus deiner Browserleiste zu kopieren und zu einem späteren Zeitpunkt wieder aufzurufen.</p>
-	<p><b>Achtung</b>: Mit der Einsendung stimmst du einer <a href="https://gitlab.metager3.de/open-source/MetaGer" target="_blank" rel="noopener">Veröffentlichung</a> deiner Texte unter AGPL-v3-Lizenz durch uns zu. Falls du namentlich genannt werden möchtest, teile uns dies bitte in einer email an <a href="mailto:office@suma-ev.de">office@suma-ev.de</a> mit.</p>
-	<p><b>E-Mail-Adresse für Rückfragen</b> (optional):</p>
--->
-	<button class="btn btn-success" type="submit" form="submit">Dateien herunterladen</button>
-	<button class="btn btn-success" type="submit" form="submit">Nächste Seite</button>
-	<script type="text/javascript" src="/js/lib.js"></script>
-	<script type="text/javascript" src="/build/js/editLanguage-7a1cbfb2ba.js"></script>
-			</main>
-						<footer class="noprint">
-				<ul class="list-inline hidden-xs">
-					<li>
-						<a href="https://www.suma-ev.de/"  >
-						<img src="/img/suma_ev_logo-m1-greyscale.png" alt="SUMA-EV Logo"></a>
-					</li>
-					<li id="info">
-						<a href="http://localhost:8000/kontakt">Kontakt</a> - <a href="http://localhost:8000/impressum">Impressum</a>
-						MetaGer wird entwickelt und betrieben vom <a href="https://www.suma-ev.de/">SUMA-EV - Verein für freien Wissenszugang.</a>
-					</li>
-					<li>
-						<a href="https://www.uni-hannover.de/"  >
-						<img src="/img/luh_metager.png" alt="LUH Logo"></a>
-					</li>
-				</ul>
-			</footer>
-			<img src="http://localhost:8000/img/piwik.png?site=http%3A%2F%2Flocalhost%3A8000%2Fsynoptic" class="hidden" />
-		</div>
-	</body>
-</html>