diff --git a/app/Jobs/Searcher.php b/app/Jobs/Searcher.php
index 9add9b6276f5f78c7a06cf9373e11c96c56f2b4e..7496b42db11e4292654fdb399e89896faf514be8 100644
--- a/app/Jobs/Searcher.php
+++ b/app/Jobs/Searcher.php
@@ -33,7 +33,6 @@ class Searcher implements ShouldQueue
         $this->name = $name;
         $this->pid = getmypid();
         // Submit this worker to the Redis System
-        Redis::set($this->name, "running");
         Redis::expire($this->name, 5);
     }
 
@@ -51,6 +50,7 @@ class Searcher implements ShouldQueue
         while(true){
             // Update the expire
             Redis::expire($this->name, 5);
+            Redis::expire($this->name . ".stats", 5);
             // One Searcher can handle a ton of requests to the same server
             // Each search to the server of this Searcher will be submitted to a queue
             // stored in redis which has the same name as this searchengine appended by a ".queue"
@@ -65,7 +65,6 @@ class Searcher implements ShouldQueue
                 $mission = $mission[1];
                 $this->counter++;#
                 $poptime = microtime(true) - $time;
-                $time = microtime(true);
             }
 
             // The mission is a String which can be divided to retrieve two informations:
@@ -81,6 +80,16 @@ class Searcher implements ShouldQueue
 
             $this->storeResult($result, $poptime, $hashValue);
 
+            if($this->counter === 3){
+                Redis::set($this->name, "running");
+            }
+
+            // Reset the time of the last Job so we can calculate
+            // the time we have spend waiting for a new job
+            // We submit that calculation to the Redis systemin the method
+            // storeResult()
+            $time = microtime(true);
+
             // In sync mode every Searcher may only retrieve one result because it would block
             // the execution of the remaining code otherwise:
             if(getenv("QUEUE_DRIVER") === "sync" || $this->counter > $this->MAX_REQUESTS){
diff --git a/app/Models/Searchengine.php b/app/Models/Searchengine.php
index cc98b6b6e48305e3f4e2f83563a9aa0b5aa23923..eb26154c16f98ee096647e57f5b7568d7b94fb3c 100644
--- a/app/Models/Searchengine.php
+++ b/app/Models/Searchengine.php
@@ -156,10 +156,19 @@ abstract class Searchengine
                 // Now we have to check if the current count is enough to fetch all the
                 // searches or if it needs help.
                 // Let's hardcode a minimum of 100ms between every search job.
-                die(var_dump($searcherData));
+                // First calculate the median of all Times
+                $median = 0;
+                foreach($searcherData as $pid => $data){
+                    $data = explode(";", $data);
+                    $median += floatval($data[1]);
+                }
+                $median /= sizeof($searcherData);
+                if($median < 100){
+                    $needSearcher = true;
+                }
             }
-            
-            if($needSearcher){
+            if($needSearcher && Redis::get($this->name) !== "locked"){
+                Redis::set($this->name, "locked");
                 $this->dispatch(new Searcher($this->name));
             }
         }