diff --git a/app/MetaGer.php b/app/MetaGer.php
index 88183fbccc75c6126fd4dbdbb06bb1497b33231d..2eec10ed89495a4d96d704b6144d98128a50af25 100644
--- a/app/MetaGer.php
+++ b/app/MetaGer.php
@@ -361,19 +361,21 @@ class MetaGer
 
     public function createSearchEngines(Request $request)
     {
+        # Wenn es kein Suchwort gibt
         if (!$request->has("eingabe")) {
             return;
         }
 
-        # Überprüfe, welche Sumas eingeschaltet sind
         $xml                  = simplexml_load_file($this->sumaFile);
+        $sumas                = $xml->xpath("suma");
         $enabledSearchengines = [];
         $overtureEnabled      = false;
         $sumaCount            = 0;
-        $sumas                = $xml->xpath("suma");
 
         /* Erstellt die Liste der eingestellten Sumas
-         * Der einzige Unterschied bei angepasstem Suchfokus ist, dass nicht nach den Typen einer Suma, sondern den im Request mitgegebenen Typen entschieden wird
+         * Der einzige Unterschied bei angepasstem Suchfokus ist,
+         * dass nicht nach den Typen einer Suma,
+         * sondern den im Request mitgegebenen Typen entschieden wird.
          * Ansonsten wird genau das selbe geprüft und gemacht:
          * Handelt es sich um spezielle Suchmaschinen die immer an sein müssen
          * Wenn es Overture ist vermerken dass Overture an ist
@@ -381,54 +383,24 @@ class MetaGer
          * Zu Liste hinzufügen
          */
         foreach ($sumas as $suma) {
-            if ($this->fokus === "angepasst") {
-                if ($request->has($suma["name"])
-                    || ($this->fokus !== "bilder"
-                        && ($suma["name"]->__toString() === "qualigo"
-                            || $suma["name"]->__toString() === "similar_product_ads"
-                            || (!$overtureEnabled && $suma["name"]->__toString() === "overtureAds")
-                            || $suma["name"]->__toString() == "rlvproduct"
-                        )
-                    )
-                ) {
-
-                    if (!(isset($suma['disabled']) && $suma['disabled']->__toString() === "1")) {
-                        if ($suma["name"]->__toString() === "overture" || $suma["name"]->__toString() === "overtureAds") {
-                            $overtureEnabled = true;
-                        }
-                        if ($suma["name"]->__toString() !== "qualigo" && $suma["name"]->__toString() !== "similar_product_ads" && $suma["name"]->__toString() !== "overtureAds") {
-                            $sumaCount += 1;
-                        }
-                        $enabledSearchengines[] = $suma;
-                    }
+            if ($this->sumaIsSelected($suma, $request)
+                || ($this->isBildersuche()
+                    && $this->sumaIsAdsuche($suma, $overtureEnabled))
+                && (!$this->sumaIsDisabled($suma))) {
+                if ($this->sumaIsOverture($suma)) {
+                    $overtureEnabled = true;
                 }
-            } else {
-                $types = explode(",", $suma["type"]);
-                if (in_array($this->fokus, $types)
-                    || ($this->fokus !== "bilder"
-                        && ($suma["name"]->__toString() === "qualigo"
-                            || $suma["name"]->__toString() === "similar_product_ads"
-                            || (!$overtureEnabled && $suma["name"]->__toString() === "overtureAds")
-                            || $suma["name"]->__toString() == "rlvproduct"
-                        )
-                    )
-                ) {
-                    if (!(isset($suma['disabled']) && $suma['disabled']->__toString() === "1")) {
-                        if ($suma["name"]->__toString() === "overture" || $suma["name"]->__toString() === "overtureAds") {
-                            $overtureEnabled = true;
-                        }
-                        if ($suma["name"]->__toString() !== "qualigo" && $suma["name"]->__toString() !== "similar_product_ads" && $suma["name"]->__toString() !== "overtureAds") {
-                            $sumaCount += 1;
-                        }
-                        $enabledSearchengines[] = $suma;
-                    }
+                if ($this->sumaIsNotAdsuche($suma)) {
+                    $sumaCount += 1;
                 }
+                $enabledSearchengines[] = $suma;
             }
         }
 
         # Sonderregelung für alle Suchmaschinen, die zu den Minisuchern gehören. Diese können alle gemeinsam über einen Link abgefragt werden
         $subcollections = [];
-        $tmp            = [];
+
+        $tmp = [];
         foreach ($enabledSearchengines as $engine) {
             if (isset($engine['minismCollection'])) {
                 $subcollections[] = $engine['minismCollection']->__toString();
@@ -439,91 +411,41 @@ class MetaGer
         }
         $enabledSearchengines = $tmp;
         if (sizeof($subcollections) > 0) {
-            $count                        = sizeof($subcollections) * 10;
-            $minisucherEngine             = $xml->xpath('suma[@name="minism"]')[0];
-            $subcollections               = urlencode("(" . implode(" OR ", $subcollections) . ")");
-            $minisucherEngine["formData"] = str_replace("<<SUBCOLLECTIONS>>", $subcollections, $minisucherEngine["formData"]);
-            $minisucherEngine["formData"] = str_replace("<<COUNT>>", $count, $minisucherEngine["formData"]);
-            $enabledSearchengines[]       = $minisucherEngine;
+            $enabledSearchengines[] = $this->loadMiniSucher($xml, $subcollections);
         }
 
         if ($sumaCount <= 0) {
             $this->errors[] = trans('metaGer.settings.noneSelected');
         }
+
         $engines = [];
 
-        # Wenn eine Sitesearch durchgeführt werden soll, überprüfen wir ob eine der Suchmaschinen überhaupt eine Sitesearch unterstützt
+        # Wenn eine Sitesearch durchgeführt werden soll, überprüfen wir ob überhaupt eine der Suchmaschinen eine Sitesearch unterstützt
         $siteSearchFailed = $this->checkCanNotSitesearch($enabledSearchengines);
 
         $typeslist = [];
         $counter   = 0;
 
-        if ($request->has('next') && Cache::has($request->input('next')) && unserialize(Cache::get($request->input('next')))['page'] > 1) {
-            $next       = unserialize(Cache::get($request->input('next')));
-            $this->page = $next['page'];
-            $engines    = $next['engines'];
-            if (isset($next['startForwards'])) {
-                $this->startForwards = $next['startForwards'];
-            }
-
-            if (isset($next['startBackwards'])) {
-                $this->startBackwards = $next['startBackwards'];
-            }
-
+        if ($this->requestIsCached($request)) {
+            $engines = $this->getCachedEngines($request);
         } else {
-            foreach ($enabledSearchengines as $engine) {
-
-                # Wenn diese Suchmaschine gar nicht eingeschaltet sein soll
-                if (!$siteSearchFailed && strlen($this->site) > 0 && (!isset($engine['hasSiteSearch']) || $engine['hasSiteSearch']->__toString() === "0")) {
-                    continue;
-                }
-
-                # Setze Pfad zu Parser
-                $path = "App\Models\parserSkripte\\" . ucfirst($engine["package"]->__toString());
-
-                # Prüfe ob Parser vorhanden
-                if (!file_exists(app_path() . "/Models/parserSkripte/" . ucfirst($engine["package"]->__toString()) . ".php")) {
-                    Log::error(trans('metaGer.engines.noParser', ['engine' => $engine["name"]]));
-                    continue;
-                }
-
-                # Es wird versucht die Suchengine zu erstellen
-                $time = microtime();
-                try {
-                    $tmp = new $path($engine, $this);
-                } catch (\ErrorException $e) {
-                    Log::error(trans('metaGer.engines.cantQuery', ['engine' => $engine["name"], 'error' => var_dump($e)]));
-                    continue;
-                }
-
-                # Ausgabe bei Debug-Modus
-                if ($tmp->enabled && isset($this->debug)) {
-                    $this->warnings[] = $tmp->service . "   Connection_Time: " . $tmp->connection_time . "    Write_Time: " . $tmp->write_time . " Insgesamt:" . ((microtime() - $time) / 1000);
-                }
-
-                # Wenn die neu erstellte Engine eingeschaltet ist, wird sie der Liste hinzugefügt
-                if ($tmp->isEnabled()) {
-                    $engines[] = $tmp;
-                }
-
-            }
+            $engines = $this->actuallyCreateSearchEngines($enabledSearchengines, $siteSearchFailed);
         }
 
-        # Wir starten die Suche manuell:
+        # Wir starten alle Suchen
         foreach ($engines as $engine) {
             $engine->startSearch($this);
         }
 
         $this->adjustFocus($sumas, $enabledSearchengines);
 
-        /* Nun passiert ein elementarer Schritt.
-         * Wir warten auf die Antwort der Suchmaschinen, da wir vorher nicht weiter machen können.
-         * Aber natürlich nicht ewig.
-         * Die Verbindung steht zu diesem Zeitpunkt und auch unsere Request wurde schon gesendet.
-         * Wir geben der Suchmaschine nun bis zu 500ms Zeit zu antworten.
+        /* Wir warten auf die Antwort der Suchmaschinen
+         * Die Verbindung steht zu diesem Zeitpunkt und auch unsere Requests wurden schon gesendet.
+         * Wir zählen die Suchmaschinen, die durch den Cache beantwortet wurden:
+         * $enginesToLoad zählt einerseits die Suchmaschinen auf die wir warten und andererseits
+         * welche Suchmaschinen nicht rechtzeitig geantwortet haben.
          */
 
-        # Wir zählen die Suchmaschinen, die durch den Cache beantwortet wurden:
         $enginesToLoad = [];
         $canBreak      = false;
         foreach ($engines as $engine) {
@@ -532,8 +454,6 @@ class MetaGer
                     $canBreak = true;
                 }
             } else {
-                # Das Array zählt einerseits die Suchmaschinen, auf die wir warten und andererseits
-                # welche Suchmaschinen nicht rechtzeitig geantwortet haben.
                 $enginesToLoad[$engine->name] = false;
             }
         }
@@ -543,6 +463,135 @@ class MetaGer
         $this->retrieveResults($engines);
     }
 
+    # Spezielle Suchen und Sumas
+
+    public function sumaIsSelected($suma, $request)
+    {
+        if ($this->fokus === "angepasst") {
+            if ($request->has($suma["name"])) {
+                return true;
+            }
+        } else {
+            $types = explode(",", $suma["type"]);
+            if (in_array($this->fokus, $types)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public function actuallyCreateSearchEngines($enabledSearchengines, $siteSearchFailed)
+    {
+        $engines = [];
+        foreach ($enabledSearchengines as $engine) {
+
+            # Wenn diese Suchmaschine gar nicht eingeschaltet sein soll
+            if (!$siteSearchFailed
+                && strlen($this->site) > 0
+                && (!isset($engine['hasSiteSearch'])
+                    || $engine['hasSiteSearch']->__toString() === "0")) {
+                continue;
+            }
+
+            # Setze Pfad zu Parser
+            $path = "App\Models\parserSkripte\\" . ucfirst($engine["package"]->__toString());
+
+            # Prüfe ob Parser vorhanden
+            if (!file_exists(app_path() . "/Models/parserSkripte/" . ucfirst($engine["package"]->__toString()) . ".php")) {
+                Log::error(trans('metaGer.engines.noParser', ['engine' => $engine["name"]]));
+                continue;
+            }
+
+            # Es wird versucht die Suchengine zu erstellen
+            $time = microtime();
+            try {
+                $tmp = new $path($engine, $this);
+            } catch (\ErrorException $e) {
+                Log::error(trans('metaGer.engines.cantQuery', ['engine' => $engine["name"], 'error' => var_dump($e)]));
+                continue;
+            }
+
+            # Ausgabe bei Debug-Modus
+            if ($tmp->enabled && isset($this->debug)) {
+                $this->warnings[] = $tmp->service . "   Connection_Time: " . $tmp->connection_time . "    Write_Time: " . $tmp->write_time . " Insgesamt:" . ((microtime() - $time) / 1000);
+            }
+
+            # Wenn die neu erstellte Engine eingeschaltet ist, wird sie der Liste hinzugefügt
+            if ($tmp->isEnabled()) {
+                $engines[] = $tmp;
+            }
+        }
+        return $engines;
+    }
+
+    public function isBildersuche()
+    {
+        return $this->fokus !== "bilder";
+    }
+
+    public function sumaIsAdsuche($suma, $overtureEnabled)
+    {
+        return
+        $suma["name"]->__toString() === "qualigo"
+        || $suma["name"]->__toString() === "similar_product_ads"
+        || (!$overtureEnabled
+            && $suma["name"]->__toString() === "overtureAds")
+        || $suma["name"]->__toString() == "rlvproduct";
+    }
+
+    public function sumaIsDisabled($suma)
+    {
+        return
+        isset($suma['disabled'])
+        && $suma['disabled']->__toString() === "1";
+    }
+
+    public function sumaIsOverture($suma)
+    {
+        return
+        $suma["name"]->__toString() === "overture"
+        || $suma["name"]->__toString() === "overtureAds";
+    }
+
+    public function sumaIsNotAdsuche($suma)
+    {
+        return
+        $suma["name"]->__toString() !== "qualigo"
+        && $suma["name"]->__toString() !== "similar_product_ads"
+        && $suma["name"]->__toString() !== "overtureAds";
+    }
+
+    public function requestIsCached($request)
+    {
+        return
+        $request->has('next')
+        && Cache::has($request->input('next'))
+        && unserialize(Cache::get($request->input('next')))['page'] > 1;
+    }
+
+    public function getCachedEngines($request)
+    {
+        $next       = unserialize(Cache::get($request->input('next')));
+        $this->page = $next['page'];
+        $engines    = $next['engines'];
+        if (isset($next['startForwards'])) {
+            $this->startForwards = $next['startForwards'];
+        }
+        if (isset($next['startBackwards'])) {
+            $this->startBackwards = $next['startBackwards'];
+        }
+        return $engines;
+    }
+
+    public function loadMiniSucher($xml, $subcollections)
+    {
+        $minisucherEngine             = $xml->xpath('suma[@name="minism"]')[0];
+        $subcollections               = urlencode("(" . implode(" OR ", $subcollections) . ")");
+        $minisucherEngine["formData"] = str_replace("<<SUBCOLLECTIONS>>", $subcollections, $minisucherEngine["formData"]);
+        $minisucherEngine["formData"] = str_replace("<<COUNT>>", sizeof($subcollections) * 10, $minisucherEngine["formData"]);
+        return $minisucherEngine;
+    }
+
     # Passt den Suchfokus an, falls für einen Fokus genau alle vorhandenen Sumas eingeschaltet sind
     public function adjustFocus($sumas, $enabledSearchengines)
     {
@@ -688,9 +737,9 @@ class MetaGer
         $this->engines = $engines;
     }
 
-    /*
-     * Ende
-     */
+/*
+ * Ende Suchmaschinenerstellung und Ergebniserhalt
+ */
 
     public function parseFormData(Request $request)
     {