diff --git a/app/MetaGer.php b/app/MetaGer.php
index e89928a242337abbfb7bad479d825151cc1f2287..1ae4df358eb0d7753eadddaefd7aff9f4aaeff5b 100644
--- a/app/MetaGer.php
+++ b/app/MetaGer.php
@@ -854,10 +854,7 @@ class MetaGer
         }
         # Sucheingabe
         $this->eingabe = trim($request->input('eingabe', ''));
-        if (strlen($this->eingabe) === 0) {
-            $this->warnings[] = trans('metaGer.formdata.noSearch');
-        }
-        $this->q = $this->eingabe;
+        $this->q       = strtolower($this->eingabe);
         # IP
         $this->ip = $request->ip();
         # Language
@@ -959,15 +956,13 @@ class MetaGer
         $this->searchCheckDomainBlacklist();
         $this->searchCheckPhrase();
         $this->searchCheckStopwords();
-
-        if ($this->q === "") {
-            $this->warnings[] = trans('metaGer.formdata.noSearch');
-        }
+        $this->searchCheckNoSearch();
     }
 
     public function searchCheckSitesearch($site)
     {
-        if (preg_match("/(.*)\bsite:(\S+)(.*)/si", $this->q, $match)) {
+        // matches '[... ]site:test.de[ ...]'
+        while (preg_match("/(^|.+\s)site:(\S+)(?:\s(.+)|($))/si", $this->q, $match)) {
             $this->site = $match[2];
             $this->q    = $match[1] . $match[3];
         }
@@ -978,9 +973,10 @@ class MetaGer
 
     public function searchCheckHostBlacklist()
     {
-        while (preg_match("/(.*)(^|\s)-host:(\S+)(.*)/si", $this->q, $match)) {
-            $this->hostBlacklist[] = $match[3];
-            $this->q               = $match[1] . $match[4];
+        // matches '[... ]-site:test.de[ ...]'
+        while (preg_match("/(^|.+\s)-site:([^\s\*]\S*)(?:\s(.+)|($))/si", $this->q, $match)) {
+            $this->hostBlacklist[] = $match[2];
+            $this->q               = $match[1] . $match[3];
         }
         if (sizeof($this->hostBlacklist) > 0) {
             $hostString = "";
@@ -994,9 +990,10 @@ class MetaGer
 
     public function searchCheckDomainBlacklist()
     {
-        while (preg_match("/(.*)(^|\s)-domain:(\S+)(.*)/si", $this->q, $match)) {
-            $this->domainBlacklist[] = $match[3];
-            $this->q                 = $match[1] . $match[4];
+        // matches '[... ]-site:*.test.de[ ...]'
+        while (preg_match("/(^|.+\s)-site:\*\.(\S+)(?:\s(.+)|($))/si", $this->q, $match)) {
+            $this->domainBlacklist[] = $match[2];
+            $this->q                 = $match[1] . $match[3];
         }
         if (sizeof($this->domainBlacklist) > 0) {
             $domainString = "";
@@ -1010,9 +1007,10 @@ class MetaGer
 
     public function searchCheckStopwords()
     {
-        while (preg_match("/(.*)(^|\s)-(\S+)(.*)/si", $this->q, $match)) {
-            $this->stopWords[] = $match[3];
-            $this->q           = $match[1] . $match[4];
+        // matches '[... ]-test[ ...]'
+        while (preg_match("/(^|.+\s)-(\S+)(?:\s(.+)|($))/si", $this->q, $match)) {
+            $this->stopWords[] = $match[2];
+            $this->q           = $match[1] . $match[3];
         }
         if (sizeof($this->stopWords) > 0) {
             $stopwordsString = "";
@@ -1028,7 +1026,8 @@ class MetaGer
     {
         $p   = "";
         $tmp = $this->q;
-        while (preg_match("/(.*)\"(.+)\"(.*)/si", $tmp, $match)) {
+        // matches '[... ]"test satz"[ ...]'
+        while (preg_match("/(^|.+\s)\"(.+)\"(?:\s(.+)|($))/si", $tmp, $match)) {
             $tmp             = $match[1] . $match[3];
             $this->phrases[] = strtolower($match[2]);
         }
@@ -1041,6 +1040,13 @@ class MetaGer
         }
     }
 
+    public function searchCheckNoSearch()
+    {
+        if ($this->q === "") {
+            $this->warnings[] = trans('metaGer.formdata.noSearch');
+        }
+    }
+
     public function nextSearchLink()
     {
         if (isset($this->next) && isset($this->next['engines']) && count($this->next['engines']) > 0) {
@@ -1214,7 +1220,7 @@ class MetaGer
     {
         $host        = urlencode($host);
         $requestData = $this->request->except(['page', 'out', 'next']);
-        $requestData['eingabe'] .= " -host:$host";
+        $requestData['eingabe'] .= " -site:$host";
         $link = action('MetaGerSearch@search', $requestData);
         return $link;
     }
@@ -1223,7 +1229,7 @@ class MetaGer
     {
         $domain      = urlencode($domain);
         $requestData = $this->request->except(['page', 'out', 'next']);
-        $requestData['eingabe'] .= " -domain:$domain";
+        $requestData['eingabe'] .= " -site:*.$domain";
         $link = action('MetaGerSearch@search', $requestData);
         return $link;
     }
diff --git a/resources/lang/de/hilfe.php b/resources/lang/de/hilfe.php
index 29cdf0db557ac667aeeccf629579f8a8f21bbec8..1c8094a926a9e339d85932ef91f8bae2c02b858f 100644
--- a/resources/lang/de/hilfe.php
+++ b/resources/lang/de/hilfe.php
@@ -23,25 +23,28 @@ return [
     "grossklein.title"               => "Groß-/ Kleinschreibung",
     "grossklein.1"                   => "Groß- und Kleinschreibung wird bei der Suche nicht unterschieden, es handelt sich um eine rein inhaltliche Suche.",
     "grossklein.2"                   => "Beispiel: Die Suche nach <div class=\"well well-sm\">großschreibung</div> liefert genau die gleichen Ergebnisse wie <div class=\"well well-sm\">GROßSCHREIBUNG</div>",
+
     "domains.title"                  => "Suche auf Domains beschränken / Domains ausschließen",
     "domains.sitesearch.explanation" => "Wenn Sie Ihre Suche nur auf Ergebnisse von einer bestimmten Domain (z.B. wikipedia.org) beschränken möchten, können Sie dies erreichen indem Sie Ihrer Suche site:<i>ihre-domain.de</i> hinzufügen.",
     "domains.sitesearch.example.1"   => "Beispiel: Sie möchten nur noch Ergebnisse von der deutschen Wikipedia (de.wikipedia.org) erhalten. Ihre Suche lautet also:",
     "domains.sitesearch.example.2"   => "<i>meine suche</i> site:de.wikipedia.org",
     "domains.sitesearch.example.3"   => "Beispiel: Sie möchten auch Ergebnisse von Wikipedia in anderen Sprachen (wikipedia.org) erhalten. Ihre Suche lautet also:",
     "domains.sitesearch.example.4"   => "<i>meine suche</i> site:wikipedia.org",
-    "domains.blacklist.explanation"  => "Manchmal kann es auch passieren, dass Sie Ergebnisse einer bestimmten Domain nicht mehr sehen möchten. In diesem Fall haben Sie zwei Möglichkeiten: Den Ausschluss eines Hosts und den Ausschluss einer Domain. Dies erreichen Sie, indem Sie -host:<i>unterseite.ihre-seite.de</i> beziehungsweise -domain:<i>ihre-seite.de</i> zu Ihrer Suche hinzufügen.",
+
+    "domains.blacklist.explanation"  => "Manchmal kann es auch passieren, dass Sie Ergebnisse einer bestimmten Domain nicht mehr sehen möchten. In diesem Fall haben Sie zwei Möglichkeiten: Den Ausschluss einer Subdomain und den Ausschluss einer Top-Level-Domain. Dies erreichen Sie, indem Sie -site:<i>unterseite.ihre-seite.de</i> beziehungsweise -site:*.<i>ihre-seite.de</i> zu Ihrer Suche hinzufügen.",
     "domains.blacklist.example.1"    => "Beispiel: Sie haben genug von den ganzen Wikipedia-Ergebnissen. Nun haben Sie zwei Möglichkeiten:",
     "domains.blacklist.example.2"    => "Sie schließen alle Ergebnisse von der deutschen Wikipedia-Domain, also de.wikipedia.org, aus",
-    "domains.blacklist.example.3"    => "<i>meine suche</i> -host:de.wikipedia.org",
+    "domains.blacklist.example.3"    => "<i>meine suche</i> -site:de.wikipedia.org",
     "domains.blacklist.example.4"    => "Sie erhalten nun weiterhin Ergebnisse von beispielsweise en.wikipedia.org, solange diese zu Ihrer Suche passen",
     "domains.blacklist.example.5"    => "Sie schließen generell alle Ergebnisse von allen Wikipedia-Domains aus",
-    "domains.blacklist.example.6"    => "<i>meine suche</i> -domain:wikipedia.org",
-    "domains.showcase.explanation.1" => "Zusätzlich bieten wir Ihnen die Möglichkeit Hosts beziehungsweise Domains direkt auf der Ergebnisseite auszuschließen. Bei jedem unserer Ergebnisse erscheint dieses kleine Symbol für die Optionen:",
+    "domains.blacklist.example.6"    => "<i>meine suche</i> -site:*.wikipedia.org",
+    "domains.showcase.explanation.1" => "Zusätzlich bieten wir Ihnen die Möglichkeit Subdomains beziehungsweise Top-Level-Domains direkt auf der Ergebnisseite auszuschließen. Bei jedem unserer Ergebnisse erscheint dieses kleine Symbol für die Optionen:",
     "domains.showcase.explanation.2" => "Wenn Sie auf dieses Symbol klicken, erscheint folgendes Menü:",
     "domains.showcase.menu.1"        => "Mit diesem Menü lassen sich:",
     "domains.showcase.menu.2"        => "Eine neue Suche nur auf der Domain des Ergebnisses (de.wikipedia.de) starten",
     "domains.showcase.menu.3"        => "Eine Suche ohne Ergebnisse der Subdomain (de.wikipedia.de) starten",
     "domains.showcase.menu.4"        => "Eine Suche ohne Ergebnisse der Top-Level-Domain (wikipedia.de) starten",
+
     "dienste"                        => "Weitere Dienste um die Suche herum",
     "app.title"                      => "Android-App",
     "app.1"                          => "Sie können MetaGer auch als App nutzen. Laden Sie sich dazu einfach die <a href=\"https://play.google.com/store/apps/details?id=de.metager.metagerapp\" target=\"_blank\" rel=\"noopener\">MetaGer App</a> auf ihr Android Smartphone.",
diff --git a/resources/lang/en/hilfe.php b/resources/lang/en/hilfe.php
index 6717328d864f0734724076911151892a90396167..e865c28fb0358176990d4f8f6fd262479aee599d 100644
--- a/resources/lang/en/hilfe.php
+++ b/resources/lang/en/hilfe.php
@@ -29,13 +29,13 @@ return [
     "domains.sitesearch.example.2"   => "<i>my search words</i> site:en.wikipedia.org",
     "domains.sitesearch.example.3"   => "Example: Restriction to wikipedia but all languages:",
     "domains.sitesearch.example.4"   => "Type: <i>my search words</i> site:wikipedia.org",
-    "domains.blacklist.explanation"  => "Exclude a specific domain: Either the exclusion of a host or of a domain. Type <i>my search words</i> -host:<i>en.wikipedia.org</i> or <i>my search words</i> -domain:<i>wikipedia.org</i>",
-    "domains.blacklist.example.1"    => "Example: You don't want to get results from Wikipedia. There are two possibilities:",
+    "domains.blacklist.explanation"  => "Exclude a specific domain: Either the exclusion of a subdomain or of a top level domain. Type <i>my search words</i> -site:<i>en.wikipedia.org</i> or <i>my search words</i> -site:*.<i>wikipedia.org</i>",
+    "domains.blacklist.example.1"    => "Example: You do not want to get results from Wikipedia. There are two possibilities:",
     "domains.blacklist.example.2"    => "Exclude results from the english Wikipedia (domain) so <i>en.wikipedia.org</i>",
-    "domains.blacklist.example.3"    => "<i>my search words</i> -host:<i>en.wikipedia.org</i>",
+    "domains.blacklist.example.3"    => "<i>my search words</i> -site:<i>en.wikipedia.org</i>",
     "domains.blacklist.example.4"    => "You get results from e.g. de.wikipedia.org further on.",
     "domains.blacklist.example.5"    => "Exclude all results of all wikipedia domains:",
-    "domains.blacklist.example.6"    => "<i>my search words</i> -domain:<i>wikipedia.org</i>",
+    "domains.blacklist.example.6"    => "<i>my search words</i> -site:*.<i>wikipedia.org</i>",
     "domains.showcase.explanation.1" => "Additionally there is the option to exclude hosts or domains on the result page: All of the results have the small triangle sign:",
     "domains.showcase.explanation.2" => "Click for the menu shown below:",
     "domains.showcase.menu.1"        => "Decide here:",
diff --git a/tests/MetaGerPhpTest.php b/tests/MetaGerPhpTest.php
index 845e7b97518b73b9541da7d536ceac475715ed7b..eb707fc55fc4f728c58d3c3d9431014117a18291 100644
--- a/tests/MetaGerPhpTest.php
+++ b/tests/MetaGerPhpTest.php
@@ -43,20 +43,14 @@ class MetaGerPhpTest extends TestCase
     // Testet das erkennen von Spezialsuchen in verschiedenen Sucheingaben
     public function specialSearchTest()
     {
-        $metager = new MetaGer();
-        $request = new Request(['eingabe' => 'suchwort -blackword -host:blackhost -domain:blackdomain site:wantsite "i want phrase"']);
-        $metager->parseFormData($request);
-        $metager->checkSpecialSearches($request);
+        $metager = $this->createSpecialSearchMetager('suchwort -blackword -site:blackhost -site:*.blackdomain site:wantsite "i want phrase"');
         $this->assertEquals("wantsite", $metager->getSite());
         $this->assertContains("blackhost", $metager->getUserHostBlacklist());
         $this->assertContains("blackdomain", $metager->getUserDomainBlacklist());
         $this->assertContains("blackword", $metager->getStopWords());
         $this->assertContains("i want phrase", $metager->getPhrases());
 
-        $metager = new MetaGer();
-        $request = new Request(['eingabe' => '-site:peter:test -blackword-test -host:blackhost-test.de.nz/test ich suche nach -host:blackhost:blackhost2.cote/t?p=5 "peter ist obst-garten und -bauern"']);
-        $metager->parseFormData($request);
-        $metager->checkSpecialSearches($request);
+        $metager = $this->createSpecialSearchMetager('site:peter:test -blackword-test -site:blackhost-test.de.nz/test ich suche nach -site:blackhost:blackhost2.cote/t?p=5 "peter ist obst-garten und -bauern"');
         $this->assertEquals("peter:test", $metager->getSite());
         $this->assertContains("blackhost:blackhost2.cote/t?p=5", $metager->getUserHostBlacklist());
         $this->assertContains("blackhost-test.de.nz/test", $metager->getUserHostBlacklist());
@@ -64,17 +58,28 @@ class MetaGerPhpTest extends TestCase
         $this->assertNotContains("bauern", $metager->getStopWords());
         $this->assertContains("peter ist obst-garten und -bauern", $metager->getPhrases());
 
-        $metager = new MetaGer();
-        $request = new Request(['eingabe' => '-host:-domain:test']);
-        $metager->parseFormData($request);
-        $metager->checkSpecialSearches($request);
-        $this->assertContains("-domain:test", $metager->getUserHostBlacklist());
+        $metager = $this->createSpecialSearchMetager('-site:-site:*.test');
+        $this->assertContains("-site:*.test", $metager->getUserHostBlacklist());
+
+        $metager = $this->createSpecialSearchMetager('"-site:-site:*.test"');
+        $this->assertContains("-site:-site:*.test", $metager->getPhrases());
+
+        $metager = $this->createSpecialSearchMetager('site:wikipedia.de apfel site:test.de tomate');
+        $this->assertEquals("apfel tomate", $metager->getQ());
+        $this->assertEquals("test.de", $metager->getSite());
 
+        $metager = $this->createSpecialSearchMetager('site:wikipedia.de');
+        $this->assertEquals("", $metager->getQ());
+        $this->assertEquals("wikipedia.de", $metager->getSite());
+    }
+
+    public function createSpecialSearchMetager($eingabe)
+    {
         $metager = new MetaGer();
-        $request = new Request(['eingabe' => '"-host:-domain:test"']);
+        $request = new Request(['eingabe' => $eingabe]);
         $metager->parseFormData($request);
         $metager->checkSpecialSearches($request);
-        $this->assertContains("-host:-domain:test", $metager->getPhrases());
+        return $metager;
     }
 
     // Testet, ob ein Link wirklich nur einmal hinzugefügt werden kann
@@ -141,9 +146,9 @@ class MetaGerPhpTest extends TestCase
         $this->containCallbackTester($metager, "generateSiteSearchLink", ["wolf.de"],
             'site%3Awolf.de');
         $this->containCallbackTester($metager, "generateRemovedHostLink", ["wolf.de"],
-            '-host%3Awolf.de');
+            '-site%3Awolf.de');
         $this->containCallbackTester($metager, "generateRemovedDomainLink", ["wolf.de"],
-            '-domain%3Awolf.de');
+            '-site%3A%2A.wolf.de');
     }
 
     // Prüft ob der Host Count funktioniert
@@ -329,7 +334,7 @@ class MetaGerPhpTest extends TestCase
         #new Request(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null)
 
         $query                = [];
-        $query["eingabe"]     = 'suchwort -blackword -host:blackhost -domain:blackdomain site:wantsite "i want phrase"';
+        $query["eingabe"]     = 'suchwort -blackword -site:blackhost -site:*.blackdomain site:wantsite "i want phrase"';
         $query["focus"]       = "angepasst";
         $query["encoding"]    = "utf8";
         $query["lang"]        = "all";
diff --git a/tests/ResultPhpTest.php b/tests/ResultPhpTest.php
index 341280f30226d39935c6cca388ec034fb646c0d0..409d0dad96b72f137cc2cf439d57330d73ccdf18 100644
--- a/tests/ResultPhpTest.php
+++ b/tests/ResultPhpTest.php
@@ -78,7 +78,7 @@ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
         $this->assertTrue($result->isValid($metager));
 
         $metager = new MetaGer();
-        $request = new Request(['eingabe' => 'test -host:host.domain.de -domain:domain.de']);
+        $request = new Request(['eingabe' => 'test -site:host.domain.de -site:*.domain.de']);
         $metager->parseFormData($request);
         $metager->checkSpecialSearches($request);
 
@@ -99,7 +99,7 @@ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
         $this->assertFalse($result->isValid($metager));
     }
 
-    // Prüft die Funktionen die Links umformen oder erzeugen
+    // Prüft die Funktionen, die Links umformen oder erzeugen
     public function linkGeneratorsTest()
     {
         $result = $this->getDummyResult();
@@ -120,6 +120,13 @@ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
             'solo.de');
         $this->equalCallbackTester($result, "getStrippedLink", [$url],
             'han.solo.de/unterseite/document.htm');
+
+        $url = "http://www.foo.bar.han.solo.de/test?ja=1";
+
+        $this->equalCallbackTester($result, "getStrippedHost", [$url],
+            'foo.bar.han.solo.de');
+        $this->equalCallbackTester($result, "getStrippedDomain", [$url],
+            'solo.de');
     }
 
     /**