diff --git a/app/DynamicEngineParameters.php b/app/DynamicEngineParameters.php
new file mode 100644
index 0000000000000000000000000000000000000000..558d1734be76f8851231920b6eadb3507e250eaf
--- /dev/null
+++ b/app/DynamicEngineParameters.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace App;
+use Carbon;
+
+class DynamicEngineParameters {
+
+    // Returns a string notating the Date Range of the last year
+    // The value is used as Parameter for the Bing search engine
+    // freshness Parameter
+    public static function FreshnessYearBing() {
+        $now = \Carbon::now()->format("Y-m-d");
+        $lastYear = \Carbon::now()->subYear()->format("Y-m-d");
+        return $lastYear . ".." . $now;
+    }
+
+    public static function FreshnessCustomBing(){
+        // Bings custom date filter uses YYYY-mm-dd..YYYY-mm-dd
+        // From and two dates are supplied by parameters ff and ft
+        // They already have been checked if they match above pattern in parseFormData function
+        $from = \Request::input("ff");
+        $to = \Request::input("ft");
+
+        return $from . ".." . $to;
+    }
+}
\ No newline at end of file
diff --git a/app/MetaGer.php b/app/MetaGer.php
index ccfcd3520884c2dff6fb34dc14f9f2bbd77ac5a3..9954a0bffede405b3baa76bba86391c7fff527e4 100644
--- a/app/MetaGer.php
+++ b/app/MetaGer.php
@@ -717,19 +717,23 @@ class MetaGer
         $availableFilter = [];
 
         foreach ($parameterFilter as $filterName => $filter) {
-            $values = $filter->values;
+            $values = clone $filter->values;
             # Check if any of the enabled search engines provide this filter
             foreach ($this->enabledSearchengines as $engineName => $engine) {
                 if (!empty($filter->sumas->$engineName)) {
                     if (empty($availableFilter[$filterName])) {
                         $availableFilter[$filterName] = $filter;
-                        unset($availableFilter[$filterName]->values);
+                        foreach($availableFilter[$filterName]->values as $key => $value){
+                            if($key !== "nofilter"){
+                                unset($availableFilter[$filterName]->values->{$key});
+                            }
+                        }
                     }
                     if (empty($availableFilter[$filterName]->values)) {
-                        $availableFilter[$filterName]->values = (object) ["" => $values->{""}];
+                        $availableFilter[$filterName]->values = new \stdClass();
                     }
                     foreach ($filter->sumas->{$engineName}->values as $key => $value) {
-                        $availableFilter[$filterName]->values->$key = $values->$key;
+                        $availableFilter[$filterName]->values->{$key} = $values->$key;
                     }
                 }
             }
@@ -745,13 +749,17 @@ class MetaGer
                         }
                         if (empty($availableFilter[$filterName])) {
                             $availableFilter[$filterName] = $filter;
-                            unset($availableFilter[$filterName]->values);
+                            foreach($availableFilter[$filterName]->values as $key => $value){
+                                if($key !== "nofilter"){
+                                    unset($availableFilter[$filterName]->values->{$key});
+                                }
+                            }
                         }
                         if (empty($availableFilter[$filterName]->values)) {
-                            $availableFilter[$filterName]->values = (object) ["" => $values->{""}];
+                            $availableFilter[$filterName]->values = new \stdClass();
                         }
                         foreach ($filter->sumas->{$suma}->values as $key => $value) {
-                            $availableFilter[$filterName]->values->$key = $values->$key;
+                            $availableFilter[$filterName]->values->{$key} = $values->$key;
                         }
                     }
                 }
@@ -1011,6 +1019,53 @@ class MetaGer
         // Remove Inputs that are not used
         $this->request = $request->replace($request->except(['verification_id', 'uid', 'verification_count']));
 
+        // Disable freshness filter if custom freshness filter isset
+        if($this->request->filled("ff") && $this->request->filled("f")){
+            $this->request = $this->request->replace($this->request->except(["f"]));
+        }
+        // Remove custom time filter if either of the dates isn't set or is not a date
+        if($this->request->input("fc") === "on"){
+            if(!$this->request->filled("ff") || !$this->request->filled("ft")){
+                $this->request = $this->request->replace($this->request->except(["fc", "ff", "ft"]));
+            }else{
+                $ff = $this->request->input("ff");
+                $ft = $this->request->input("ft");
+                if(!preg_match("/^\d{4}-\d{2}-\d{2}$/", $ff) || !preg_match("/^\d{4}-\d{2}-\d{2}$/", $ft)){
+                    $this->request = $this->request->replace($this->request->except(["fc", "ff", "ft"]));
+                }else{
+                    // Now Check if there is something wrong with the dates
+                    $from = $this->request->input("ff");
+                    $to = $this->request->input("ft");
+                    $changed = false;
+                    $from = Carbon::createFromFormat("Y-m-d H:i:s", $from . " 00:00:00");
+                    $to = Carbon::createFromFormat("Y-m-d H:i:s", $to . " 00:00:00");
+
+                    if($from > Carbon::now()){
+                        $from = Carbon::now();
+                        $changed = true;
+                    }
+                    if($to > Carbon::now()){
+                        $to = Carbon::now();
+                        $changed = true;
+                    }
+                    if($from > $to){
+                        $tmp = $to;
+                        $to = $from;
+                        $from = $tmp;
+                        $changed = true;
+                    }
+                    if($changed){
+                        $oldParameters = $this->request->all();
+                        $oldParameters["ff"] = $from->format("Y-m-d");
+                        $oldParameters["ft"] = $to->format("Y-m-d");
+                        $this->request = $this->request->replace($oldParameters);
+                    }
+                }
+            }
+        }else if($this->request->filled("ff") || $this->request->filled("ft")){
+            $this->request = $this->request->replace($this->request->except(["fc", "ff", "ft"]));
+        }
+
         $this->out = $request->input('out', "html");
         # Standard output format html
         if ($this->out !== "html" && $this->out !== "json" && $this->out !== "results" && $this->out !== "results-with-style" && $this->out !== "result-count" && $this->out !== "rss20" && $this->out !== "atom10" && $this->out !== "rich" && $this->out !== "api") {
@@ -1078,7 +1133,6 @@ class MetaGer
             # IPv4
             return preg_replace("/(\d+)\.(\d+)\.\d+.\d+/s", "$1.$2.0.0", $ip);
         }
-        die(var_dump($ip));
     }
 
     public function checkSpecialSearches(Request $request)
@@ -1116,7 +1170,7 @@ class MetaGer
             if (($request->filled($filter->{"get-parameter"}) && $request->input($filter->{"get-parameter"}) !== "off") ||
                 \Cookie::get($this->getFokus() . "_setting_" . $filter->{"get-parameter"}) !== null
             ) { # If the filter is set via Cookie
-            $this->parameterFilter[$filterName] = $filter;
+                $this->parameterFilter[$filterName] = $filter;
                 $this->parameterFilter[$filterName]->value = $request->input($filter->{"get-parameter"}, '');
                 if (empty($this->parameterFilter[$filterName]->value)) {
                     $this->parameterFilter[$filterName]->value = \Cookie::get($this->getFokus() . "_setting_" . $filter->{"get-parameter"});
diff --git a/app/Models/Searchengine.php b/app/Models/Searchengine.php
index 59e758fca5d025fdf20d80ae3bbc93c0353e5285..8b612d551b0a19111875b2ce51643cc9483ffee0 100644
--- a/app/Models/Searchengine.php
+++ b/app/Models/Searchengine.php
@@ -81,6 +81,7 @@ abstract class Searchengine
             $q = $query . " " . $q;
         }
 
+        $tmpPara = false;
         # Parse enabled Parameter-Filter
         foreach ($metager->getParameterFilter() as $filterName => $filter) {
             $inputParameter = $filter->value;
@@ -88,8 +89,13 @@ abstract class Searchengine
             if (empty($inputParameter) || empty($filter->sumas->{$name}->values->{$inputParameter})) {
                 continue;
             }
+            $tmpPara = true;
             $engineParameterKey = $filter->sumas->{$name}->{"get-parameter"};
             $engineParameterValue = $filter->sumas->{$name}->values->{$inputParameter};
+            if(stripos($engineParameterValue, "dyn-") === 0){
+                $functionname = substr($engineParameterValue, stripos($engineParameterValue, "dyn-") + 4);
+                $engineParameterValue = \App\DynamicEngineParameters::$functionname();
+            }
             $this->engine->{"get-parameter"}->{$engineParameterKey} = $engineParameterValue;
         }
 
diff --git a/resources/lang/de/metaGer.php b/resources/lang/de/metaGer.php
index 7c0194921ea873a7dd9ee1c57ce47ff2a5cc7aad..549fb420085adf703ddbed7a66adc4c1f25f43a6 100644
--- a/resources/lang/de/metaGer.php
+++ b/resources/lang/de/metaGer.php
@@ -81,6 +81,9 @@ return [
     "filter.freshness.day" => "Letzte 24h",
     "filter.freshness.week" => "Letzte Woche",
     "filter.freshness.month" => "Letzter Monat",
+    "filter.freshness.year" => "Letztes Jahr",
+    "filter.freshness.custom" => "Benutzerdefiniert",
+    "filter.customdatetitle" => "Benutzerdefiniertes Datum auswählen",
 
     "filter.market" => "Sprache",
     "filter.market.ga" => "Deutsch (Österreich)",
diff --git a/resources/lang/de/plugin-page.php b/resources/lang/de/plugin-page.php
index c6b3a38f01d92aa42cbc852b9a8b7dd322043aae..8890a276f35b1dbf93469b90bb89dbb0898a0053 100644
--- a/resources/lang/de/plugin-page.php
+++ b/resources/lang/de/plugin-page.php
@@ -69,10 +69,8 @@ return [
     'edge.10' => 'Im Bereich darunter tragen Sie "https://metager.de" in das Feld "Webadresse eingeben" ein und klicken auf das "+" Symbol',
     'edge.11' => 'Entfernen Sie alle Einträge, die beim Start nicht geöffnet werden sollen (z.B. about:start), indem Sie rechts auf das kleine "x" klicken.',
 
-    'safari.1' => 'Installieren Sie das Safari-PlugIn <a href="http://www.opensearchforsafari.com/" target="_blank" rel="noopener">OpenSearchforSafari</a>.',
-    'safari.2' => 'Rufen Sie MetaGer auf und fügen Sie MetaGer mit dem OpenSearch-Knopf(Lupen-Symbol) in der Safari-Men&uuml;leiste hinzu.',
-    'safari.3' => 'L&ouml;schen Sie (nach Bedarf) die anderen Suchmaschinen aus dem OpenSearch-PlugIn, indem Sie das "X" neben diesen betätigen.',
-    'safari.4' => 'Sie können nun über den OpenSearch-Knopf(Lupe) mit MetaGer suchen.',
+    'safari.1' => 'Leider können Sie MetaGer nicht zum Safari hinzufügen, weil alle Plugins, die dem Hinzufügen alternativer Suchmaschinen dienten, nicht mehr akzeptiert werden.',
+   
 
     'vivaldi.1' => 'Klicken Sie in Ihrem Browser oben links auf das rote Vivaldi Logo und wählen Sie zuerst "Werkzeuge", dann im Untermenü "Einstellungen".',
     'vivaldi.2' => 'In dem dann erscheinenden Menu wählen Sie bitte "Suche".',
diff --git a/resources/lang/en/plugin-page.php b/resources/lang/en/plugin-page.php
index b60f2577bfb50c81c66f0212e299b15539eb27df..bb0699b85527bd792fc70e24f7c60389ed3b2157 100644
--- a/resources/lang/en/plugin-page.php
+++ b/resources/lang/en/plugin-page.php
@@ -67,10 +67,7 @@ return [
     "edge.10" => "Type \"https://metager.org\" in field \"Webaddress\" and click on \"+\"",
     "edge.11" => "Delete all entries which should not be opened at start (for example \"about:start\") by click on \"x\"",
 
-    "safari.1" => "Install the Safari-PlugIn <a href=\"http://www.opensearchforsafari.com/\" target=\"_blank\" rel=\"noopener\">OpenSearchforSafari</a>.",
-    "safari.2" => "Open MetaGer and add MetaGer by the OpenSearch-button within the Safari menu",
-    "safari.3" => "Delete (if you want) other search engines by clicking on \"X\"",
-    "safari.4" => "Now you might search with MetaGer via the OpenSearch-button (magnifying glass symbol)",
+    'safari.1' => 'We are sorry. Safari doesn´t accept neither the "Glims plugin" nor the "OpenSearch for Safari plugin" anymore. At this time there is no way to install alternative search engines for Safari webbrowser.',
 
     "vivaldi.1" => "Click the red logo \"Vivaldi\" at the top left of your web browser. Then select \"Tools / Preferences\"",
     "vivaldi.2" => "Within the new menu choose \"search\"",
diff --git a/resources/lang/es/plugin-page.php b/resources/lang/es/plugin-page.php
index d152ecff499b65c6b969d5c5b1ba4ac8eeb3130f..42b0c7b3bf7e2eed95b801bdd60a2f8386ee91a9 100644
--- a/resources/lang/es/plugin-page.php
+++ b/resources/lang/es/plugin-page.php
@@ -51,8 +51,5 @@ return [
     "edge.9" => "En el menú de cascada selecciona \"Definido por el usuario\"",
     "edge.10" => "En la área abajo ponga \"https://metager.de\" en el campo \"Introducir URL\" y haga click en el símbolo \"+\"",
     "edge.11" => "Borra todas las entradas, que no quiere abrir al inicio (p.ej. about:start), haciendo click en el pequeño \"x\" a la derecha.",
-    "safari.1" => "Instala la extensión de Safari <a href=\"http://www.opensearchforsafari.com/\" target=\"_blank\" rel=\"noopener\">OpenSearchforSafari</a>.",
-    "safari.2" => "Busca MetaGer y añade MetaGer con el botón OpenSearch (símbolo de na lupa) en la barra de menú de Safari.",
-    "safari.3" => "Borra (según necesidad) los demás buscadores de la extension OpenSearch, haciendo click en el \"X\" a la par y confirma.",
-    "safari.4" => "Ahora puede buscar con MetaGer usando el botón de OpenSearch (la lupa).",
+    'safari.1" => "No pueden añadir otras motores de busqueda alternativas en Safari. "OpenSearch for Safari" y "Glims" soy terminado.',
 ];
diff --git a/resources/less/metager/pages/resultpage/result-page.less b/resources/less/metager/pages/resultpage/result-page.less
index 7e70f86be684ab115cc272a7bd7e1b16ac515ffd..f867141111d0f77f06aa88e65bc8a331cf6adf42 100644
--- a/resources/less/metager/pages/resultpage/result-page.less
+++ b/resources/less/metager/pages/resultpage/result-page.less
@@ -604,6 +604,21 @@ a {
                     padding: 3px;
                     border-radius: 5px;
                 }
+                label[for="custom-date"] {
+                    cursor: pointer;
+                    &:hover {
+                        color: red;
+                    }
+                }
+                #bing-from-to {
+                    display: none;
+                }
+                #custom-date:checked + select {
+                    display: none;
+                }
+                #custom-date:checked + select + #bing-from-to {
+                    display: flex;
+                }
             }
             .option-selector:nth-child(1){
                 margin-left: 0;
diff --git a/resources/views/parts/custom-daterange.blade.php b/resources/views/parts/custom-daterange.blade.php
new file mode 100644
index 0000000000000000000000000000000000000000..6f3670925eb457023e47987b626785f64e204568
--- /dev/null
+++ b/resources/views/parts/custom-daterange.blade.php
@@ -0,0 +1,5 @@
+<div id="bing-from-to">
+    <input type="date" form="searchForm" @if(Request::filled("ff")) value="{{ Request::input("ff", "") }}" @endif name="ff" onchange="if(document.querySelector('input[name=ff]').value != '' && document.querySelector('input[name=ft]').value != ''){this.form.submit();}"> 
+    <div>&nbsp;-&nbsp;</div> 
+    <input type="date" form="searchForm" @if(Request::filled("ft")) value="{{ Request::input("ft", "") }}" @endif name="ft" onchange="if(document.querySelector('input[name=ff]').value != '' && document.querySelector('input[name=ft]').value != ''){this.form.submit();}">
+</div>
\ No newline at end of file
diff --git a/resources/views/parts/filter.blade.php b/resources/views/parts/filter.blade.php
index 77aa483b798110497c19fb20fe9ddd654c7314e3..9eec9fc6bbcb6dae976e73ddc911ab923ec73d69 100644
--- a/resources/views/parts/filter.blade.php
+++ b/resources/views/parts/filter.blade.php
@@ -33,18 +33,37 @@
 			<div id="options-box">
 				<div id="options-items">
 				@foreach($metager->getAvailableParameterFilter() as $filterName => $filter)
+					@if(empty($filter->hidden) || $filter->hidden === false)
 					<div class="option-selector">
-					<label for="{{$filterName}}">@lang($filter->name)</label>
-					<select name="{{$filter->{'get-parameter'} }}" class="custom-select custom-select-sm" form="searchForm" onchange="this.form.submit()">
+						<div>
+							<label for="{{$filterName}}">
+								@lang($filter->name)
+							</label>
+						@if($filter->{'get-parameter'} === "f")
+							<label for="custom-date" title="@lang('metaGer.filter.customdatetitle')">
+								<i class="fas fa-cogs"></i>
+							</label>
+						</div>
+							<input id="custom-date" type="checkbox" form="searchForm" @if(Request::input('fc', "off") === "on")checked @endif name="fc" onchange="if(!this.checked){this.form.submit()}"/>
+						@else
+						</div>
+						@endif
+						<select name="{{$filter->{'get-parameter'} }}" class="custom-select custom-select-sm" form="searchForm" onchange="this.form.submit()">
 						@foreach($filter->values as $value => $text)
-						@if($value === "" && Cookie::get($metager->getFokus() . "_setting_" . $filter->{"get-parameter"}) !== null)
+						@if($value === "nofilter" && Cookie::get($metager->getFokus() . "_setting_" . $filter->{"get-parameter"}) !== null)
 						<option value="off" @if(empty($filter->value) || $filter->value === "off")selected @endif>{{trans($text)}}</option>
+						@elseif($value === "nofilter")
+						<option value="" @if(!empty($filter->value) && $filter->value === $value)selected @endif>{{trans($text)}}</option>
 						@else
 						<option value="{{$value}}" @if(!empty($filter->value) && $filter->value === $value)selected @endif>{{trans($text)}}</option>
 						@endif
 						@endforeach
 					</select>
+					@if(!empty($filter->htmlbelow))
+						@include($filter->htmlbelow)
+					@endif
 					</div>
+					@endif
 				@endforeach
 				</div>
 
diff --git a/resources/views/plugin-page.blade.php b/resources/views/plugin-page.blade.php
index 5e8ba1314af3c59763e9e9445456d05bdc5098c2..61e51fce94b3c04f1ca5ef1965bcacba8c0f6680 100644
--- a/resources/views/plugin-page.blade.php
+++ b/resources/views/plugin-page.blade.php
@@ -149,9 +149,6 @@
 			<h3>{!! trans('plugin-page.default-search') !!}</h3>
 			<ol>
 				<li>{!! trans('plugin-page.safari.1') !!}</li>
-				<li>{!! trans('plugin-page.safari.2') !!}</li>
-				<li>{!! trans('plugin-page.safari.3') !!}</li>
-				<li>{!! trans('plugin-page.safari.4') !!}</li>
 			</ol>
 		</div>
 	@elseif ($browser === 'Vivaldi')
diff --git a/resources/views/settings/index.blade.php b/resources/views/settings/index.blade.php
index 03e52845d590838ef017aabf0a8745c6be23b52b..401246309884997e2f820e476d96fd708566a0c5 100644
--- a/resources/views/settings/index.blade.php
+++ b/resources/views/settings/index.blade.php
@@ -65,6 +65,7 @@
             <input type="hidden" name="url" value="{{ $url }}">
             <div id="filter-options">
                 @foreach($filter as $name => $filterInfo)
+                @if(empty($filterInfo->hidden) || $filterInfo->hidden === false)
                 <div class="form-group">
                     <label for="{{ $filterInfo->{"get-parameter"} }}">@lang($filterInfo->name)</label>
                     <select name="{{ $filterInfo->{"get-parameter"} }}" id="{{ $filterInfo->{"get-parameter"} }}" class="form-control">
@@ -76,6 +77,7 @@
                         @endforeach
                     </select>
                 </div>
+                @endif
                 @endforeach
             </div>
             <button type="submit" class="btn btn-default">@lang('settings.save')</button>