diff --git a/app/Http/Controllers/MetaGerSearch.php b/app/Http/Controllers/MetaGerSearch.php
index 22289cad828c7a27ab621c1c9282239cdd9944cf..025be641dc3dff49d37d850274e470679da031fd 100644
--- a/app/Http/Controllers/MetaGerSearch.php
+++ b/app/Http/Controllers/MetaGerSearch.php
@@ -76,10 +76,21 @@ class MetaGerSearch extends Controller
             return response($responseContent);
         }
 
+        $quicktips = $metager->createQuicktips();
+        if (!empty($timings)) {
+            $timings["createQuicktips"] = microtime(true) - $time;
+        }
+
         # Suche für alle zu verwendenden Suchmaschinen als Job erstellen,
         # auf Ergebnisse warten und die Ergebnisse laden
         $metager->createSearchEngines($request, $timings);
 
+        # Versuchen die Ergebnisse der Quicktips zu laden
+        $quicktipResults = $quicktips->loadResults();
+        if (!empty($timings)) {
+            $timings["loadResults"] = microtime(true) - $time;
+        }
+
         $metager->startSearch($timings);
 
         $metager->waitForMainResults();
@@ -128,7 +139,7 @@ class MetaGerSearch extends Controller
         }
 
         # Die Ausgabe erstellen:
-        $resultpage = $metager->createView();
+        $resultpage = $metager->createView($quicktipResults);
         if ($spamEntry !== null) {
             try {
                 Cache::put('spam.' . $metager->getFokus() . "." . md5($spamEntry), $resultpage->render(), 604800);
diff --git a/app/MetaGer.php b/app/MetaGer.php
index 0a3be40d6add9ba73c0a2c905d69706d27f83df3..5834d96dfaa63a70e56ccb76c8f80b00a1fee560 100644
--- a/app/MetaGer.php
+++ b/app/MetaGer.php
@@ -135,7 +135,7 @@ class MetaGer
     }
 
     # Erstellt aus den gesammelten Ergebnissen den View
-    public function createView()
+    public function createView($quicktipResults = [])
     {
         # Hiermit werden die evtl. ausgewählten SuMas extrahiert, damit die Input-Boxen richtig gesetzt werden können
         $focusPages = [];
@@ -175,7 +175,7 @@ class MetaGer
                         ->with('apiAuthorized', $this->apiAuthorized)
                         ->with('metager', $this)
                         ->with('browser', (new Agent())->browser())
-                        ->with('quicktips', action('MetaGerSearch@quicktips', ["search" => $this->eingabe]))
+                        ->with('quicktips', $quicktipResults)
                         ->with('focus', $this->fokus)
                         ->with('resultcount', count($this->results));
             }
@@ -248,7 +248,7 @@ class MetaGer
                         ->with('apiAuthorized', $this->apiAuthorized)
                         ->with('metager', $this)
                         ->with('browser', (new Agent())->browser())
-                        ->with('quicktips', action('MetaGerSearch@quicktips', ["search" => $this->eingabe, "quotes" => $this->sprueche]))
+                        ->with('quicktips', $quicktipResults)
                         ->with('resultcount', count($this->results))
                         ->with('focus', $this->fokus);
                     break;
@@ -1213,6 +1213,15 @@ class MetaGer
         }
     }
 
+     public function createQuicktips()
+    {
+        # Die quicktips werden als job erstellt und zur Abarbeitung freigegeben
+        $quicktips = new \App\Models\Quicktips\Quicktips($this->q, LaravelLocalization::getCurrentLocale(), $this->getTime());
+        return $quicktips;
+    }
+
+
+
     private function anonymizeIp($ip)
     {
         if (str_contains($ip, ":")) {
diff --git a/app/Models/Quicktips/Quicktips.php b/app/Models/Quicktips/Quicktips.php
index 1210568fe193be1f0f8295598e6249d8627d0fba..976e3d4cc18b3c73207d7139ab9056729d59aa51 100644
--- a/app/Models/Quicktips/Quicktips.php
+++ b/app/Models/Quicktips/Quicktips.php
@@ -3,53 +3,55 @@
 namespace App\Models\Quicktips;
 
 use Cache;
-use LaravelLocalization;
+use Illuminate\Foundation\Bus\DispatchesJobs;
+use Illuminate\Support\Facades\Redis;
 use Log;
 
 class Quicktips
 {
+    use DispatchesJobs;
 
     private $quicktipUrl = "/1.1/quicktips.xml";
-    private $results = [];
     const QUICKTIP_NAME = "quicktips";
-    const CACHE_DURATION = 60 * 60;
+    const CACHE_DURATION = 60;
 
     private $hash;
 
-    public function __construct($search, $quotes)
+    public function __construct($search, $locale, $max_time)
     {
-        $locale = LaravelLocalization::getCurrentLocale();
         if (env("APP_ENV") === "production") {
             $this->quicktipUrl = "https://quicktips.metager.de" . $this->quicktipUrl;
         } else {
             $this->quicktipUrl = "https://dev.quicktips.metager.de" . $this->quicktipUrl;
         }
-        $this->startSearch($search, $quotes, $locale);
+        $this->startSearch($search, $locale, $max_time);
     }
 
-    public function startSearch($search, $quotes, $locale)
+    public function startSearch($search, $locale, $max_time)
     {
-        $url = $this->quicktipUrl . "?search=" . $this->normalize_search($search) . "&locale=" . $locale . "&quotes=" . $quotes;
+        $url = $this->quicktipUrl . "?search=" . $this->normalize_search($search) . "&locale=" . $locale;
         $this->hash = md5($url);
 
-        $results = null;
+        if (!Cache::has($this->hash)) {
+            if (!Redis::exists($this->hash)) {
 
-        try {
-            if (!Cache::has($this->hash)) {
-                $results = file_get_contents($url);
-                Cache::put($this->hash, $results, Quicktips::CACHE_DURATION);
-            } else {
-                $results = Cache::get($this->hash);
-            }
-        } catch (\Exception $e) {
-            Log::error($e->getMessage());
-        }
+                // Queue this search
+                $mission = [
+                    "resulthash" => $this->hash,
+                    "url" => $url,
+                    "useragent" => "",
+                    "username" => null,
+                    "password" => null,
+                    "headers" => [],
+                    "cacheDuration" => self::CACHE_DURATION,
+                    "name" => "Quicktips",
+                ];
 
-        if ($results === null) {
-            $results = file_get_contents($url);
-        }
+                $mission = json_encode($mission);
 
-        $this->results = $this->loadResults($results);
+                Redis::rpush(\App\MetaGer::FETCHQUEUE_KEY, $mission);
+            }
+        }
     }
 
     /**
@@ -58,8 +60,9 @@ class Quicktips
      * 2. Parse the results
      * Returns an empty array if no results are found
      */
-    public function loadResults($resultsRaw)
+    public function loadResults()
     {
+        $resultsRaw = $this->retrieveResults($this->hash);
         if ($resultsRaw) {
             $results = $this->parseResults($resultsRaw);
             return $results;
@@ -72,8 +75,27 @@ class Quicktips
     {
         $body = null;
 
+        $startTime = microtime(true);
+
         if (Cache::has($this->hash)) {
-            $body = Cache::get($this->hash);
+            return Cache::get($this->hash, false);
+        }
+
+        while (microtime(true) - $startTime < 0.5) {
+            $body = Redis::rpoplpush($this->hash, $this->hash);
+            if ($body === false || $body === null) {
+                usleep(50 * 1000);
+            } else {
+                break;
+            }
+        }
+
+        if ($body === false) {
+            return false;
+        }
+
+        if ($body === "no-result") {
+            return false;
         }
 
         if ($body !== null) {
@@ -176,9 +198,4 @@ class Quicktips
     {
         return urlencode($search);
     }
-
-    public function getResults()
-    {
-        return $this->results;
-    }
 }
diff --git a/resources/less/metager/pages/resultpage.less b/resources/less/metager/pages/resultpage.less
index a2a703ea1965582827ae6a5a7ecdf2f0dc31a7ca..a7b8077d7c9338de645c5531361d6c94c52380fb 100644
--- a/resources/less/metager/pages/resultpage.less
+++ b/resources/less/metager/pages/resultpage.less
@@ -1,5 +1,6 @@
 @import "./resultpage/result-page.less";
 @import "./resultpage/result.less";
+@import "./resultpage/quicktips.less";
 @import "./resultpage/product.less";
 @import "./resultpage/result-saver.less";
 @import "./resultpage/keyboard-nav.less";
\ No newline at end of file
diff --git a/resources/less/metager/pages/resultpage/quicktips.less b/resources/less/metager/pages/resultpage/quicktips.less
index f7f3eb879083fa2a4d5f19dcd3a29e7936e60c2d..1627559d9565e280897db335b0fd4c8e5ac7325b 100644
--- a/resources/less/metager/pages/resultpage/quicktips.less
+++ b/resources/less/metager/pages/resultpage/quicktips.less
@@ -1,7 +1,7 @@
 /* Quicktips */
-@import "../../variables.less";
-@import "../../general/cards.less";
-@import "../../general/general.less";
+// @import "../../variables.less";
+// @import "../../general/cards.less";
+// @import "../../general/general.less";
 @quicktip-font-large: @result-font-large;
 @quicktip-font-medium: @result-font-medium;
 @quicktip-font-small: @result-font-small;
diff --git a/resources/views/layouts/researchandtabs.blade.php b/resources/views/layouts/researchandtabs.blade.php
index 17a26ccd3eae3913021bea12859c68c075c6baac..b0c59b3a9de4ad8caeeb4b02d96dfe43085ec044 100644
--- a/resources/views/layouts/researchandtabs.blade.php
+++ b/resources/views/layouts/researchandtabs.blade.php
@@ -34,11 +34,11 @@
 	</div>
 	<div id="additions-container">
 		@include('layouts.keyboardNavBox')
+		<div id="quicktips">
 		@if( $metager->showQuicktips() )
-			<div id="quicktips">
-				<iframe src="{{ $quicktips }}" frameborder="0"></iframe>
-			</div>
+			@include('quicktips', ['quicktips', $quicktips])
 		@endif
+		</div>
 	</div>
 	@include('parts.footer', ['type' => 'resultpage', 'id' => 'resultPageFooter'])
 </div>
diff --git a/resources/views/quicktips.blade.php b/resources/views/quicktips.blade.php
index 6fa679cf65fd25ab3e02af788260f55783900250..f354bda8b7ff7dadefffc7704e3bf4325b39b28b 100644
--- a/resources/views/quicktips.blade.php
+++ b/resources/views/quicktips.blade.php
@@ -1,19 +1,5 @@
-<!DOCTYPE html>
-<html lang="{{ LaravelLocalization::getCurrentLocale() }}">
-<head>
-  <meta charset="UTF-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  <title>{{ $search }} - MetaGer Quicktips</title>
-  <link type="text/css" rel="stylesheet" href="{{ mix('css/quicktips.css') }}" />
-  <link href="/fonts/liberationsans/stylesheet.css" rel="stylesheet">
-	<link type="text/css" rel="stylesheet" href="{{ mix('css/fontawesome.css') }}" />
-	<link type="text/css" rel="stylesheet" href="{{ mix('css/fontawesome-solid.css') }}" />
-</head>
-<body id="quicktips">
 @foreach($quicktips as $quicktip)
   <div class="quicktip" type="{{ $quicktip->type }}">
     @include('parts.quicktip', ['quicktip' => $quicktip])
   </div>
-@endforeach
-</body>
-</html>
+@endforeach
\ No newline at end of file
diff --git a/webpack.mix.js b/webpack.mix.js
index 91565c2e243bffdfc366fe10fe028ee96cc9c072..30e9bbf50b657057402c542a335a9e3b89ef58f6 100644
--- a/webpack.mix.js
+++ b/webpack.mix.js
@@ -25,9 +25,6 @@ mix
   .less("resources/less/metager/metager-dark.less", "public/css/themes/metager-dark.css", {
     strictMath: true
   })
-  .less("resources/less/metager/pages/resultpage/quicktips.less", "public/css/quicktips.css", {
-    strictMath: true
-  })
   .less("resources/less/font-awesome/fontawesome.less", "public/css/fontawesome.css", {
     strictMath: true
   })