diff --git a/build/nginx/configuration/nginx-default-dev.conf b/build/nginx/configuration/nginx-default-dev.conf
index 47321790a5b85e48a25f3ca00e7e9a2df6b2114f..603447d2ab1976675d797c0229b945b3f5401875 100644
--- a/build/nginx/configuration/nginx-default-dev.conf
+++ b/build/nginx/configuration/nginx-default-dev.conf
@@ -29,7 +29,7 @@ server {
 
     location / {
         try_files $uri $uri/ /index.php?$query_string;
-        add_header "Content-Security-Policy" $csp;
+        #add_header "Content-Security-Policy" $csp;
     }
 
     location ~ \.php$ {
@@ -43,7 +43,7 @@ server {
         fastcgi_read_timeout 900;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
-        add_header "Content-Security-Policy" $csp;
+        #add_header "Content-Security-Policy" $csp;
     }
 
     #error_page  404              /404.html;
diff --git a/metager/app/Http/Controllers/SettingsController.php b/metager/app/Http/Controllers/SettingsController.php
index ca0ed7ebefa0e3e36bd9075953d4a20831a2f5e6..979879cf6e5806de8858490268c4093ca8c4764d 100644
--- a/metager/app/Http/Controllers/SettingsController.php
+++ b/metager/app/Http/Controllers/SettingsController.php
@@ -45,7 +45,7 @@ class SettingsController extends Controller
         $cookies = Cookie::get();
         $settingActive = false;
         foreach ($cookies as $key => $value) {
-            if (stripos($key, $fokus . "_engine_") === 0 || stripos($key, $fokus . "_setting_") === 0 || strpos($key, $fokus . '_blpage') === 0 || $key === 'dark_mode' || $key === 'new_tab' || $key === 'key' || $key === 'zitate') {
+            if (stripos($key, $fokus . "_engine_") === 0 || stripos($key, $fokus . "_setting_") === 0 || strpos($key, $fokus . '_blpage') === 0 || $key === 'dark_mode' || $key === 'new_tab' || $key === 'zitate' || $key === 'suggestions') {
                 $settingActive = true;
             }
         }
@@ -251,6 +251,15 @@ class SettingsController extends Controller
         $secure = app()->environment("local") ? false : true;
         // Currently only the setting for quotes is supported
 
+        $suggestions = $request->input('sg', '');
+        if (!empty($suggestions)) {
+            if ($suggestions === "off") {
+                Cookie::queue(Cookie::forever('suggestions', 'off', '/', null, $secure, true));
+            } elseif ($suggestions === "on") {
+                Cookie::queue(Cookie::forget("suggestions", "/"));
+            }
+        }
+
         $quotes = $request->input('zitate', '');
         if (!empty($quotes)) {
             if ($quotes === "off") {
@@ -296,16 +305,13 @@ class SettingsController extends Controller
             if (stripos($key, $fokus . "_engine_") === 0 || stripos($key, $fokus . "_setting_") === 0) {
                 Cookie::queue(Cookie::forget($key, "/"));
             }
-            if ($key === 'dark_mode') {
-                Cookie::queue(Cookie::forget($key, "/"));
-            }
-            if ($key === 'new_tab') {
-                Cookie::queue(Cookie::forget($key, "/"));
-            }
-            if ($key === 'key') {
-                Cookie::queue(Cookie::forget($key, "/"));
-            }
-            if ($key === 'zitate') {
+            $global_settings = [
+                "dark_mode",
+                "new_tab",
+                "zitate",
+                "suggestions"
+            ];
+            if (in_array($key, $global_settings)) {
                 Cookie::queue(Cookie::forget($key, "/"));
             }
         }
@@ -446,8 +452,6 @@ class SettingsController extends Controller
         $langFile = MetaGer::getLanguageFile();
         $langFile = json_decode(file_get_contents($langFile));
 
-        $regexUrl = '#^(\*\.)?[a-z0-9]+(\.[a-z0-9]+)?(\.[a-z0-9]{2,})$#';
-
         $settings = $request->query();
         $secure = app()->environment("local") ? false : true;
         foreach ($settings as $key => $value) {
@@ -461,7 +465,7 @@ class SettingsController extends Controller
                 Cookie::queue(Cookie::forever($key, 'off', '/', null, $secure, true));
             } else {
                 foreach ($langFile->foki as $fokus => $fokusInfo) {
-                    if (strpos($key, $fokus . '_blpage') === 0 && preg_match($regexUrl, $value) === 1) {
+                    if (strpos($key, $fokus . '_blpage') === 0) {
                         Cookie::queue(Cookie::forever($key, $value, "/", null, $secure, true));
                     } elseif (strpos($key, $fokus . '_setting_') === 0) {
                         foreach ($langFile->filter->{'parameter-filter'} as $parameter) {
diff --git a/metager/app/Http/Controllers/SuggestionController.php b/metager/app/Http/Controllers/SuggestionController.php
new file mode 100644
index 0000000000000000000000000000000000000000..d7e8c901a90642208a1f3807992a3c97d7728f89
--- /dev/null
+++ b/metager/app/Http/Controllers/SuggestionController.php
@@ -0,0 +1,159 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Localization;
+use App\Models\Authorization\Authorization;
+use App\Models\Result;
+use App\SearchSettings;
+use Cache;
+use Crypt;
+use Exception;
+use Illuminate\Http\Request;
+
+class SuggestionController extends Controller
+{
+    const CACHE_DURATION_HOURS = 6;
+    private $markets = [
+        "us" => "us(en)",
+        "ch" => "ch(de)",
+    ];
+    public function partner(Request $request)
+    {
+        if (!$this->verifySignature($request) || 1 == 1) {
+            abort(401);
+        }
+        $query = $request->input("query");
+        if (empty($query)) {
+            abort(404);
+        }
+
+        // Disable Partnershops for authorized searches
+        if (app(Authorization::class)->canDoAuthenticatedSearch()) {
+            return response()->json([], 200, ["Cache-Control" => "no-cache, private"]);
+        }
+
+        $region = strtolower(Localization::getRegion());
+        if (array_key_exists($region, $this->markets)) {
+            $region = $this->markets[$region];
+        }
+        $public_key = config("metager.metager.admitad.suggest_public_key");
+
+        $request_data = [
+            "keywords" => [
+                $query
+            ],
+            "market" => $region,
+            "provider" => "bing-search"
+        ];
+
+        $cache_key = md5(json_encode($request_data));
+        $response = Cache::get($cache_key);
+        if ($response === null) {
+            $context = stream_context_create([
+                "http" => [
+                    "method" => "POST",
+                    "header" => [
+                        "Content-Type: application/json",
+                        "Authorization: Bearer $public_key"
+                    ],
+                    "user_agent" => "MetaGer",
+                    "timeout" => 2.0,
+                    "content" => json_encode($request_data),
+                    "ignore_errors" => true
+                ]
+            ]);
+            $response = file_get_contents("https://apisuggests.com/api/v1/resolve", false, $context);
+            $response = json_decode($response, true);
+            if (array_key_exists("resolutions", $response) && is_array($response["resolutions"])) {
+                Cache::put($cache_key, $response, now()->addHours(self::CACHE_DURATION_HOURS));
+            }
+        }
+        if (array_key_exists("resolutions", $response) && is_array($response["resolutions"])) {
+            $result = [];
+            for ($i = 0; $i < sizeof($response["resolutions"]); $i++) {
+                if ($response["resolutions"][$i]["data"] === null) {
+                    continue;
+                }
+                $response["resolutions"][$i]["data"]["imageUrl"] = Pictureproxy::generateUrl($response["resolutions"][$i]["data"]["imageUrl"]);
+                $result[] = $response["resolutions"][$i];
+            }
+            return response()->json($result, 200, ["Cache-Control" => "max-age=7200"]);
+        } else {
+            return response()->json([], 200, ["Cache-Control" => "no-cache, private"]);
+        }
+    }
+
+    public function suggest(Request $request)
+    {
+        if (!$this->verifySignature($request) || 1 == 1) {
+            abort(401);
+        }
+        $query = $request->input("query");
+        if (empty($query)) {
+            abort(404);
+        }
+
+        // Do not generate Suggestions if User turned them off
+        $settings = app(SearchSettings::class);
+        if ($settings->suggestions === "off") {
+            return response()->json([], 200, ["Cache-Control" => "no-cache, private"]);
+        }
+        $suggestion_provider = $settings->suggestions;
+        $region = strtolower(Localization::getRegion());
+        if (array_key_exists($region, $this->markets)) {
+            $region = $this->markets[$region];
+        }
+        $public_key = config("metager.metager.admitad.suggest_public_key");
+
+        $request_data = [
+            "query" => $query,
+            "market" => $region,
+            "provider" => $suggestion_provider . "-suggest"
+        ];
+
+        $cache_key = md5(json_encode($request_data));
+        $response = Cache::get($cache_key);
+        if ($response === null) {
+            $context = stream_context_create([
+                "http" => [
+                    "method" => "GET",
+                    "header" => [
+                        "Content-Type: application/json",
+                        "Authorization: Bearer $public_key"
+                    ],
+                    "user_agent" => "MetaGer",
+                    "timeout" => 2.0,
+                    "content" => null,
+                    "ignore_errors" => true
+                ]
+            ]);
+            $url = "https://apisuggests.com/api/v1/suggest?" . http_build_query($request_data);
+            $response = file_get_contents($url, false, $context);
+            $response = json_decode($response, true);
+            if (array_key_exists("suggestions", $response) && is_array($response["suggestions"]) && array_key_exists("items", $response["suggestions"]) && is_array($response["suggestions"]["items"])) {
+                Cache::put($cache_key, $response, now()->addHours(self::CACHE_DURATION_HOURS));
+            }
+        }
+        if (array_key_exists("suggestions", $response) && is_array($response["suggestions"]) && array_key_exists("items", $response["suggestions"]) && is_array($response["suggestions"]["items"])) {
+            return response()->json($response["suggestions"]["items"], 200, ["Cache-Control" => "max-age=7200"]);
+        } else {
+            return response()->json([], 200, ["Cache-Control" => "no-cache, private"]);
+        }
+    }
+
+    private function verifySignature(Request $request): bool
+    {
+        $key = $request->header("MetaGer-Key", "");
+        try {
+            $expiration = Crypt::decrypt($key);
+            if (now()->isAfter($expiration)) {
+                return false;
+            } else {
+                return true;
+            }
+        } catch (Exception $e) {
+            return false;
+        }
+    }
+}
\ No newline at end of file
diff --git a/metager/app/SearchSettings.php b/metager/app/SearchSettings.php
index dc29d5888cbf4093838de40affcac30adf08a403..5880f6883affbc2de00bdb73aba4a607856c5aa5 100644
--- a/metager/app/SearchSettings.php
+++ b/metager/app/SearchSettings.php
@@ -23,6 +23,8 @@ class SearchSettings
     public $sumasJson;
     public $quicktips = true;
     public $enableQuotes = true;
+    /** @var string */
+    public $suggestions = "bing";
 
     public function __construct()
     {
@@ -45,6 +47,11 @@ class SearchSettings
             $this->enableQuotes = false;
         }
 
+        $suggestions = Cookie::get("suggestions", "bing");
+        if ($suggestions === "off") {
+            $this->suggestions = "off";
+        }
+
         if (Request::filled('quicktips')) {
             $this->quicktips = false;
         }
diff --git a/metager/config/metager/metager.php b/metager/config/metager/metager.php
index 1a3e818df8f3e14c113adcf63497b77e3b8ffe1c..c0a31160447a1be7051f3a03e9b8b94ce7a6b89f 100644
--- a/metager/config/metager/metager.php
+++ b/metager/config/metager/metager.php
@@ -51,7 +51,8 @@ return [
     ],
     "admitad" => [
         "germany_public_key" => env("admitad_germany_public", ""),
-        "international_public_key" => env("admitad_international_public", "")
+        "international_public_key" => env("admitad_international_public", ""),
+        "suggest_public_key" => env("admitad_suggest_public", "")
     ],
     "webdriver" => [
         "user" => env("WEBDRIVER_USER", ""),
diff --git a/metager/lang/da/adblocker.php b/metager/lang/da/adblocker.php
new file mode 100644
index 0000000000000000000000000000000000000000..93edd1c478c30d8f3f2d2d33d02b6386dd8e9df8
--- /dev/null
+++ b/metager/lang/da/adblocker.php
@@ -0,0 +1,10 @@
+<?php
+return [
+    'heading' => "Annonceblokering på MetaGer",
+    'free' => "MetaGer er gratis at bruge, men det er det ikke at vedligeholde den. Vi har altid finansieret vores service gennem ikke-personliggjort reklame. En ny tilføjelse er den valgfri reklamefri søgning ved hjælp af en <a href=\":keylink\">MetaGer-nøgle</a>. Vores reklamer består både af traditionelle søgereklamer og affiliate-links i søgeresultaterne. Med disse indtægter kan vi betale vores personale, serveromkostningerne og selvfølgelig de søgetjenester, vi bruger som kilder.",
+    'adblocker' => "I nogle tilfælde bliver disse affiliate-links fejlagtigt skjult af adblockere. Hvis du er berørt, og du ønsker, at søgeresultaterne skal vises fuldt ud, har du følgende muligheder:",
+    'options' => [
+        'disable' => "Deaktiver din annonceblokering for MetaGer. Søgeresultater med affiliate-links er så ikke længere skjult.",
+        'key' => "Brug vores <a href=\":keylink\">annoncefri søgning</a>. Dine søgeresultater vil så ikke længere indeholde affiliate-links.",
+    ],
+];
diff --git a/metager/lang/da/result.php b/metager/lang/da/result.php
index c517a7c5709ba8f90ba2bb9244a17f2a7ba2c50e..24b44d6d1d00edbb8a8556e127bfe24f401837da 100644
--- a/metager/lang/da/result.php
+++ b/metager/lang/da/result.php
@@ -20,4 +20,5 @@ return [
     'metagerkeytext' => 'Brug MetaGer uden reklamer',
     'news' => 'Relevante nyheder',
     'videos' => 'Videoer',
+    'adblocker' => 'Et <a href=":resultlink">søgeresultat</a> fra <code>:host</code> blev fjernet her af din ad blocker. <a href=":infolink">Læs mere</a>',
 ];
diff --git a/metager/lang/da/titles.php b/metager/lang/da/titles.php
index ed1eff2b8d3dfaeb2d519dadf54639c7d92eec96..a06188d3f43a99ddcadd4f2d48e42ac5da6cd982 100644
--- a/metager/lang/da/titles.php
+++ b/metager/lang/da/titles.php
@@ -32,4 +32,5 @@ return [
     'assosearch' => 'Associationer for ":q" - MetaGer',
     'prevention' => 'Hjælp til selvmordstanker - MetaGer',
     'membership' => 'Dit medlemskab af SUMA-EV',
+    'adblocker' => 'Adblockere - MetaGer',
 ];
diff --git a/metager/lang/de/404.php b/metager/lang/de/404.php
index c971c07380b90c27832309e8fcdf57b66af7dbde..55a6da1f893c77efccfe71f80fe2412d94f79ade 100644
--- a/metager/lang/de/404.php
+++ b/metager/lang/de/404.php
@@ -1,6 +1,5 @@
 <?php
-
 return [
     'title' => 'Fehler 404, Seite nicht gefunden',
-    'text'  => 'Möglicherweise haben Sie einen falschen oder veralteten Link eingegeben.',
+    'text' => 'Möglicherweise haben Sie einen falschen oder veralteten Link eingegeben.',
 ];
diff --git a/metager/lang/de/settings.php b/metager/lang/de/settings.php
index c4180882633bf924c6ffaefec4b650d01fe97b8c..0acffad5e6b64d9475d66c35f895e6bcd7042518 100644
--- a/metager/lang/de/settings.php
+++ b/metager/lang/de/settings.php
@@ -31,6 +31,11 @@ return [
     'copy' => 'Kopieren',
     'dark' => 'Dunkel',
     'darkmode' => 'Dunklen Modus umschalten',
+    'suggestions' => [
+        "label" => 'Suchvorschläge',
+        "off" => "Aus",
+        "on" => "An"
+    ],
     'disabledByFilter' => 'Durch Suchfilter deaktiviert:',
     'disabledBecausePaymentRequired' => "Folgende Suchmaschinen können Sie mit einem <a href=\":link\" target=\"_blank\">MetaGer Schlüssel</a> nutzen.",
     'no-engines' => "Mit den aktuellen Sucheinstellungen wird keine Suchmaschine abgefragt.",
@@ -76,4 +81,4 @@ return [
         'heading' => 'Nutzung eines externen Suchdienstes',
         'description' => 'Sie können konfigurieren, dass eine der folgenden externen Suchmaschinen anstelle unserer integrierten Lösung verwendet wird. Wir leiten Ihre Suchanfragen an den konfigurierten Anbieter weiter.',
     ],
-];
+];
\ No newline at end of file
diff --git a/metager/lang/en/result.php b/metager/lang/en/result.php
index 9b9e55025a5e777cc58ba1d1c8fd369a82ad33ad..619ca34da771291f985fe36eecd95c356693de2b 100644
--- a/metager/lang/en/result.php
+++ b/metager/lang/en/result.php
@@ -20,4 +20,5 @@ return [
     'metagerkeytext' => 'Use MetaGer ad-free',
     'news' => 'Relevant news',
     'videos' => 'Videos',
+    'adblocker' => 'A <a href=":resultlink">search result</a> from <code>:host</code> was removed here by your ad blocker. <a href=":infolink">Learn more</a>'
 ];
\ No newline at end of file
diff --git a/metager/lang/en/results.php b/metager/lang/en/results.php
index 2746ef5a001fcd561cfc60f9b9d0114e3b981a43..10e00dbe0d00a881caec02e834467d0d1bd5efe8 100644
--- a/metager/lang/en/results.php
+++ b/metager/lang/en/results.php
@@ -20,5 +20,4 @@ return [
             "save" => "Remember decision (with cookie)"
         ]
     ],
-    'adblocker' => 'Ein <a href=":resultlink">Suchergebnis</a> von <code>:host</code> wurde hier durch Ihren Werbeblocker entfernt. <a href=":infolink">Mehr erfahren</a>'
 ];
\ No newline at end of file
diff --git a/metager/lang/en/settings.php b/metager/lang/en/settings.php
index 147657da7175df046bcff3fba1b55cdbd6f28ef2..e0610094628b7adb56e7332fb92aa471e2669b7a 100644
--- a/metager/lang/en/settings.php
+++ b/metager/lang/en/settings.php
@@ -26,6 +26,11 @@ return [
     'clear' => 'Clear black list',
     'copy' => 'Copy',
     'darkmode' => 'Toggle dark mode',
+    'suggestions' => [
+        "label" => 'Search suggestions',
+        "off" => "Disabled",
+        "on" => "Enabled"
+    ],
     'system' => 'System Default',
     'dark' => 'Dark',
     'light' => 'Light',
diff --git a/metager/lang/es/adblocker.php b/metager/lang/es/adblocker.php
new file mode 100644
index 0000000000000000000000000000000000000000..9fa917268fe58833cf3c95713542f3b0358fd1bc
--- /dev/null
+++ b/metager/lang/es/adblocker.php
@@ -0,0 +1,10 @@
+<?php
+return [
+    'heading' => "Bloqueador de anuncios en MetaGer",
+    'free' => "El uso de MetaGer es gratuito, pero su mantenimiento no. Siempre hemos financiado nuestro servicio mediante publicidad no personalizada. Una novedad es la búsqueda opcional sin publicidad mediante una clave de MetaGer <a href=\":keylink\"></a> . Nuestra publicidad consiste tanto en publicidad tradicional de búsqueda como en enlaces de afiliación en los resultados de búsqueda. Con estos ingresos podemos pagar a nuestro personal, los costes del servidor y, por supuesto, los servicios de búsqueda que utilizamos como fuentes.",
+    'adblocker' => "En algunos casos, los bloqueadores de anuncios ocultan falsamente estos enlaces de afiliados. Si te ves afectado y quieres que los resultados de búsqueda se muestren completos, tienes las siguientes opciones:",
+    'options' => [
+        'disable' => "Desactiva tu bloqueador de anuncios para MetaGer. Los resultados de búsqueda con enlaces de afiliados ya no estarán ocultos.",
+        'key' => "Utilice nuestra búsqueda sin anuncios <a href=\":keylink\"></a> . Los resultados de su búsqueda ya no contendrán enlaces de afiliados.",
+    ],
+];
diff --git a/metager/lang/es/result.php b/metager/lang/es/result.php
index 92239ef3f3780c5bb0d7c8607c282923b6672836..045859ca9fca21f3b22ac4f63ff88c435136ff3b 100644
--- a/metager/lang/es/result.php
+++ b/metager/lang/es/result.php
@@ -20,4 +20,5 @@ return [
     'metagerkeytext' => 'Utiliza MetaGer sin publicidad',
     'news' => 'Noticias de interés',
     'videos' => 'Vídeos',
-];
\ No newline at end of file
+    'adblocker' => 'Un <a href=":resultlink">resultado de búsqueda</a> de <code>:host</code> fue eliminado aquí por su bloqueador de anuncios. <a href=":infolink">Más información</a>',
+];
diff --git a/metager/lang/es/titles.php b/metager/lang/es/titles.php
index 086dbaa0312cdd023d0f0c030e48274415210c29..c209784f3665e9d8dbcdb969b5d03b132984d560 100644
--- a/metager/lang/es/titles.php
+++ b/metager/lang/es/titles.php
@@ -32,4 +32,5 @@ return [
     'assosearch' => 'Asociaciones para ":q" - MetaGer',
     'prevention' => 'Ayuda con los pensamientos suicidas - MetaGer',
     'membership' => 'Su afiliación a SUMA-EV',
-];
\ No newline at end of file
+    'adblocker' => 'Adblockers - MetaGer',
+];
diff --git a/metager/lang/fi/adblocker.php b/metager/lang/fi/adblocker.php
new file mode 100644
index 0000000000000000000000000000000000000000..336619b8dbbee4c8a7a960e8c432b686fdc87b8f
--- /dev/null
+++ b/metager/lang/fi/adblocker.php
@@ -0,0 +1,10 @@
+<?php
+return [
+    'heading' => "Mainosten esto MetaGerissä",
+    'free' => "MetaGerin käyttö on ilmaista, mutta sen ylläpitäminen ei ole. Olemme aina rahoittaneet palvelumme ei-henkilökohtaisella mainonnalla. Uutena lisäyksenä on valinnainen mainokseton haku <a href=\":keylink\">MetaGer-avaimella</a>. Mainontamme koostuu sekä perinteisestä hakumainonnasta että hakutuloksissa olevista affiliate-linkkeistä. Näillä tuloilla pystymme maksamaan henkilökuntamme, palvelinkustannukset ja tietysti käyttämämme hakupalvelut.",
+    'adblocker' => "Joissain tapauksissa mainosten estojärjestelmät piilottavat nämä affiliate-linkit virheellisesti. Jos tämä vaikuttaa sinuun ja haluat, että hakutulokset näytetään kokonaisuudessaan, sinulla on seuraavat vaihtoehdot:",
+    'options' => [
+        'disable' => "Poista MetaGerin mainosten esto käytöstä. Silloin affiliate-linkkejä sisältävät hakutulokset eivät enää ole piilossa.",
+        'key' => "Käytä <a href=\":keylink\">mainoksetonta hakua</a>. Hakutuloksesi eivät enää sisällä affiliate-linkkejä.",
+    ],
+];
diff --git a/metager/lang/fi/result.php b/metager/lang/fi/result.php
index 5636b8b6c187d78f0ce4b2c739e72ea178b36175..0f344cc18cc47f1ba666b28c69b7d6e67862dbf4 100644
--- a/metager/lang/fi/result.php
+++ b/metager/lang/fi/result.php
@@ -20,4 +20,5 @@ return [
     'metagerkeytext' => 'Käytä MetaGeria mainosvapaasti',
     'news' => 'Asiaankuuluvat uutiset',
     'videos' => 'Videot',
+    'adblocker' => 'Mainostenestimesi poisti täältä <a href=":resultlink">hakutuloksen</a> osoitteesta <code>:host</code>. <a href=":infolink">Lue lisää</a>',
 ];
diff --git a/metager/lang/fi/titles.php b/metager/lang/fi/titles.php
index ea52dadbf285c214516895494f2d5a41ab8e4f79..95efd7de577e8f06baba94fa52becacc9d99c13a 100644
--- a/metager/lang/fi/titles.php
+++ b/metager/lang/fi/titles.php
@@ -32,4 +32,5 @@ return [
     'assosearch' => 'Assosiaatioita sanalle ":q" - MetaGer',
     'prevention' => 'Apua itsemurha-ajatuksiin - MetaGer',
     'membership' => 'Jäsenyytesi SUMA-EV:ssä',
+    'adblocker' => 'Mainostenestimet - MetaGer',
 ];
diff --git a/metager/lang/fr/adblocker.php b/metager/lang/fr/adblocker.php
new file mode 100644
index 0000000000000000000000000000000000000000..c3fc21e54ccb3991e7d41bd3bd2fd6daa5b31b4b
--- /dev/null
+++ b/metager/lang/fr/adblocker.php
@@ -0,0 +1,10 @@
+<?php
+return [
+    'heading' => "Bloqueur de publicité sur MetaGer",
+    'free' => "L'utilisation de MetaGer est gratuite, mais son entretien ne l'est pas. Nous avons toujours financé notre service par de la publicité non personnalisée. Un nouvel ajout est la recherche optionnelle sans publicité en utilisant une clé <a href=\":keylink\">MetaGer</a>. Notre publicité consiste à la fois en de la publicité traditionnelle et en des liens d'affiliation dans les résultats de recherche. Ces revenus nous permettent de payer notre personnel, les coûts du serveur et, bien sûr, les services de recherche que nous utilisons comme sources.",
+    'adblocker' => "Dans certains cas, ces liens d'affiliation sont faussement masqués par les bloqueurs de publicité. Si vous êtes concerné et que vous souhaitez que les résultats de la recherche s'affichent dans leur intégralité, vous disposez des options suivantes :",
+    'options' => [
+        'disable' => "Désactivez votre bloqueur de publicité pour MetaGer. Les résultats de recherche contenant des liens d'affiliation ne sont alors plus cachés.",
+        'key' => "Utilisez notre moteur de recherche <a href=\":keylink\">sans publicité</a>. Les résultats de votre recherche ne contiendront alors plus de liens d'affiliation.",
+    ],
+];
diff --git a/metager/lang/fr/result.php b/metager/lang/fr/result.php
index d4489ac9653c0f5bfa970767317ad6ee80591705..dace7ada1d819fc06a225ad21031c25a965d1c7d 100644
--- a/metager/lang/fr/result.php
+++ b/metager/lang/fr/result.php
@@ -20,4 +20,5 @@ return [
     'advertisement' => 'Annonce',
     'providers' => 'fournisseurs',
     'proxytext' => 'Le lien vers le résultat est ouvert de manière anonyme. Vos données ne seront pas transférées aux serveurs de destination. Certaines pages web peuvent ne pas fonctionner comme d\'habitude.',
+    'adblocker' => 'Un <a href=":resultlink">résultat de recherche</a> from <code>:host</code> a été supprimé ici par votre bloqueur de publicité. <a href=":infolink">En savoir plus</a>',
 ];
diff --git a/metager/lang/fr/titles.php b/metager/lang/fr/titles.php
index 6e6b7ae58e626654ed17b1666e32917f56128f81..5b6b8269e89640c013008dfdc3a16515a7bc92c6 100644
--- a/metager/lang/fr/titles.php
+++ b/metager/lang/fr/titles.php
@@ -32,4 +32,5 @@ return [
     'transparency' => 'Déclaration de transparence - MetaGer',
     'search-engine' => 'Moteurs de recherche - MetaGer',
     'lang-selector' => 'Sélection de la langue',
+    'adblocker' => 'Bloqueurs de publicité - MetaGer',
 ];
diff --git a/metager/lang/it/adblocker.php b/metager/lang/it/adblocker.php
new file mode 100644
index 0000000000000000000000000000000000000000..d619284b8f649920750c54b341b0b855420a5419
--- /dev/null
+++ b/metager/lang/it/adblocker.php
@@ -0,0 +1,10 @@
+<?php
+return [
+    'heading' => "Blocco degli annunci su MetaGer",
+    'free' => "L'utilizzo di MetaGer è gratuito, ma il suo mantenimento non lo è. Abbiamo sempre finanziato il nostro servizio con pubblicità non personalizzata. Una nuova aggiunta è la ricerca facoltativa senza pubblicità utilizzando una chiave <a href=\":keylink\">MetaGer</a>. La nostra pubblicità consiste sia in pubblicità tradizionale che in link di affiliazione nei risultati della ricerca. Con queste entrate possiamo pagare il nostro personale, i costi del server e naturalmente i servizi di ricerca che utilizziamo come fonti.",
+    'adblocker' => "In alcuni casi, questi link di affiliazione vengono falsamente nascosti dagli ad blocker. Se siete interessati e volete che i risultati della ricerca siano visualizzati per intero, avete le seguenti opzioni:",
+    'options' => [
+        'disable' => "Disattivare il blocco degli annunci per MetaGer. I risultati della ricerca con i link affiliati non saranno più nascosti.",
+        'key' => "Utilizzi la nostra <a href=\":keylink\">ricerca senza pubblicità</a>. I risultati della ricerca non conterranno più alcun link affiliato.",
+    ],
+];
diff --git a/metager/lang/it/result.php b/metager/lang/it/result.php
index 1165d2109ccda6cc6cdc20181d619397afdda8ce..7e9c45d0db7be70fbb225caf93405a3c7f0e8f94 100644
--- a/metager/lang/it/result.php
+++ b/metager/lang/it/result.php
@@ -20,4 +20,5 @@ return [
     'metagerkeytext' => 'Utilizzare MetaGer senza pubblicità',
     'news' => 'Notizie rilevanti',
     'videos' => 'Video',
+    'adblocker' => 'Un <a href=":resultlink">risultato di ricerca</a> da <code>:host</code> è stato rimosso qui dal tuo blocco degli annunci. <a href=":infolink">Per saperne di più</a>',
 ];
diff --git a/metager/lang/it/titles.php b/metager/lang/it/titles.php
index 338b2c2554bcbd9060c8e7cd3460369b262dfae3..650bd694a2b07ab1e6b067266f626f6a53b61d4c 100644
--- a/metager/lang/it/titles.php
+++ b/metager/lang/it/titles.php
@@ -32,4 +32,5 @@ return [
     'assosearch' => 'Associazioni per ":q" - MetaGer',
     'prevention' => 'Aiuto per i pensieri suicidi - MetaGer',
     'membership' => 'La vostra adesione a SUMA-EV',
+    'adblocker' => 'Adblocker - MetaGer',
 ];
diff --git a/metager/lang/nl/adblocker.php b/metager/lang/nl/adblocker.php
new file mode 100644
index 0000000000000000000000000000000000000000..558d25d52a4ed3e1c337df0531c9b66f54970e01
--- /dev/null
+++ b/metager/lang/nl/adblocker.php
@@ -0,0 +1,10 @@
+<?php
+return [
+    'options' => [
+        'disable' => "Schakel je advertentieblokker uit voor MetaGer. Zoekresultaten met affiliate links worden dan niet langer verborgen.",
+        'key' => "Gebruik onze <a href=\":keylink\">advertentievrije zoekopdracht</a>. Uw zoekresultaten zullen dan geen affiliate links meer bevatten.",
+    ],
+    'heading' => "Advertentieblokker op MetaGer",
+    'free' => "MetaGer is gratis te gebruiken, maar het onderhouden ervan is dat niet. We hebben onze service altijd gefinancierd door middel van niet-gepersonaliseerde reclame. Een nieuwe toevoeging is de optionele reclamevrije zoekfunctie met behulp van een <a href=\":keylink\">MetaGer sleutel</a>. Onze reclame bestaat uit zowel traditionele zoekadvertenties als affiliate links in de zoekresultaten. Met deze inkomsten kunnen we onze medewerkers, de serverkosten en natuurlijk de zoekdiensten die we als bron gebruiken betalen.",
+    'adblocker' => "In sommige gevallen worden deze affiliate links ten onrechte verborgen door ad blockers. Als dit bij jou het geval is en je wilt dat de zoekresultaten volledig worden weergegeven, dan heb je de volgende opties:",
+];
diff --git a/metager/lang/nl/result.php b/metager/lang/nl/result.php
index 6d1f5be4b017224da5a4d44e69d2d6098f11c81d..e437e5d534202b79425ff179e158c23735d15fbe 100644
--- a/metager/lang/nl/result.php
+++ b/metager/lang/nl/result.php
@@ -20,4 +20,5 @@ return [
         'direct' => 'Direct Open',
         '8' => 'RECLAME VERWIJDEREN',
     ],
+    'adblocker' => 'Een <a href=":resultlink">zoekresultaat</a> van <code>:host</code> werd hier verwijderd door uw advertentieblokker. <a href=":infolink">Lees meer</a>',
 ];
diff --git a/metager/lang/nl/titles.php b/metager/lang/nl/titles.php
index 7ac9b4645f345fcee843a8e49584531e91ae0ee0..fc3ff3802a338be1eed5337b024228355276fd8d 100644
--- a/metager/lang/nl/titles.php
+++ b/metager/lang/nl/titles.php
@@ -32,4 +32,5 @@ return [
     'kontakt' => 'Contact - MetaGer',
     'spende' => 'Donatie - MetaGer',
     'membership' => 'Jouw lidmaatschap bij SUMA-EV',
+    'adblocker' => 'Adblockers - MetaGer',
 ];
diff --git a/metager/lang/pl/adblocker.php b/metager/lang/pl/adblocker.php
new file mode 100644
index 0000000000000000000000000000000000000000..c1938ea5a7dccfe71f7f1ce05e8e20ed86078f07
--- /dev/null
+++ b/metager/lang/pl/adblocker.php
@@ -0,0 +1,10 @@
+<?php
+return [
+    'heading' => "Blokowanie reklam na MetaGer",
+    'options' => [
+        'disable' => "Wyłącz blokowanie reklam dla MetaGer. Wyniki wyszukiwania z linkami partnerskimi nie będą już ukryte.",
+        'key' => "Skorzystaj z naszego <a href=\":keylink\">wyszukiwania bez reklam</a>. Wyniki wyszukiwania nie będą już zawierać żadnych linków partnerskich.",
+    ],
+    'free' => "MetaGer jest darmowy, ale jego utrzymanie już nie. Zawsze finansowaliśmy naszą usługę poprzez niespersonalizowane reklamy. Nowością jest opcjonalne wyszukiwanie bez reklam przy użyciu klucza <a href=\":keylink\">MetaGer</a>. Nasze reklamy składają się zarówno z tradycyjnych reklam w wyszukiwarce, jak i linków partnerskich w wynikach wyszukiwania. Dzięki tym dochodom możemy opłacić nasz personel, koszty serwera i oczywiście usługi wyszukiwania, których używamy jako źródeł.",
+    'adblocker' => "W niektórych przypadkach te linki partnerskie są fałszywie ukrywane przez programy blokujące reklamy. Jeśli dotyczy to Ciebie i chcesz, aby wyniki wyszukiwania były wyświetlane w całości, masz następujące opcje:",
+];
diff --git a/metager/lang/pl/result.php b/metager/lang/pl/result.php
index 1f776e423b6940f7ad95358a1b65143dcddf1ee3..e44ca53907f0064f9b251c3eba52591fc9762120 100644
--- a/metager/lang/pl/result.php
+++ b/metager/lang/pl/result.php
@@ -20,4 +20,5 @@ return [
     'metagerkeytext' => 'Korzystaj z MetaGer bez reklam',
     'news' => 'Istotne wiadomości',
     'videos' => 'Filmy',
+    'adblocker' => '<a href=":resultlink">Wynik wyszukiwania</a> z <code>:host</code> został tutaj usunięty przez blokadę reklam. <a href=":infolink">Dowiedz się więcej</a>',
 ];
diff --git a/metager/lang/pl/titles.php b/metager/lang/pl/titles.php
index 90b075393503a6e43d4feb6178c3f255708625f7..5818d17761e9c487279627b6600e0d97edb31300 100644
--- a/metager/lang/pl/titles.php
+++ b/metager/lang/pl/titles.php
@@ -32,4 +32,5 @@ return [
     'assosearch' => 'Asocjacje dla ":q" - MetaGer',
     'prevention' => 'Pomoc z myślami samobójczymi - MetaGer',
     'membership' => 'Twoje członkostwo w SUMA-EV',
+    'adblocker' => 'Adblockery - MetaGer',
 ];
diff --git a/metager/lang/sv/adblocker.php b/metager/lang/sv/adblocker.php
new file mode 100644
index 0000000000000000000000000000000000000000..4b925a4755cb8c50b5849409261cf0d7cecffeab
--- /dev/null
+++ b/metager/lang/sv/adblocker.php
@@ -0,0 +1,10 @@
+<?php
+return [
+    'heading' => "Annonsblockerare på MetaGer",
+    'free' => "MetaGer är gratis att använda men inte att underhålla. Vi har alltid finansierat vår tjänst genom icke-personaliserad reklam. Ett nytt tillägg är den valfria annonsfria sökningen med hjälp av en <a href=\":keylink\">MetaGer-nyckel</a>. Vår reklam består av både traditionell sökannonsering och affiliatelänkar i sökresultaten. Med dessa intäkter kan vi betala vår personal, serverkostnaderna och naturligtvis de söktjänster som vi använder som källor.",
+    'options' => [
+        'disable' => "Inaktivera din annonsblockerare för MetaGer. Sökresultat med affiliatelänkar är då inte längre dolda.",
+        'key' => "Använd vår <a href=\":keylink\">annonsfria sökning</a>. Dina sökresultat kommer då inte längre att innehålla några affiliatelänkar.",
+    ],
+    'adblocker' => "I vissa fall döljs dessa affiliatelänkar felaktigt av annonsblockerare. Om du är drabbad och vill att sökresultaten ska visas i sin helhet har du följande alternativ:",
+];
diff --git a/metager/lang/sv/result.php b/metager/lang/sv/result.php
index 67a1f307725732dfadec1854611b3a23b83ca735..c8f3fcd88a8d2c36e29b2ffa08daa3379729f717 100644
--- a/metager/lang/sv/result.php
+++ b/metager/lang/sv/result.php
@@ -20,4 +20,5 @@ return [
     'metagerkeytext' => 'Använd MetaGer annonsfritt',
     'news' => 'Relevanta nyheter',
     'videos' => 'Videor',
+    'adblocker' => 'Ett <a href=":resultlink">sökresultat</a> från <code>:host</code> togs bort här av din annonsblockerare. <a href=":infolink">Läs mer</a>',
 ];
diff --git a/metager/lang/sv/titles.php b/metager/lang/sv/titles.php
index 7629eff4eaa716bcbed24705f0e0df7ff010570a..0ad48f5c70c7a7b7659772c8c4ba3bfa3e8ac06a 100644
--- a/metager/lang/sv/titles.php
+++ b/metager/lang/sv/titles.php
@@ -32,4 +32,5 @@ return [
     'assosearch' => 'Associationer för ":q" - MetaGer',
     'prevention' => 'Hjälp med självmordstankar - MetaGer',
     'membership' => 'Ditt medlemskap i SUMA-EV',
+    'adblocker' => 'Adblockers - MetaGer',
 ];
diff --git a/metager/resources/js/scriptResultPage.js b/metager/resources/js/scriptResultPage.js
index bcbee5173d18e3d27b3f52c6cab1822676c785ee..b3354b1c8ffeb23ef2db4b32d6493fcbb1a1a355 100644
--- a/metager/resources/js/scriptResultPage.js
+++ b/metager/resources/js/scriptResultPage.js
@@ -225,9 +225,11 @@ function initQueryInputField() {
 
 function enableABHints() {
   setTimeout(() => {
-    document.querySelectorAll("#results > .ab-hint").forEach(element => {
+    document.querySelectorAll("#results > .ab-hint").forEach((element) => {
       let target = element.dataset.target;
-      let targetContainer = document.querySelector("#results > .result[data-index=\"" + target + "\"]");
+      let targetContainer = document.querySelector(
+        '#results > .result[data-index="' + target + '"]'
+      );
       // Element is hidden by display value if `offsetParent` is null
       // according to https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent
       if (!targetContainer || targetContainer.offsetParent == null) {
diff --git a/metager/resources/js/suggest.js b/metager/resources/js/suggest.js
new file mode 100644
index 0000000000000000000000000000000000000000..21cb4a36b839fd9a99179cc491f5cd9326784137
--- /dev/null
+++ b/metager/resources/js/suggest.js
@@ -0,0 +1,133 @@
+/**
+ * MetaGers basic suggestion module
+ */
+let suggestions = [];
+let partners = [];
+let query = "";
+(() => {
+  let searchbar_container = document.querySelector(".searchbar");
+  if (!searchbar_container) {
+    return;
+  }
+  let suggestions_container = searchbar_container.querySelector(".suggestions");
+  if (!suggestions_container) {
+    return;
+  }
+  let suggestion_url_partner = suggestions_container.dataset.partners;
+  let suggestion_url = suggestions_container.dataset.suggestions;
+  let key = suggestions_container.dataset.suggest;
+  if (!key || typeof key != "string" || key.length == 0) {
+    return;
+  }
+  let search_input = searchbar_container.querySelector("input[name=eingabe]");
+  if (!search_input) {
+    return;
+  }
+
+  search_input.addEventListener("keyup", (e) => {
+    if (e.key == "Escape") {
+      e.target.blur();
+    }
+    suggest();
+  });
+  search_input.addEventListener("focusin", suggest);
+  search_input.addEventListener("change", (e) => {
+    if (search_input.value.trim() == "") {
+      query = "";
+      searchbar_container.dataset.suggest = "inactive";
+    }
+  });
+
+  function suggest() {
+    if (search_input.value.trim().length == 0) {
+      return;
+    }
+    if (search_input.value.trim() == query) {
+      return;
+    } else {
+      query = search_input.value.trim();
+    }
+
+    fetch(suggestion_url_partner + "?query=" + encodeURIComponent(query), {
+      method: "GET",
+      headers: {
+        "Content-Type": "application/json",
+        "MetaGer-Key": key,
+      },
+    })
+      .then((response) => response.json())
+      .then((response) => {
+        partners = response;
+        updateSuggestions();
+      }).catch(reason => {
+        partners = [];
+        updateSuggestions();
+      });
+
+    fetch(suggestion_url + "?query=" + encodeURIComponent(query), {
+      method: "GET",
+      headers: {
+        "MetaGer-Key": key,
+      },
+    })
+      .then((response) => response.json())
+      .then((response) => {
+        suggestions = response;
+        updateSuggestions();
+      }).catch(reason => {
+        suggestions = [];
+        updateSuggestions();
+      });
+  }
+
+  function updateSuggestions() {
+    // Enable/Disable Suggestions
+    if (suggestions.length > 0 || partners.length > 0) {
+      searchbar_container.dataset.suggest = "active";
+    } else {
+      searchbar_container.dataset.suggest = "inactive";
+    }
+
+    // Add all Partners
+    suggestions_container
+      .querySelectorAll(".partner")
+      .forEach((value, index) => {
+        if (partners.length < index + 1) {
+          value.style.display = "none";
+          return;
+        } else {
+          value.style.display = "flex";
+        }
+        value.href = partners[index].data.deeplink;
+        let title_container = value.querySelector(".title");
+        if (title_container) {
+          title_container.textContent = partners[index].data.hostname;
+        }
+        let description_container = value.querySelector(".description");
+        if (description_container) {
+          description_container.textContent = partners[index].data.title;
+        }
+        let image_container = value.querySelector("img");
+        if (image_container) {
+          image_container.src = partners[index].data.imageUrl;
+        }
+      });
+
+    // Add all Suggestions
+    suggestions_container
+      .querySelectorAll(".suggestion")
+      .forEach((value, index) => {
+        if (suggestions.length < index + 1) {
+          value.style.display = "none";
+          return;
+        } else {
+          value.style.display = "flex";
+        }
+        value.value = suggestions[index];
+        let title_container = value.querySelector("span");
+        if (title_container) {
+          title_container.textContent = suggestions[index];
+        }
+      });
+  }
+})();
diff --git a/metager/resources/js/utility.js b/metager/resources/js/utility.js
index 225097df90f3cf59f9f5656fda55c66c0c2ea0c6..180b3a2b35ec40686eed0cf570cfe7f8d0f0a1fc 100644
--- a/metager/resources/js/utility.js
+++ b/metager/resources/js/utility.js
@@ -41,7 +41,6 @@ function reportJSAvailabilityForAuthenticatedSearch() {
   let Cookies = require("js-cookie");
   let key_cookie = Cookies.get("key");
   if (key_cookie !== undefined) {
-    console.log("setting cookie");
-    Cookies.set("js_available", "true");
+    Cookies.set("js_available", "true", { sameSite: 'Lax' });
   }
 }
\ No newline at end of file
diff --git a/metager/resources/less/metager/general/base.less b/metager/resources/less/metager/general/base.less
index 172b11026c4ee81ab9ac6bf1dbbd6609d5a0570a..ace3f16a7b24b1c770059c9a6303712cb628fe69 100644
--- a/metager/resources/less/metager/general/base.less
+++ b/metager/resources/less/metager/general/base.less
@@ -183,6 +183,7 @@ i.fa {
     width: fit-content;
     text-decoration: none;
     font-size: 2.7em;
+    line-height: 1;
 
     @media (max-width: @screen-mobile) {
       font-size: 2em;
@@ -208,6 +209,8 @@ i.fa {
       font-size: 1rem;
       display: block;
       padding: 0.3rem;
+      line-height: 1;
+      padding-bottom: 0;
     }
   }
 }
diff --git a/metager/resources/less/metager/pages/startpage/startpage.less b/metager/resources/less/metager/pages/startpage/startpage.less
index f3097e6f7cf9fbb61ffff878736294005b2e0118..511b6eacf7c9205014d8cd3683267d01540ed462 100644
--- a/metager/resources/less/metager/pages/startpage/startpage.less
+++ b/metager/resources/less/metager/pages/startpage/startpage.less
@@ -36,7 +36,9 @@ div.startpage {
         width: 100%;
         align-items: center;
         justify-content: center;
-        padding: 1.5rem;
+        padding-block: 1.5rem;
+        padding: 2dvh 1.5rem;
+        margin: 0;
         font-size: clamp(0.7rem, 3vw, 1rem);
         > li {
           > a {
@@ -51,62 +53,74 @@ div.startpage {
       > div#search-wrapper {
         flex-grow: 1;
         display: grid;
+        grid-template-rows: 20dvh max-content max-content max-content 1fr;
+        @media (max-height: 820px) {
+          grid-template-rows: 15dvh max-content max-content max-content 1fr;
+        }
+        @media (max-height: 775px) {
+          grid-template-rows: 10dvh max-content max-content max-content 1fr;
+        }
+        @media (max-height: 725px) {
+          grid-template-rows: 5dvh max-content max-content max-content 1fr;
+        }
+        grid-template-areas: "." "logo" "search" "quicklinks" ".";
         grid-template-columns: 1fr;
         place-content: center;
 
-        > #search-block {
-          padding-bottom: 15vh;
-          @media (max-height: 500px) {
-            padding-bottom: 0;
+        > #startpage-quicklinks {
+          grid-area: quicklinks;
+          display: flex;
+          justify-content: center;
+          gap: 1rem;
+          @supports not (selector(:first-child)) {
+            gap: 0;
+            > *:not(:nth-child(1)) {
+              padding: 0 0.5rem;
+            }
           }
-          > #startpage-quicklinks {
+          flex-wrap: wrap;
+          padding: 1rem;
+          > .metager-key {
+            color: inherit;
             display: flex;
-            justify-content: center;
-            gap: 1rem;
+            align-items: center;
+            gap: 0.5rem;
             @supports not (selector(:first-child)) {
               gap: 0;
-              > *:not(:nth-child(1)) {
+              > * {
                 padding: 0 0.5rem;
               }
             }
-            flex-wrap: wrap;
-            padding: 1rem;
-            > .metager-key {
-              color: inherit;
-              display: flex;
-              align-items: center;
-              gap: 0.5rem;
-              @supports not (selector(:first-child)) {
-                gap: 0;
-                > * {
-                  padding: 0 0.5rem;
-                }
-              }
-              > img {
-                height: 1em;
-                rotate: -90deg;
-                filter: brightness(@searchbar-key-brightness);
-              }
-
-              &.no-key {
-                > img {
-                  rotate: 0deg;
-                }
-              }
+            > img {
+              height: 1em;
+              rotate: -90deg;
+              filter: brightness(@searchbar-key-brightness);
             }
-            #plugin-btn {
-              color: @text-color;
-              display: flex;
-              align-items: center;
 
+            &.no-key {
               > img {
-                // sets the size for the plugin button
-                max-width: 15px;
-                max-height: 15px;
-                margin-right: 8px;
+                rotate: 0deg;
               }
             }
           }
+          #plugin-btn {
+            color: @text-color;
+            display: flex;
+            align-items: center;
+
+            > img {
+              // sets the size for the plugin button
+              max-width: 15px;
+              max-height: 15px;
+              margin-right: 8px;
+            }
+          }
+        }
+        > #startpage-logo {
+          grid-area: logo;
+        }
+        > fieldset {
+          grid-area: search;
         }
       }
 
diff --git a/metager/resources/less/metager/parts/searchbar.less b/metager/resources/less/metager/parts/searchbar.less
index 0b663e29038965c4c9c7ab5ccd5c190ca523edea..de8577933b85872a5a400ae6728bf41da1cbae4c 100644
--- a/metager/resources/less/metager/parts/searchbar.less
+++ b/metager/resources/less/metager/parts/searchbar.less
@@ -2,48 +2,28 @@
 @searchbar-border-color-light: #777777;
 
 .searchbar {
-  display: -webkit-box;
-  display: -moz-box;
-  display: -ms-flexbox;
-  display: -webkit-flex;
-  display: flex;
-  -webkit-box-direction: normal;
-  -moz-box-direction: normal;
-  -webkit-box-orient: horizontal;
-  -moz-box-orient: horizontal;
-  -webkit-flex-direction: row;
-  -ms-flex-direction: row;
-  flex-direction: row;
-  -webkit-flex-wrap: wrap;
-  -ms-flex-wrap: wrap;
-  flex-wrap: wrap;
-  -webkit-box-pack: center;
-  -moz-box-pack: center;
-  -webkit-justify-content: center;
-  -ms-flex-pack: center;
-  justify-content: center;
-  -webkit-align-content: stretch;
-  -ms-flex-line-pack: stretch;
-  align-content: stretch;
-  -webkit-box-align: center;
-  -moz-box-align: center;
-  -webkit-align-items: center;
-  -ms-flex-align: center;
-  align-items: center;
+  display: grid;
+  grid-template-rows: max-content 0fr;
+  transition: 300ms;
   font-size: 1em;
   background-color: transparent;
   color: #333;
+  width: 100%;
+  width: calc(100% - 16px);
+  max-width: 600px;
+  margin: 0 auto;
+
+  &[data-suggest="active"]:focus-within {
+    grid-template-rows: max-content 1fr;
+    > .suggestions {
+      border: 1px solid @searchbar-border-color;
+      border-top: 0;
+    }
+  }
 
   .search-input-submit {
-    width: 100%;
-    width: calc(100% - 16px);
-    max-width: 600px;
     background-color: @searchbar-background-color;
-    -webkit-box-flex: 1;
-    -ms-flex-positive: 1;
     flex-grow: 1;
-    display: -webkit-box;
-    display: -ms-flexbox;
     display: flex;
     align-items: center;
     padding: 0.7rem 1rem;
@@ -141,6 +121,93 @@
     }
   }
 
+  > .suggestions {
+    --highlight-color: @highlight-color;
+    display: grid;
+    overflow: hidden;
+    border-left: initial;
+    border-top: 0;
+    border: 0;
+    color: @text-color;
+    background-color: @body-background-color;
+    > .partners {
+      display: flex;
+      gap: 1rem;
+      background-color: var(--highlight-color);
+      padding-inline: 0.5rem;
+      > .partner {
+        display: none;
+        gap: 0.5rem;
+        align-items: center;
+        justify-content: center;
+        padding-block: 1rem;
+        color: inherit;
+
+        > img {
+          height: 1em;
+        }
+        > div {
+          display: grid;
+          align-items: center;
+          grid-template-columns: max-content 1fr;
+          column-gap: 0.5rem;
+          > .description {
+            grid-column: span 2;
+            font-size: 0.7rem;
+          }
+          > div {
+            > .mark {
+              color: limegreen;
+              font-size: 0.5rem;
+              width: max-content;
+              border: 1px solid limegreen;
+              padding: 0.1rem 0.25rem;
+              border-radius: 5px;
+            }
+          }
+        }
+      }
+    }
+    > .suggestion {
+      display: none;
+      cursor: pointer;
+      align-items: center;
+      gap: 1rem;
+      padding: 0.25rem 0.5rem;
+      color: inherit;
+      > img {
+        height: 1rem;
+        filter: invert(@icon-color);
+      }
+      &:hover {
+        background-color: var(--highlight-color);
+      }
+    }
+    > .partner {
+      display: none;
+      align-items: center;
+      gap: 1rem;
+      padding: 0.25rem 0.5rem;
+      color: inherit;
+      > img {
+        width: 16px;
+      }
+      > div {
+        > .mark {
+          color: limegreen;
+          font-size: 0.5rem;
+          width: max-content;
+          border: 1px solid limegreen;
+          padding: 0.1rem 0.25rem;
+          border-radius: 5px;
+        }
+      }
+      &:hover {
+        background-color: var(--highlight-color);
+      }
+    }
+  }
+
   .search-hidden {
     display: none;
   }
@@ -151,17 +218,27 @@
 }
 
 .startpage-searchbar {
+  &[data-suggest="active"]:focus-within {
+    @media (max-height: 680px) {
+      z-index: 21;
+      position: absolute;
+      top: 0;
+      max-width: 100%;
+      width: 100%;
+      grid-template-rows: max-content 1fr;
+      height: 100dvh;
+    }
+  }
   > * {
     border: 1px solid @searchbar-border-color;
 
-    &:not(:first-child) {
+    &:not(:first-child):not(.suggestions) {
       border-left: none;
     }
   }
 
   .search-input-submit {
     border-radius: 5px;
-    margin: 0 8px;
 
     @media (max-width: @screen-mobile) {
       max-width: initial;
@@ -193,6 +270,7 @@
 }
 
 .resultpage-searchbar {
+  grid-template-rows: max-content;
   .search-input-submit {
     padding: 0 0.5rem;
     margin-right: 2rem;
@@ -203,6 +281,20 @@
       }
     }
   }
+  > .suggestions {
+    display: none;
+    position: absolute;
+    top: 3.8rem;
+    width: 100%;
+    left: 0;
+    right: 0;
+  }
+
+  &[data-suggest="active"]:focus-within {
+    > .suggestions {
+      display: grid;
+    }
+  }
 }
 
 #research-bar-placeholder {
diff --git a/metager/resources/less/metager/variables-dark.less b/metager/resources/less/metager/variables-dark.less
index 0dec854f2f63e6c505bf935a233c4ddce8848887..75fdd89f216256f5bad31afdeb37f8343322a7ad 100644
--- a/metager/resources/less/metager/variables-dark.less
+++ b/metager/resources/less/metager/variables-dark.less
@@ -5,6 +5,7 @@
 @background-color-mobile: @color-almost-black;
 // General text color.
 @text-color: @color-almost-white;
+@highlight-color: #626262;
 // Default textual link color.
 @link-color: #fd8307;
 // Sidebar styles
diff --git a/metager/resources/less/metager/variables.less b/metager/resources/less/metager/variables.less
index 3a9ac369e0899355d04cd49b1f78c5abe66a5879..85ffc9b72a6e52f04af831506bcd104361f02d1e 100644
--- a/metager/resources/less/metager/variables.less
+++ b/metager/resources/less/metager/variables.less
@@ -20,6 +20,7 @@
   sans-serif;
 // General text color.
 @text-color: @color-black;
+@highlight-color: #f7f7fa;
 // Default textual link color.
 @link-color: #06c;
 // Default Mini-Padding
diff --git a/metager/resources/views/index.blade.php b/metager/resources/views/index.blade.php
index be24bd7e1e68219b1eaebf3915e571ce643b72e5..50041cf1a43d16159b3540bab2031605d8dd0283 100644
--- a/metager/resources/views/index.blade.php
+++ b/metager/resources/views/index.blade.php
@@ -15,7 +15,6 @@
     @endforeach
     </ul>
     <div id="search-wrapper">
-      <div id="search-block">
         <h1 id="startpage-logo">
           <a class="logo" href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), '/') }}">
             <img src="/img/metager.svg" alt="MetaGer" />
@@ -49,7 +48,6 @@
         @else
         <a id="plugin-btn" href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), '/plugin') }}" title="{{ trans('index.plugin-title') }}"><img src="/img/plug-in.svg" alt="+"> {{ trans('index.plugin') }}</a>
         @endif
-    </div>
       </div>
     </div>
     <div id="language">
diff --git a/metager/resources/views/parts/searchbar.blade.php b/metager/resources/views/parts/searchbar.blade.php
index 6c00cb268ba04301eff8e78fa9f125271d723c7f..5d3a4fe9ecc1abfa5dfbdfa039b0dbcfae45e8c6 100644
--- a/metager/resources/views/parts/searchbar.blade.php
+++ b/metager/resources/views/parts/searchbar.blade.php
@@ -12,7 +12,7 @@
 					</a>
 				</div>
 				<div class="search-input @if(!\Request::is('/')) search-delete-js-only @endif">
-					<input type="search" name="eingabe" value="@if(Request::filled("eingabe")){{Request::input("eingabe")}}@endif" @if(\Request::is('/') && !\Request::filled('mgapp')) autofocus @endif autocomplete="off" class="form-control" placeholder="{{ trans('index.placeholder') }}" >
+					<input type="search" name="eingabe" value="@if(Request::filled("eingabe")){{Request::input("eingabe")}}@endif" @if(\Request::is('/') && !\Request::filled('mgapp')) autofocus @endif autocomplete="off" class="form-control" placeholder="{{ trans('index.placeholder') }}">
 					<button id="search-delete-btn" name="delete-search-input" type="reset" tabindex="-1">
 						&#xd7;
 					</button>
@@ -23,6 +23,76 @@
 					</button>
 				</div>
 			</div>
+			<div class="suggestions" data-suggest="{{Crypt::encrypt(now()->addMinutes(2))}}" data-partners="{{ route('suggest_partner') }}" data-suggestions="{{ route('suggest_suggest') }}">
+					<div class="partners">
+						<a href="" class="partner">
+							<img src="" alt="">
+							<div>
+								<div class="title"></div>
+								<div><div class="mark">@lang('result.options.4')</div></div>
+								<div class="description"></div>
+							</div>
+						</a>
+						<a href="" class="partner">
+							<img src="" alt="">
+							<div>
+								<div class="title"></div>
+								<div><div class="mark">@lang('result.options.4')</div></div>
+								<div class="description"></div>
+							</div>
+						</a>
+					</div>
+					<button type="submit" name="eingabe" class="suggestion">
+						<img src="/img/icon-lupe.svg" alt="search">
+						<span></span>
+					</button>
+					<button type="submit" name="eingabe" class="suggestion">
+						<img src="/img/icon-lupe.svg" alt="search">
+						<span></span>
+					</button>
+					<button type="submit" name="eingabe" class="suggestion">
+						<img src="/img/icon-lupe.svg" alt="search">
+						<span></span>
+					</button>
+					<button type="submit" name="eingabe" class="suggestion">
+						<img src="/img/icon-lupe.svg" alt="search">
+						<span></span>
+					</button>
+					<a href="" class="partner">
+						<img src="" alt="">
+						<div class="title"></div>
+						<div><div class="mark">@lang('result.options.4')</div></div>
+					</a>
+					<button type="submit" name="eingabe" class="suggestion">
+						<img src="/img/icon-lupe.svg" alt="search">
+						<span></span>
+					</button>
+					<button type="submit" name="eingabe" class="suggestion">
+						<img src="/img/icon-lupe.svg" alt="search">
+						<span></span>
+					</button>
+					<button type="submit" name="eingabe" class="suggestion">
+						<img src="/img/icon-lupe.svg" alt="search">
+						<span></span>
+					</button>
+					<button type="submit" name="eingabe" class="suggestion">
+						<img src="/img/icon-lupe.svg" alt="search">
+						<span></span>
+					</button>
+					<a href="" class="partner">
+						<img src="" alt="">
+						<div class="title"></div>
+						<div><div class="mark">@lang('result.options.4')</div></div>
+					</a>
+					<button type="submit" name="eingabe" class="suggestion">
+						<img src="/img/icon-lupe.svg" alt="search">
+						<span></span>
+					</button>
+					<button type="submit" name="eingabe" class="suggestion">
+						<img src="/img/icon-lupe.svg" alt="search">
+						<span></span>
+					</button>
+				</div>
 			<div class="search-hidden">
 				@if(Request::filled("token"))
 				<input type="hidden" name="token" value={{ Request::input("token") }}>
@@ -39,4 +109,5 @@
 			<div class="search-custom-hidden"></div>
 		</div>
 	</form>
-</fieldset>
\ No newline at end of file
+</fieldset>
+<!--<script src="{{ mix('/js/suggest.js') }}"></script>-->
\ No newline at end of file
diff --git a/metager/resources/views/resultpages/metager3resultsatom10.blade.php b/metager/resources/views/resultpages/metager3resultsatom10.blade.php
index e373265aaab7715b7f890b08722f07ae680b0ffd..71d92fe5cb7681376ca493af5b600c6f4bd2813a 100644
--- a/metager/resources/views/resultpages/metager3resultsatom10.blade.php
+++ b/metager/resources/views/resultpages/metager3resultsatom10.blade.php
@@ -16,11 +16,11 @@
       @include('layouts.atom10ad', ['ad' => $metager->popAd()])
     @endif
     <entry>
-      <title>{!! htmlspecialchars($result->titel, ENT_XML1, 'UTF-8'); !!}</title>
-      <link href="{!! htmlspecialchars($result->link, ENT_XML1, 'UTF-8'); !!}" />
-      <mg:anzeigeLink>{!! htmlspecialchars($result->anzeigeLink, ENT_XML1, 'UTF-8'); !!}</mg:anzeigeLink>
+      <title>{!! htmlspecialchars($result->titel, ENT_XML1, 'UTF-8') !!}</title>
+      <link href="{!! htmlspecialchars($result->link, ENT_XML1, 'UTF-8') !!}" />
+      <mg:anzeigeLink>{!! htmlspecialchars($result->anzeigeLink, ENT_XML1, 'UTF-8') !!}</mg:anzeigeLink>
       <content type="text">
-        {!! htmlspecialchars($result->descr, ENT_XML1, 'UTF-8'); !!}
+        {!! htmlspecialchars($result->descr, ENT_XML1, 'UTF-8') !!}
       </content>
     </entry>
   @endforeach
diff --git a/metager/resources/views/resultpages/metager3resultsrss20.blade.php b/metager/resources/views/resultpages/metager3resultsrss20.blade.php
index 377b702dc80888b0480d282e4c9d993dff374457..d82e7e9dc254efb10459994e648c8aa04cfec1bd 100644
--- a/metager/resources/views/resultpages/metager3resultsrss20.blade.php
+++ b/metager/resources/views/resultpages/metager3resultsrss20.blade.php
@@ -4,18 +4,18 @@
       xmlns:mg="http://metager.de/opensearch/"
       xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
-     <title>{!! htmlspecialchars($eingabe, ENT_XML1, 'UTF-8'); !!} - MetaGer</title>
+     <title>{!! htmlspecialchars($eingabe, ENT_XML1, 'UTF-8') !!} - MetaGer</title>
      <opensearch:totalResults>{{ $resultcount }}</opensearch:totalResults>
      <opensearch:Query role="request" searchTerms="{{ htmlspecialchars($eingabe, ENT_QUOTES) }}"/>
      <mg:nextSearchResults url="{{htmlspecialchars($metager->nextSearchLink() ,ENT_QUOTES)}}" />
       @if(app(\App\Models\Authorization\Authorization::class)->canDoAuthenticatedSearch())
         @foreach($metager->getResults() as $result)
           <item>
-            <title>{!! htmlspecialchars($result->titel, ENT_XML1, 'UTF-8'); !!}</title>
-            <link>{!! htmlspecialchars($result->link, ENT_XML1, 'UTF-8'); !!}</link>
-            <mg:anzeigeLink>{!! htmlspecialchars($result->anzeigeLink, ENT_XML1, 'UTF-8'); !!}</mg:anzeigeLink>
+            <title>{!! htmlspecialchars($result->titel, ENT_XML1, 'UTF-8') !!}</title>
+            <link>{!! htmlspecialchars($result->link, ENT_XML1, 'UTF-8') !!}</link>
+            <mg:anzeigeLink>{!! htmlspecialchars($result->anzeigeLink, ENT_XML1, 'UTF-8') !!}</mg:anzeigeLink>
             <description>
-              {!! htmlspecialchars($result->longDescr, ENT_XML1, 'UTF-8'); !!}
+              {!! htmlspecialchars($result->longDescr, ENT_XML1, 'UTF-8') !!}
             </description>
           </item>
         @endforeach
diff --git a/metager/resources/views/settings/index.blade.php b/metager/resources/views/settings/index.blade.php
index cf1577efa471c04dc3d4641e636647cdb83c496b..4de95ef3c39cb6a0c7f76a1dfe3c2bf88de1fb21 100644
--- a/metager/resources/views/settings/index.blade.php
+++ b/metager/resources/views/settings/index.blade.php
@@ -180,6 +180,13 @@
         <form id="setting-form" action="{{ route('enableSetting') }}" method="post" class="form">
             <input type="hidden" name="focus" value="{{ $fokus }}">
             <input type="hidden" name="url" value="{{ $url }}">
+            <div class="form-group">
+                <label for="sg">@lang('settings.suggestions.label')</label>
+                <select name="sg" id="sg" class="form-control">
+                    <option value="off" {{ Cookie::get('suggestions') === "off" ? "disabled selected" : "" }}>@lang('settings.suggestions.off')</option>
+                    <option value="on" {{ !Cookie::has('suggestions') ? "disabled selected" : "" }}>@lang('settings.suggestions.on')</option>
+                </select>
+            </div>
             <div class="form-group">
                 <label for="dm">@lang('settings.darkmode')</label>
                 <select name="dm" id="dm" class="form-control">
diff --git a/metager/routes/web.php b/metager/routes/web.php
index 340eb97d4dd48631d6e64c6cce7323fc09ae406b..473e373698d5bc83543c4d8a39cb207e88aa4fe1 100644
--- a/metager/routes/web.php
+++ b/metager/routes/web.php
@@ -5,6 +5,7 @@ use App\Http\Controllers\LangSelector;
 use App\Http\Controllers\MembershipController;
 use App\Http\Controllers\Prometheus;
 use App\Http\Controllers\SearchEngineList;
+use App\Http\Controllers\SuggestionController;
 use App\Http\Controllers\TTSController;
 use App\Localization;
 use Jenssegers\Agent\Agent;
@@ -61,6 +62,11 @@ Route::get('impressum.html', function () {
     return redirect(url('impressum'));
 });
 
+Route::group(["prefix" => 'suggest'], function () {
+    Route::get("partner", [SuggestionController::class, "partner"])->name("suggest_partner");
+    Route::get("suggest", [SuggestionController::class, "suggest"])->name("suggest_suggest");
+});
+
 Route::get('about', function () {
     return view('about')
         ->with('title', trans('titles.about'))
@@ -122,7 +128,7 @@ Route::get('partnershops', function () {
     return view('spende.partnershops')
         ->with('title', trans('titles.partnershops'))
         ->with('navbarFocus', 'foerdern');
-});
+})->name("partnershops");
 
 Route::get('beitritt', function () {
     if (Localization::getLanguage() === "de") {
diff --git a/metager/webpack.mix.js b/metager/webpack.mix.js
index 426c7770e240d975c91213e658897c0ce2d29f42..07e031d0ef98fddcd119c9b62707ddf4f3181243 100644
--- a/metager/webpack.mix.js
+++ b/metager/webpack.mix.js
@@ -109,6 +109,7 @@ mix
     "resources/less/metager/pages/widget/widget.less",
     "public/css/widget/widget.css"
   )
+  .js(["resources/js/suggest.js"], "public/js/suggest.js")
   .js(["resources/js/scriptSettings.js"], "public/js/scriptSettings.js")
   .js(
     [