diff --git a/app/MetaGer.php b/app/MetaGer.php
index 9f7534d2195780e393a812f0b38dd5317a4ee032..6e772025d4e41254cf486c1887b75ee3d4fbacfe 100644
--- a/app/MetaGer.php
+++ b/app/MetaGer.php
@@ -157,6 +157,10 @@ class MetaGer
 
         // combine
         $combinedResults = $this->combineResults($engines);
+
+        # Wir bestimmen die Sprache eines jeden Suchergebnisses
+        $this->results = $this->addLangCodes($this->results);
+
         // sort
         //$sortedResults = $this->sortResults($engines);
         // filter
@@ -260,6 +264,47 @@ class MetaGer
 
     }
 
+    private function addLangCodes($results)
+    {
+        # Bei der Spracheinstellung "all" wird nicht gefiltert
+        if ($this->getLang() === "all") {
+            return $results;
+        } else {
+            # Ansonsten müssen wir jedem Result einen Sprachcode hinzufügen
+            $id          = 0;
+            $langStrings = [];
+            foreach ($results as $result) {
+                # Wir geben jedem Ergebnis eine ID um später die Sprachcodes zuordnen zu können
+                $result->id = $id;
+
+                $langStrings["result_" . $id] = utf8_encode($result->getLangString());
+
+                $id++;
+            }
+            # Wir schreiben die Strings in eine temporäre JSON-Datei,
+            # Da das Array unter umständen zu groß ist für eine direkte Übergabe an das Skript
+            $filename = "/tmp/" . getmypid();
+            file_put_contents($filename, json_encode($langStrings));
+            $langDetectorPath = app_path() . "/Models/lang.pl";
+            $lang             = exec("echo '$filename' | $langDetectorPath");
+            $lang             = json_decode($lang, true);
+
+            # Wir haben nun die Sprachcodes der einzelnen Ergebnisse.
+            # Diese müssen wir nur noch korrekt zuordnen, dann sind wir fertig.
+            foreach ($lang as $key => $langCode) {
+                # Prefix vom Key entfernen:
+                $id = intval(str_replace("result_", "", $key));
+                foreach ($this->results as $result) {
+                    if ($result->id === $id) {
+                        $result->langCode = $langCode;
+                        break;
+                    }
+                }
+            }
+            return $results;
+        }
+    }
+
     public function combineResults($engines)
     {
         foreach ($engines as $engine) {
diff --git a/app/Models/Result.php b/app/Models/Result.php
index 73d0579f2c9d967be4f5563c7f09b40402c67425..e38c5facaab1fc9aafeb2a58a2a59cff13acb104 100644
--- a/app/Models/Result.php
+++ b/app/Models/Result.php
@@ -189,12 +189,8 @@ class Result
         }
 
         # Eventueller Sprachfilter
-        if ($metager->getLang() !== "all") {
-            $text = $this->titel . " " . $this->descr;
-            $path = app_path() . "/Models/lang.pl";
-            $lang = exec("echo '$text' | $path");
-
-            if ($metager->getLang() !== $lang) {
+        if ($metager->getLang() !== "all" && isset($this->langCode)) {
+            if ($metager->getLang() !== $this->langCode) {
                 return false;
             }
 
@@ -310,4 +306,14 @@ class Result
     {
         return $this->rank;
     }
+
+    public function getLangString()
+    {
+        $string = "";
+
+        $string .= $this->titel;
+        $string .= $this->descr;
+
+        return $string;
+    }
 }
diff --git a/app/Models/lang.pl b/app/Models/lang.pl
index fe071d8a46ced99f3f45a8b641e17d05c014f687..63b62fab4a3bf7f0348c581b25b8b7ebe271a7e4 100755
--- a/app/Models/lang.pl
+++ b/app/Models/lang.pl
@@ -1,10 +1,32 @@
 #!/usr/bin/perl
 
 use Lingua::Identify qw(:language_identification);
+use JSON;
+use warnings;
+use strict;
+binmode STDOUT, ":utf8";
+binmode STDIN, ":utf8";
+use utf8;
 
-$text = <STDIN>;
+chomp(my $filename = <STDIN>);
 
-$a = langof($text);
+# Lets open the given file:
+open(my $fh, "<", $filename)
+	or die "Can't open < $filename: $!";
+my $json = <$fh>;
+close $fh;
 
-print $a;
+# Decode the JSON String
+my $data = decode_json($json);
 
+# Wir durchlaufen den Hash:
+foreach my $key (keys %{$data}){
+	$data->{$key} = langof($data->{$key});
+}
+
+$data = encode_json($data);
+
+# Nur noch die temporäre Datei löschen:
+unlink($filename);
+
+print $data;
diff --git a/readme.md b/readme.md
index 2350b7163e0e0843bc40bd5865ea0f39710bc954..033e1313d3cb90b47667991b1122a4b1ed5d10d3 100644
--- a/readme.md
+++ b/readme.md
@@ -13,7 +13,9 @@
   * php7.0-zip
 * sqlite3
 * redis-server
-* Das Perl-Paket: Lingua::Identify (http://search.cpan.org/~ambs/Lingua-Identify-0.56/lib/Lingua/Identify.pm)
+* Die Perl-Pakete
+  * Lingua::Identify (http://search.cpan.org/~ambs/Lingua-Identify-0.56/lib/Lingua/Identify.pm)
+  * JSON (http://search.cpan.org/~makamaka/JSON-2.90/lib/JSON.pm)
 
 ## Offizielle Dokumentation