diff --git a/app/Http/Controllers/StartpageController.php b/app/Http/Controllers/StartpageController.php
index b144a13507e6512d5faa47a0adb7d1b85816331e..9df592c56a618f667d6342144c7357010ba1c717 100644
--- a/app/Http/Controllers/StartpageController.php
+++ b/app/Http/Controllers/StartpageController.php
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use App\Http\Controllers\Controller;
 use Illuminate\Http\Request;
+use Response;
 
 class StartpageController extends Controller
 {
@@ -64,4 +65,35 @@ class StartpageController extends Controller
         \App::setLocale($locale);
         return loadPage($subpage);
     }
+
+    public function loadPlugin(Request $request, $locale = "de")
+    {
+        $requests = $request->all();
+        $params = [];
+        foreach($requests as $key => $value)
+        {
+            if( strpos($key, "param_") === 0 )
+            {
+                $key = substr($key, strpos($key, "param_") + 6 );
+            }
+            $params[$key] = $value;
+        }
+
+        if(!isset($params['focus']))
+            $params['focus'] = 'web';
+        if(!isset($params['encoding']))
+            $params['encoding'] = 'utf8';
+        if(!isset($params['lang']))
+            $params['lang'] = 'all';
+        $params["eingabe"] = "";
+
+
+        $link = action('MetaGerSearch@search', $params);
+
+        $response = Response::make(
+            view('plugin')->with('link', $link), "200");
+        $response->header('Content-Type', "application/xml");
+        return $response;
+        return $link;
+    }
 }
\ No newline at end of file
diff --git a/app/Http/routes.php b/app/Http/routes.php
index cb96a5c7e258c44b2b4be03a722ae4fa04733336..ac4592b65ee7e5d34870b796c653fd05f0194987 100644
--- a/app/Http/routes.php
+++ b/app/Http/routes.php
@@ -101,4 +101,5 @@
 
         Route::get('qt', 'MetaGerSearch@quicktips');
         Route::get('tips', 'MetaGerSearch@tips');
+        Route::get('opensearch.xml', 'StartpageController@loadPlugin');
     });
diff --git a/app/MetaGer.php b/app/MetaGer.php
index 5206bd9ca6787ce862b1d1a24c467869fc789231..9d2a682e58c203626dda6a9045bad1589e1c0213 100644
--- a/app/MetaGer.php
+++ b/app/MetaGer.php
@@ -91,7 +91,13 @@ class MetaGer
             switch ($this->out) 
             {
                 case 'results':
-                    return '';
+                    return view('metager3bilderresults')
+                        ->with('results', $viewResults)
+                        ->with('eingabe', $this->eingabe)
+                        ->with('mobile', $this->mobile)
+                        ->with('warnings', $this->warnings)
+                        ->with('errors', $this->errors)
+                        ->with('metager', $this);
                 default:
                     return view('metager3bilder')
                         ->with('results', $viewResults)
@@ -218,7 +224,6 @@ class MetaGer
 
         #die(SocketRocket::get("tls", "dominik-pfennig.de", "", 443));
 
-
 		# Überprüfe, welche Sumas eingeschaltet sind
         $xml = simplexml_load_file($this->sumaFile);
         $enabledSearchengines = [];
@@ -239,12 +244,12 @@ class MetaGer
             foreach($sumas as $suma)
             {
                 if($request->has($suma["service"]) 
-                	|| ( $this->fokus !== "bilder" 
-                		&& ($suma["name"]->__toString() === "qualigo" 
-                			|| $suma["name"]->__toString() === "similar_product_ads" 
-                			|| ( !$overtureEnabled && $suma["name"]->__toString() === "overtureAds" )
-                			)
-                		)
+                	#|| ( $this->fokus !== "bilder" 
+                	#	&& ($suma["name"]->__toString() === "qualigo" 
+                	#		|| $suma["name"]->__toString() === "similar_product_ads" 
+                	#		|| ( !$overtureEnabled && $suma["name"]->__toString() === "overtureAds" )
+                	#		)
+                	#	)
                     #|| 1 === 1  #Todo: entfernen
                 	){
 
@@ -286,7 +291,7 @@ class MetaGer
             }
         }
 
-        if( ( $this->fokus !== "bilder" && $countSumas <= 0 ) || ( $this->fokus === "bilder" && sizeof($enabledSearchengines) === 0) )
+        if( $countSumas <= 0 )
         {
             $this->errors[] = "Achtung: Sie haben in ihren Einstellungen keine Suchmaschine ausgewählt.";
         }
@@ -316,19 +321,48 @@ class MetaGer
                 $this->sockets[$tmp->name] = $tmp->fp;
             }
 		}
-
         # 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.
-        usleep(500000);
+
         # Jetzt lesen wir alles aus, was da ist und verwerfen den Rest:
-        foreach($engines as $engine)
+        $enginesToLoad = count($engines);
+        $loadedEngines = 0;
+        $time = 0;
+        while( true )
         {
-            $engine->retrieveResults();
+            # Abbruchbedingung
+            if($time < 500)
+            {
+                if($loadedEngines >= $enginesToLoad)
+                    break;
+            }elseif( $time >= 500 && $time < $this->time)
+            {
+                if( ($loadedEngines / ($enginesToLoad * 1.0)) >= 0.8 )
+                    break;
+            }else
+            {
+                break;
+            }
+            foreach($engines as $engine)
+            {
+                if(!$engine->loaded)
+                {
+                    $success = $engine->retrieveResults();
+                    if($engine->loaded)
+                        $loadedEngines += 1;
+                }
+            }
+            usleep(50000);
+            $time += 50;
+        }
+        foreach( $engines as $engine )
+        {
+            if( !$engine->loaded )
+                $engine->shutdown();
         }
-
 
         $this->engines = $engines;
 	}
@@ -393,7 +427,8 @@ class MetaGer
         # Category
         $this->category = $request->input('category', '');
         # Request Times:
-        $this->time = $request->input('time', 1);
+        $this->time = $request->input('time', 1000);
+       
         # Page
         $this->page = $request->input('page', 1);
         # Lang
@@ -416,12 +451,12 @@ class MetaGer
         # Manchmal müssen wir Parameter anpassen um den Sucheinstellungen gerecht zu werden:
         if( $request->has('dart') )
         {
-        	$this->time = 10;
+        	$this->time = 10000;
         	$this->warnings[] = "Hinweis: Sie haben Dart-Europe aktiviert. Die Suche kann deshalb länger dauern und die maximale Suchzeit wurde auf 10 Sekunden hochgesetzt.";
         }
-        if( $this->time < 0 || $this->time > 20 )
+        if( $this->time <= 500 || $this->time > 20000 )
         {
-        	$this->time = 1;
+        	$this->time = 1000;
         }
         if( $request->has('minism') && ( $request->has('fportal') || $request->has('harvest') ) )
         {
@@ -438,7 +473,7 @@ class MetaGer
         }
         if( $request->has('ebay') )
         {
-        	$this->time = 2;
+        	$this->time = 2000;
         	$this->warnings[] = "Hinweis: Sie haben Ebay aktiviert. Die Suche kann deshalb länger dauern und die maximale Suchzeit wurde auf 2 Sekunden hochgesetzt.";
         }
         if( App::isLocale("en") )
diff --git a/app/Models/Searchengine.php b/app/Models/Searchengine.php
index 6e0bdce4b04c9df3c9e3a447d0040257acd6e0e4..3feafc2223a1b2c5bd92e17c43514ede00d9cb37 100644
--- a/app/Models/Searchengine.php
+++ b/app/Models/Searchengine.php
@@ -19,6 +19,7 @@ abstract class Searchengine
 	public $ads = [];
 	public $write_time = 0;
 	public $connection_time = 0;
+	public $loaded = false;
 
 	function __construct(\SimpleXMLElement $engine, MetaGer $metager)
 	{
@@ -231,6 +232,7 @@ abstract class Searchengine
 		// end of headers
 		if(sizeof($headers) > 1){
 			$bodySize = 0;
+			stream_set_blocking($this->fp, 1);
 			if( isset($headers["Transfer-Encoding"]) && $headers["Transfer-Encoding"] === "chunked" )
 			{
 				$body = $this->readChunked();
@@ -245,6 +247,10 @@ abstract class Searchengine
 			{
 				die("Konnte nicht herausfinden, wie ich die Serverantwort von: " . $this->name . " auslesen soll. Header war: " . print_r($headers));
 			}
+			$this->loaded = true;
+		}else
+		{
+			return;
 		}
 
 		Redis::del($this->host . "." . $this->socketNumber);
@@ -253,7 +259,6 @@ abstract class Searchengine
 		{
 			$body = $this->gunzip($body);
 		}
-
 		#print_r($headers);
 		#print($body);
 		#print("\r\n". $bodySize);
@@ -265,6 +270,12 @@ abstract class Searchengine
 		#exit;
 	}
 
+	public function shutdown()
+	{
+		fclose($this->fp);
+		Redis::del($this->host . "." . $this->socketNumber);
+	}
+
 	private function readBody($length)
 	{
 		$theData = '';
diff --git a/public/js/scriptStartPage.js b/public/js/scriptStartPage.js
index 6863515c76a294559e2cf323e108f57c2635014c..b53290789dc48cbe9fbdc12b389b093b014dcfd8 100644
--- a/public/js/scriptStartPage.js
+++ b/public/js/scriptStartPage.js
@@ -50,7 +50,7 @@ function checkPlugin(){
 		$("#plugin-modal .modal-header h4").html("MetaGer zum Firefox hinzufügen");
 		var content = "" +
 				"<ol>" +
-				"<li>Klicken Sie <a href=\"javascript:window.external.AddSearchProvider('https://metager.de/plugins/opensearchplugin.xml')\">hier</a> um MetaGer als Suchmaschine hinzuzufügen.</li>" +
+				"<li>Klicken Sie <a href=\"javascript:window.external.AddSearchProvider($('link[rel=search]').attr('href'))\">hier</a> um MetaGer als Suchmaschine hinzuzufügen.</li>" +
 				"<li>Setzen Sie einen Haken bei \"Diese als aktuelle Suchmaschine setzen\"</li>" +
 				"<li>Klicken Sie auf \"Hinzufügen\"</li>" +
 				"</ol>";
@@ -59,7 +59,7 @@ function checkPlugin(){
 		$("#plugin-modal .modal-header h4").html("MetaGer zum Chrome hinzufügen");
 		var content = "" +
 				"<ol>" +
-				"<li>Klicken Sie <a href=\"javascript:window.external.AddSearchProvider('https://metager.de/plugins/opensearchplugin.xml')\" onclick=\"$('#more').removeClass('hidden');\">hier</a>, um MetaGer als Suchmaschine hinzuzufügen" +
+				"<li>Klicken Sie <a href=\"javascript:window.external.AddSearchProvider($('link[rel=search]').attr('href'))\" onclick=\"$('#more').removeClass('hidden');\">hier</a>, um MetaGer als Suchmaschine hinzuzufügen" +
 				"<ul id=\"more\" class=\"hidden list-unstyled\">" +
 				"<li>Klicken Sie im Popup auf OK</li>" +
 				"<li><small>(Sollte der OK-Knopf deaktiviert sein, ist MetaGer bereits in Ihren Suchmaschinen. Klicken Sie dann auf Abbrechen und fahren mit Schritt 2 fort.)</small></li>" +
@@ -85,7 +85,7 @@ function checkPlugin(){
 		$("#plugin-modal .modal-header h4").html("MetaGer zum Internet Explorer hinzufügen");
 		var content = "" +
 			"<ol>" +
-			"<li>Klicken Sie <a href=\"javascript:window.external.addSearchProvider('https://metager.de/plugins/opensearchplugin.xml');\">hier</a>, um MetaGer als Suchmaschine hinzuzufügen" +
+			"<li>Klicken Sie <a href=\"javascript:window.external.addSearchProvider($('link[rel=search]').attr('href'));\">hier</a>, um MetaGer als Suchmaschine hinzuzufügen" +
 			"<li>Klicken Sie in Ihrem Browser oben rechts auf Extras (<span class=\"glyphicon glyphicon-cog\"></span>)</li>" +
 			"<li>Wählen Sie den Menüpunkt \"Add-Ons verwalten\"</li>" +
 			"<li>Klicken Sie im Bereich Add-On-Typen auf \"Suchanbieter\" und danach im rechten Bereich auf \"MetaGer\"</li>" +
diff --git a/public/js/settings.js b/public/js/settings.js
index 10ab643fd7316fb590d7623bcf55006b81c7da0f..eb7c6f1f3bdbda14cdc32ccc00ced9c3586beafb 100644
--- a/public/js/settings.js
+++ b/public/js/settings.js
@@ -32,6 +32,10 @@ $(document).ready(function(){
 	$("#unten").click(function(){
 		alert("Auf der folgenden Startseite sind Ihre Einstellungen nun einmalig gespeichert. Nach Ihrer ersten Suche sind diese wieder verloren. Wenn Sie diese speichern möchten, können Sie sich allerdings ein Lesezeichnen einrichten.");
 	});
+	$("#plugin").click(function(){
+		$("form").attr('action', '/#plugin-modal');
+		alert("Ihr Browserplugin mit den persönlichen Sucheinstellungen wurde generiert. Folgen Sie bitte der Anleitung auf der folgenden Seite um es zu installieren. Beachten Sie: Zuvor sollten Sie ein eventuell bereits installiertes MetaGer-Plugin entfernen.");
+	});
 });
 
 function tickOptions(){
diff --git a/resources/views/layouts/staticPages.blade.php b/resources/views/layouts/staticPages.blade.php
index 0a2e75344599ed3d51b4b1203b8746e1638e1058..84499f7c13af74f4cbab11fe97b91efd9e2da8b0 100644
--- a/resources/views/layouts/staticPages.blade.php
+++ b/resources/views/layouts/staticPages.blade.php
@@ -12,7 +12,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
         <meta rel="icon" type="image/x-icon" href="/favicon.ico" />
         <meta rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
-        <link rel="search" type="application/opensearchdescription+xml" title="MetaGer: Sicher suchen &amp; finden, Privatsph&auml;re sch&uuml;tzen" href="https://metager.de/plugins/opensearchplugin.xml" />
+        <link rel="search" type="application/opensearchdescription+xml" title="MetaGer: Sicher suchen &amp; finden, Privatsph&auml;re sch&uuml;tzen" href="{{ action('StartpageController@loadPlugin', Request::all()) }}">
         <link href="/css/bootstrap.css" rel="stylesheet" />
         <link href="/css/style.css" rel="stylesheet" />
         @if (isset($css))
diff --git a/resources/views/metager3bilderresults.blade.php b/resources/views/metager3bilderresults.blade.php
new file mode 100644
index 0000000000000000000000000000000000000000..249135498207446410e730e0ac7aaa8e0a251423
--- /dev/null
+++ b/resources/views/metager3bilderresults.blade.php
@@ -0,0 +1,14 @@
+<div id="container">
+@foreach($metager->getResults()->items() as $result)
+	<div class="item">
+		<div class="img">
+			<a href="{{ $result->link }}" target="{{ $metager->getTab() }}">
+			<img src="{{ $metager->getImageProxyLink($result->image) }}" width="150px" alt="Bild nicht gefunden"/>
+			</a>
+		</div>
+	</div>
+@endforeach
+</div>
+<nav class="pager">
+        {!! $metager->getResults()->links() !!}
+</nav>
\ No newline at end of file
diff --git a/resources/views/plugin.blade.php b/resources/views/plugin.blade.php
new file mode 100644
index 0000000000000000000000000000000000000000..197e4f232aa27ad5091b13a8ae7ac030de4bb1c5
--- /dev/null
+++ b/resources/views/plugin.blade.php
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
+	<ShortName>MetaGer</ShortName>
+	<Description>MetaGer: Sicher suchen &amp; finden, Privatsphäre schützen</Description>
+	<Contact>office@suma-ev.de</Contact>
+	<Image width="16" height="16" type="image/x-icon">{{ url('/favicon.ico') }}</Image>
+	<Url type="text/html" template="{{ $link }}{searchTerms}" method="get"></Url>
+	<InputEncoding>UTF-8</InputEncoding>
+</OpenSearchDescription>
\ No newline at end of file
diff --git a/resources/views/settings.blade.php b/resources/views/settings.blade.php
index e97de00646dfd3932d95623f9372953b6de9e734..af180d44a773651200124385f1ddf15c0df14ffa 100644
--- a/resources/views/settings.blade.php
+++ b/resources/views/settings.blade.php
@@ -247,5 +247,6 @@
             <input type="checkbox" name="param_loklak">loklak</label><a class="glyphicon glyphicon-link" target="_blank" href="http://loklak.org/"></a></div></div></div></div>
   <input id="unten" type="submit" class="btn btn-primary" value="Startseite f&uuml;r einmalige Nutzung generieren">
   <input type="button" class="btn btn-primary hidden" id="save" value="Einstellungen dauerhaft speichern">
+  <input id="plugin" type="submit" class="btn btn-primary" value="Plugin mit diesen Einstellungen generieren.">
   <input type="button" class="btn btn-danger hidden" id="reset" value="Einstellungen Zur&uuml;cksetzen"></form>
 @endsection
\ No newline at end of file