diff --git a/app/Http/Controllers/MetaGerSearch.php b/app/Http/Controllers/MetaGerSearch.php
index d1d1f592684015da37811d1e7e0a83d48bdaa1ed..aa4b076a8b8c0e7fd566d56a8a73b96c1a553627 100644
--- a/app/Http/Controllers/MetaGerSearch.php
+++ b/app/Http/Controllers/MetaGerSearch.php
@@ -93,6 +93,21 @@ class MetaGerSearch extends Controller
 
         # Ergebnisse der Suchmaschinen kombinieren:
         $metager->prepareResults($timings);
+        $admitad = [];
+        $adgoal = [];
+        if(!$metager->isApiAuthorized() && !$metager->isDummy()){
+            $newAdmitad = new \App\Models\Admitad($metager);
+            if(!empty($newAdmitad->hash)){
+                $admitad[] = $newAdmitad;
+            }
+            $newAdgoal = new \App\Models\Adgoal($metager);
+            if(!empty($newAdgoal->hash)){
+                $adgoal[] = $newAdgoal;
+            }
+        }
+
+        $metager->parseAffiliates($admitad);
+        $metager->parseAffiliates($adgoal);
 
         $finished = true;
         foreach ($metager->getEngines() as $engine) {
@@ -106,10 +121,8 @@ class MetaGerSearch extends Controller
                 "metager" => [
                     "apiAuthorized" => $metager->isApiAuthorized(),
                 ],
-                "adgoal" => [
-                    "loaded" => $metager->isAdgoalLoaded(),
-                    "adgoalHash" => $metager->getAdgoalHash(),
-                ],
+                "admitad" => $admitad,
+                "adgoal" => $adgoal,
                 "engines" => $metager->getEngines(),
             ], 60 * 60);
         } catch (\Exception $e) {
@@ -190,14 +203,14 @@ class MetaGerSearch extends Controller
 
         $engines = $cached["engines"];
         $adgoal = $cached["adgoal"];
+        $admitad = $cached["admitad"];
         $mg = $cached["metager"];
 
         $metager = new MetaGer(substr($hash, strpos($hash, "loader_") + 7));
         $metager->setApiAuthorized($mg["apiAuthorized"]);
-        $metager->setAdgoalLoaded($adgoal["loaded"]);
-        $metager->setAdgoalHash($adgoal["adgoalHash"]);
 
         $metager->parseFormData($request, false);
+        $metager->setJsEnabled(true);
         # Nach Spezialsuchen überprüfen:
         $metager->checkSpecialSearches($request);
         $metager->restoreEngines($engines);
@@ -210,6 +223,20 @@ class MetaGerSearch extends Controller
         $metager->rankAll();
         $metager->prepareResults();
 
+        if(!$metager->isApiAuthorized() && !$metager->isDummy()){
+            $newAdmitad = new \App\Models\Admitad($metager);
+            if(!empty($newAdmitad->hash)){
+                $admitad[] = $newAdmitad;
+            }
+            $newAdgoal = new \App\Models\Adgoal($metager);
+            if(!empty($newAdgoal->hash)){
+                $adgoal[] = $newAdgoal;
+            }
+        }
+
+        $admitadFinished = $metager->parseAffiliates($admitad);
+        $adgoalFinished = $metager->parseAffiliates($adgoal);
+
         $result = [
             'finished' => true,
             'newResults' => [],
@@ -256,7 +283,7 @@ class MetaGerSearch extends Controller
             }
         }
 
-        if (!$metager->isAdgoalLoaded()) {
+        if (!$adgoalFinished || !$admitadFinished) {
             $finished = false;
         }
 
@@ -273,10 +300,8 @@ class MetaGerSearch extends Controller
             "metager" => [
                 "apiAuthorized" => $metager->isApiAuthorized(),
             ],
-            "adgoal" => [
-                "loaded" => $metager->isAdgoalLoaded(),
-                "adgoalHash" => $metager->getAdgoalHash(),
-            ],
+            "admitad" => $admitad,
+            "adgoal" => $adgoal,
             "engines" => $metager->getEngines(),
         ], 1 * 60);
 
diff --git a/app/Http/Controllers/Stresstest.php b/app/Http/Controllers/Stresstest.php
index a4114a8c6c4c9f7766c78c55a406ead2d65aa7f0..402c4abba5836ebb7354e077700c2e29459766c8 100644
--- a/app/Http/Controllers/Stresstest.php
+++ b/app/Http/Controllers/Stresstest.php
@@ -24,7 +24,6 @@ class Stresstest extends MetaGerSearch
 
         # deactivates adgoal
         $metager->setDummy(true);
-        $metager->setAdgoalHash(true);
 
         parent::search($request, $metager, $timing);
     }
diff --git a/app/MetaGer.php b/app/MetaGer.php
index 1dc4284128df25827ca6090957874baa7b899820..f68f6608100977fc3e88be6500d1cf669bf4f69c 100644
--- a/app/MetaGer.php
+++ b/app/MetaGer.php
@@ -48,6 +48,7 @@ class MetaGer
     protected $availableFoki = [];
     protected $startCount = 0;
     protected $canCache = false;
+    protected $javascript = false;
     # Daten über die Abfrage$
     protected $ip;
     protected $useragent;
@@ -307,33 +308,12 @@ class MetaGer
         if (empty($this->adgoalLoaded)) {
             $this->adgoalLoaded = false;
         }
-        if (!$this->apiAuthorized && !$this->adgoalLoaded && !$this->dummy) {
-            if (empty($this->adgoalHash)) {
-                if (!empty($this->jskey)) {
-                    $js = Redis::connection('cache')->lpop("js" . $this->jskey);
-                    if ($js !== null && boolval($js)) {
-                        $this->javascript = true;
-                    }
-                }
-                $this->adgoalHash = \App\Models\Adgoal::startAdgoal($this->results);
-                if (!empty($timings)) {
-                    $timings["prepareResults"]["started adgoal"] = microtime(true) - $timings["starttime"];
-                }
-            }
-        
-            if (!$this->javascript) {
-                $this->adgoalLoaded = \App\Models\Adgoal::parseAdgoal($this->results, $this->adgoalHash, true);
-                if (!empty($timings)) {
-                    $timings["prepareResults"]["parsed adgoal"] = microtime(true) - $timings["starttime"];
-                }
-            } else {
-                $this->adgoalLoaded = \App\Models\Adgoal::parseAdgoal($this->results, $this->adgoalHash, false);
-                if (!empty($timings)) {
-                    $timings["prepareResults"]["parsed adgoal"] = microtime(true) - $timings["starttime"];
-                }
+
+        if (!empty($this->jskey)) {
+            $js = Redis::connection('cache')->lpop("js" . $this->jskey);
+            if ($js !== null && boolval($js)) {
+                $this->javascript = true;
             }
-        } else {
-            $this->adgoalLoaded = true;
         }
 
         # Human Verification
@@ -435,7 +415,26 @@ class MetaGer
         }
     }
 
-    
+    /**
+     * @param \App\Models\Admitad[] $admitads
+     * @param Boolean $wait Wait for Results?
+     * @return Boolean whether or not all Admitad Objects are finished
+     */
+    public function parseAffiliates(&$affiliates){
+        $wait = false;
+        $finished = true;
+        if(!$this->javascript){
+            $wait = true;
+        }
+        foreach ($affiliates as $affiliate) {
+            $affiliate->fetchAffiliates($wait);
+            $affiliate->parseAffiliates($this->results);
+            if(!$affiliate->finished){
+                $finished = false;
+            }
+        }
+        return $finished;
+    }
 
     public function humanVerification(&$results)
     {
@@ -1718,6 +1717,9 @@ class MetaGer
         $this->results = $results;
     }
 
+    /**
+     * @return \App\Models\Result[]
+     */
     public function getResults()
     {
         return $this->results;
@@ -1891,26 +1893,6 @@ class MetaGer
         return $this->engines;
     }
 
-    public function setAdgoalHash($hash)
-    {
-        $this->adgoalHash = $hash;
-    }
-
-    public function getAdgoalHash()
-    {
-        return $this->adgoalHash;
-    }
-
-    public function isAdgoalLoaded()
-    {
-        return $this->adgoalLoaded;
-    }
-
-    public function setAdgoalLoaded($adgoalLoaded)
-    {
-        $this->adgoalLoaded = $adgoalLoaded;
-    }
-
     public function isApiAuthorized()
     {
         return $this->apiAuthorized;
@@ -1931,6 +1913,17 @@ class MetaGer
         return $this->headerPrinted;
     }
 
+    public function isDummy(){
+        return $this->dummy;
+    }
+
+    public function jsEnabled() {
+        return $this->javascript;
+    }
+    
+    public function setJsEnabled(bool $bool){
+        $this->javascript = $bool;
+    }
     /**
      * Used by JS result loader to restore MetaGer Object of previous request
      */
diff --git a/app/Models/Adgoal.php b/app/Models/Adgoal.php
index 38ecc00bd3bffcdfa1014e4d9e784b7bcfdccd30..dcd1ff07e1fcf826b8873dab058a4dd3c40b269f 100644
--- a/app/Models/Adgoal.php
+++ b/app/Models/Adgoal.php
@@ -22,29 +22,47 @@ class Adgoal
         "lk","sh","kn","lc","pm","vc","sd","sr","za","kr","sz","sy","tj","tw","tz","th","tg","to","tt","td","cz","tn",
         "tm","tc","tv","tr","us","ug","ua","xx","hu","uy","uz","vu","va","ve","ae","vn","wf","cx","by","eh","ww","zr","cf","cy",];
 
-    public static function startAdgoal(&$results)
+
+    public $hash;
+    public $finished = false; // Is true when the Request was sent to and read from Admitad App
+    private $affiliates = null;
+    private $startTime;
+
+    /**
+     * Creates a new Adgoal object which will start a request for affiliate links
+     * based on a result List from MetaGer.
+     * It will parse the Links of the results and query any affiliate shops.
+     * 
+     * @param \App\MetaGer $metager
+     */
+    public function __construct(&$metager)
     {
+        $this->startTime = microtime(true);
         $publicKey = getenv('adgoal_public');
         $privateKey = getenv('adgoal_private');
         if ($publicKey === false) {
             return true;
         }
+        $results = $metager->getResults();
         $linkList = "";
         foreach ($results as $result) {
             if (!$result->new) {
                 continue;
             }
-            $link = $result->link;
+            $link = $result->originalLink;
             if (strpos($link, "http") !== 0) {
                 $link = "http://" . $link;
             }
             $linkList .= $link . ",";
         }
+        if(empty($linkList)){
+            return;
+        }
     
         $linkList = rtrim($linkList, ",");
     
         # Hashwert
-        $hash = md5($linkList . $privateKey);
+        $this->hash = md5($linkList . $privateKey);
     
         $link = "https://xf.gdprvalidate.de/v4/check";
     
@@ -73,14 +91,14 @@ class Adgoal
                 "key" => $publicKey,
                 "panel" => "ZMkW9eSKJS",
                 "member" => "338b9Bnm",
-                "signature" => $hash,
+                "signature" => $this->hash,
                 "links" => $linkList,
                 "country" => $country,
             ];
     
         // Submit fetch job to worker
         $mission = [
-                "resulthash" => $hash,
+                "resulthash" => $this->hash,
                 "url" => $link,
                 "useragent" => "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0",
                 "username" => null,
@@ -97,76 +115,86 @@ class Adgoal
             ];
         $mission = json_encode($mission);
         Redis::rpush(\App\MetaGer::FETCHQUEUE_KEY, $mission);
-    
-        return $hash;
     }
-    
-    public static function parseAdgoal(&$results, $hash, $waitForResult)
-    {
-        # Wait for result
-        $startTime = microtime(true);
-        $answer = null;
-    
-        # Hash is true if Adgoal request wasn't started in the first place
-        if ($hash === true) {
-            return true;
+
+    public function fetchAffiliates($wait = false){
+        if($this->affiliates !== null){
+            return;
         }
-            
-        if ($waitForResult) {
+
+        $answer = null;
+        $startTime = microtime(true);
+        if($wait){
             while (microtime(true) - $startTime < 5) {
-                $answer = Cache::get($hash);
+                $answer = Cache::get($this->hash);
                 if ($answer === null) {
                     usleep(50 * 1000);
                 } else {
                     break;
                 }
             }
-        } else {
-            $answer = Cache::get($hash);
+        }else{
+            $answer = Cache::get($this->hash);
         }
-        if ($answer === null) {
-            return false;
+        $answer = json_decode($answer, true);
+        
+        // If the fetcher had an Error
+        if($answer === "no-result"){
+            $this->affiliates = [];
+            return;
+        }
+
+        if(empty($answer) || !is_array($answer)){
+            return;
         }
-            
-        try {
-            $answer = json_decode($answer, true);
 
-            foreach ($answer as $partnershop) {
-                $targetUrl = $partnershop["url"];
+        $this->affiliates = $answer;
+    }
     
-                $tld = $partnershop["tld"];
-                $targetHost = parse_url($targetUrl, PHP_URL_HOST);
+    /**
+     * Converts all Affiliate Links.
+     * 
+     * @param \App\Models\Result[] $results
+     */
+    public function parseAffiliates(&$results)
+    {
+        if($this->finished || $this->affiliates === null){
+            return;
+        }
+            
+        foreach ($this->affiliates as $partnershop) {
+            $targetUrl = $partnershop["url"];
 
-                /*
-                    Adgoal sometimes returns affiliate Links for every URL
-                    That's why we check if the corresponding TLD matches the orginial URL
-                */
-                if($targetHost !== false && stripos($targetHost, $tld) === false){
-                    continue;
-                }
+            $tld = $partnershop["tld"];
+            $targetHost = parse_url($targetUrl, PHP_URL_HOST);
 
-                foreach ($results as $result) {
-                    if ($result->link === $targetUrl && !$result->partnershop) {
-                        # Ein Advertiser gefunden
-                        if ($result->image !== "") {
-                            $result->logo = $partnershop["logo"];
-                        } else {
-                            $result->image = $partnershop["logo"];
-                        }
-    
-                        # Den Link hinzufügen:
-                        $result->link = $partnershop["click_url"];
-                        $result->partnershop = true;
-                        $result->changed = true;
+            /*
+                Adgoal sometimes returns affiliate Links for every URL
+                That's why we check if the corresponding TLD matches the orginial URL
+            */
+            if($targetHost !== false && stripos($targetHost, $tld) === false){
+                continue;
+            }
+            $preference = config("metager.metager.affiliate_preference", "adgoal");
+            foreach ($results as $result) {
+                if ($result->originalLink === $targetUrl && (config("metager.metager.affiliate_preference", "adgoal") === "adgoal" || !$result->partnershop)) {
+                    # Ein Advertiser gefunden
+                    if ($result->image !== "" && !$result->partnershop) {
+                        $result->logo = $partnershop["logo"];
+                    } else {
+                        $result->image = $partnershop["logo"];
                     }
+
+                    # Den Link hinzufügen:
+                    $result->link = $partnershop["click_url"];
+                    $result->partnershop = true;
+                    $result->changed = true;
                 }
             }
-        } catch (\ErrorException $e) {
-            Log::error($e->getMessage());
-        } finally {
-            $requestTime = microtime(true) - $startTime;
-            \App\PrometheusExporter::Duration($requestTime, "adgoal");
         }
-        return true;
+    
+        $requestTime = microtime(true) - $this->startTime;
+        \App\PrometheusExporter::Duration($requestTime, "adgoal");
+        $this->finished = true;
     }
 }
diff --git a/app/Models/Admitad.php b/app/Models/Admitad.php
new file mode 100644
index 0000000000000000000000000000000000000000..67546117eec329577a481ba147354671fc3d8b96
--- /dev/null
+++ b/app/Models/Admitad.php
@@ -0,0 +1,154 @@
+<?php
+
+namespace App\Models;
+
+use Cache;
+use Log;
+use LaravelLocalization;
+use Illuminate\Support\Facades\Redis;
+
+class Admitad
+{
+    const VALID_LANGS = [
+        "de",
+        "en"
+    ];
+
+    public $hash;
+    public $finished = false; // Is true when the Request was sent to and read from Admitad App
+    private $affiliates = null;
+
+    /**
+     * Creates a new Admitad object which will start a request for affiliate links
+     * based on a result List from MetaGer.
+     * It will parse the Links of the results and query any affiliate shops.
+     * 
+     * @param \App\MetaGer $metager
+     */
+    public function __construct(&$metager)
+    {
+        $results = $metager->getResults();
+        // Generate a list of URLs
+        $resultLinks = [];
+        foreach($results as $result){
+            if ($result->new) {
+                $resultLinks[] = $result->originalLink;
+            }
+        }
+
+        if(empty($resultLinks)){
+            return;
+        }
+
+        $lang = LaravelLocalization::getCurrentLocale();
+        if(!in_array($lang, self::VALID_LANGS)){
+            $lang = "de";
+        }
+
+        $requestData = [
+            "lang" => $lang,
+            "urls" => $resultLinks,
+        ];
+        $requestData = json_encode($requestData);
+        $this->hash = md5($requestData);
+
+        $url = "https://direct.metager.de/check";
+        $token = env("ADMITAD_TOKEN", "");
+
+        // Submit fetch job to worker
+        $mission = [
+            "resulthash" => $this->hash,
+            "url" => $url,
+            "useragent" => "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0",
+            "username" => null,
+            "password" => null,
+            "headers" => [
+                "Authorization" => "Bearer $token"
+            ],
+            "cacheDuration" => 60,
+            "name" => "Admitad",
+            "curlopts" => [
+                CURLOPT_POST => true,
+                CURLOPT_POSTFIELDS => $requestData
+            ]
+        ];
+        $mission = json_encode($mission);
+        Redis::rpush(\App\MetaGer::FETCHQUEUE_KEY, $mission);
+    }
+
+    /**
+     * Fetches the Admitad Response from Redis
+     * @param Boolean $wait Whether or not to wait for a response
+     */
+    public function fetchAffiliates($wait = false) {
+        if($this->affiliates !== null){
+            return;
+        }
+
+        $answer = null;
+        $startTime = microtime(true);
+        if($wait){
+            while (microtime(true) - $startTime < 5) {
+                $answer = Cache::get($this->hash);
+                if ($answer === null) {
+                    usleep(50 * 1000);
+                } else {
+                    break;
+                }
+            }
+        }else{
+            $answer = Cache::get($this->hash);
+        }
+        $answer = json_decode($answer, true);
+        
+        // If the fetcher had an Error
+        if($answer === "no-result"){
+            $this->affiliates = [];
+            return;
+        }
+
+        if(empty($answer) || !isset($answer["error"]) || $answer["error"] || !is_array($answer["result"])){
+            return;
+        }
+
+        $this->affiliates = $answer["result"];
+    }
+
+    /**
+     * Converts all Affiliate Links.
+     * 
+     * @param \App\Models\Result[] $results
+     */
+    public function parseAffiliates(&$results){
+        if($this->finished || $this->affiliates === null){
+            return;
+        }
+        foreach($this->affiliates as $linkResult){
+            $originalUrl = $linkResult["originalUrl"];
+            $redirUrl = $linkResult["redirUrl"];
+            $image = $linkResult["image"];
+
+            if(empty($redirUrl)){
+                // No Partnershop
+                continue;
+            }
+
+            foreach ($results as $result) {
+                if ($result->originalLink === $originalUrl && (config("metager.metager.affiliate_preference", "adgoal") === "admitad" || !$result->partnershop)) {
+                    # Ein Advertiser gefunden
+                    if ($result->image !== "" && !$result->partnershop) {
+                        $result->logo = $image;
+                    } else {
+                        $result->image = $image;
+                    }
+
+                    # Den Link hinzufügen:
+                    $result->link = $redirUrl;
+                    $result->partnershop = true;
+                    $result->changed = true;
+                }
+            }
+        }
+        $this->finished = true;
+    }
+}
diff --git a/app/Models/Result.php b/app/Models/Result.php
index c4a3ef48cea7e8b430adb54c512acfd752cf318d..9465794d8727a7dd01081c20503c1b559f1f66e9 100644
--- a/app/Models/Result.php
+++ b/app/Models/Result.php
@@ -9,6 +9,7 @@ class Result
 {
     public $provider; # Die Engine von der das Suchergebnis kommt
     public $titel; # Der Groß Angezeigte Name für das Suchergebnis
+    public $originalLink;
     public $link; # Der Link auf die Ergebnisseite
     public $anzeigeLink; # Der tatsächlich angezeigte Link (rein optisch)
     public $descr; # Die eventuell gekürzte Beschreibung des Suchergebnisses
@@ -41,6 +42,7 @@ class Result
         $this->provider = $provider;
         $this->titel = $this->sanitizeText(strip_tags(trim($titel)));
         $this->link = trim($link);
+        $this->originalLink = trim($link);
         $this->anzeigeLink = trim($anzeigeLink);
         $this->anzeigeLink = preg_replace("/(http[s]{0,1}:\/\/){0,1}(www\.){0,1}/si", "", $this->anzeigeLink);
         $this->descr = $this->sanitizeText(strip_tags(trim($descr), '<p>'));
diff --git a/config/metager/metager.php b/config/metager/metager.php
index fda3d2ee5f774fc260638f5e408a3245d26a6feb..583e6a9a7cbea3d1a451b6d77c934a05c2e650b9 100644
--- a/config/metager/metager.php
+++ b/config/metager/metager.php
@@ -6,4 +6,5 @@ return [
         "w3m\/",
     ],
     "fail2ban_enabled" => true,
+    "affiliate_preference" => "adgoal",
 ];
diff --git a/resources/lang/de/partnershops.php b/resources/lang/de/partnershops.php
index c3c8427de6b8ef909be3777d9f6b4bb7fc6e55cf..ae57c49ad510969ac68478439281855bd6240103 100644
--- a/resources/lang/de/partnershops.php
+++ b/resources/lang/de/partnershops.php
@@ -3,6 +3,6 @@
 return [
     'heading'     => 'MetaGer-Partnershop',
     'paragraph.1' => 'Wenn in der MetaGer-Ergebnisliste Links erscheinen, bei denen das Wort "Partnershop" steht, dann sind das zunächst normale Ergebnisse einer MetaGer-Suche. Sie werden im Ranking nicht bevorzugt oder höher eingestuft, sondern wie alle anderen Suchergebnisse auch behandelt.',
-    'paragraph.2' => 'Hinter diesem Link steht dann eine Firma, von der wir dann, wenn der Link angeklickt wird, einen geringen Betrag zur Finanzierung von MetaGer erhalten. Beim Ergebnis wird das zugehörige Firmenlogo angezeigt. Auch daran erkennen Sie immer unsere Partnershops. Beim Anklicken (und nur dann) eines solchen Ergebnisses werden auch Nutzerdaten an die Klickadresse weitergegeben. Zu diesen Nutzerdaten gehören auch die Suchbegriffe, die Sie auf MetaGer eingegeben haben, in Verbindung mit Ihrer IP-Adresse. Wenn Sie dies vermeiden wollen, dann können Sie bei MetaGer aber auf "anonym&nbspöffnen" klicken. Sie müssen also auch dabei Ihre Daten nicht weitergeben. Allerdings erhalten wir dann auch keinen Beitrag zur Finanzierung von MetaGer. Wir bitten Sie dann um eine Spende, damit wir MetaGer als unabhängige Alternative in einem gemeinnützigen Verein weiter entwickeln und betreiben können: <a href="/spende">www.metager.de/spende</a>',
+    'paragraph.2' => 'Wenn der Link angeklickt wird, erhalten wir einen geringen Betrag zur Finanzierung von MetaGer. Beim Ergebnis wird das zugehörige Firmenlogo angezeigt. Auch daran erkennen Sie immer unsere Partnershops. Beim Anklicken eines solchen Ergebnisses, werden Sie auf einen unserer Dienste "direct.metager.de" geleitet. Dieser kommuniziert anschließend mit unserem Werbenetzwerk, um einen Affiliate Link zu generieren. Dabei werden keine Nutzerdaten weitergegeben. Anschließend leiten wir Sie direkt zur Zielwebseite weiter. Wenn Sie dies vermeiden wollen, dann können Sie bei MetaGer auf "anonym öffnen" klicken. Allerdings erhalten wir dann auch keinen Beitrag zur Finanzierung von MetaGer. Wir bitten Sie dann um eine <a href=":link">Spende</a>, damit wir MetaGer als unabhängige Alternative in einem gemeinnützigen Verein weiter entwickeln und betreiben können.',
     'paragraph.3' => 'Mitglieder des SUMA_EV können unsere werbefreie Suche nutzen. <a href="/beitritt">Werden Sie Mitglied!</a>',
 ];
diff --git a/resources/lang/en/partnershops.php b/resources/lang/en/partnershops.php
index 597456c52f123ac38a0c937110abc37972c2ce16..2f6d8371b66a438137bee590d8723003e7abacf4 100644
--- a/resources/lang/en/partnershops.php
+++ b/resources/lang/en/partnershops.php
@@ -3,6 +3,6 @@
 return [
     'heading'     => "MetaGer-Partnershop",
     'paragraph.1' => "Whenever you see results with a label that says 'Partnershop', this is just a regular result. It is not ranked differently or prefered.",
-    'paragraph.2' => "The result link is associated with a company that pays us a small amount for every time the link is clicked, so that MetaGer can be financed. The result also shows the company's logo. Your data is only transmitted to te websites of these companies when you click the result. The transmitted data includes your MetaGer search phrase and your IP address. In order to avoid the transmission of such data, you may use the 'OPEN ANONYMOUSLY' button, but if you do so, we do not get paid for the click. In that case we would really encourage you to donate, so that MetaGer can we maintained and developed further on.",
-    'paragraph.3' => 'SUMA-EV members may use our ad-free search. <a href="/beitritt>Become a Member</a>',
+    'paragraph.2' => 'If the link is clicked, we will receive a small amount to finance MetaGer. The corresponding company logo is displayed with the result. You can always recognize our partner shops by this. If you click on such a result, you will be directed to one of our services "direct.metager.de". This then communicates with our advertising network in order to generate an affiliate link. No user data will be passed on. We will then redirect you directly to the target website. If you want to avoid this, you can click on "Open anonymously" at MetaGer. However, we will then not receive any contribution to the financing of MetaGer. We then ask for a <a href=":link"> donation </a> so that we can continue to develop and operate MetaGer as an independent alternative in a non-profit organization.',
+    'paragraph.3' => 'SUMA-EV members may use our ad-free search. <a href=":link">Become a Member</a>',
 ];
diff --git a/resources/views/spende/partnershops.blade.php b/resources/views/spende/partnershops.blade.php
index 4d4342df44d90fcce59ee721b7bd781af06b87b8..96e9391d3b0f9b692f324517df4e7809da2c64c4 100644
--- a/resources/views/spende/partnershops.blade.php
+++ b/resources/views/spende/partnershops.blade.php
@@ -5,8 +5,10 @@
 @section('navbarFocus.datenschutz', 'class="active"')
 
 @section('content')
-	<h1>{{ trans('partnershops.heading') }}</h1>
-	<p>{{ trans('partnershops.paragraph.1') }}</p>
-	<p>{!! trans('partnershops.paragraph.2') !!}</p>
-	<p>{!! trans('partnershops.paragraph.3') !!}</p>
+	<div class="card-heavy">
+		<h1>{{ trans('partnershops.heading') }}</h1>
+		<p>{{ trans('partnershops.paragraph.1') }}</p>
+		<p>{!! trans('partnershops.paragraph.2', ["link" => LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route("spende"))]) !!}</p>
+		<p>{!! trans('partnershops.paragraph.3', ["link" => LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route("beitritt"))]) !!}</p>
+	</div>
 @endsection
diff --git a/routes/web.php b/routes/web.php
index a02f40bd6a67967e6013ae98d1933fa67fb99912..e13a59e537b05f88883f7977e0f24df404b3abbf 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -86,7 +86,7 @@ Route::group(
                 ->with('title', trans('titles.spende'))
                 ->with('js', [mix('/js/donation.js')])
                 ->with('navbarFocus', 'foerdern');
-        });
+        })->name("spende");
         Route::get('spende/danke/{data}', ['as' => 'danke', function ($data) {
             return view('spende.danke')
                 ->with('title', trans('titles.spende'))
@@ -106,7 +106,7 @@ Route::group(
             } else {
                 return response()->download(storage_path('app/public/aufnahmeantrag-en.pdf'), "SUMA-EV_Membershipform_" . (new \DateTime())->format("Y_m_d") . ".pdf", ["Content-Type" => "application/pdf"]);
             }
-        });
+        })->name("beitritt");
 
         Route::get('bform1.htm', function () {
             return redirect('beitritt');