diff --git a/trigger/specificdate/lang/de/lifecycletrigger_specificdate.php b/trigger/specificdate/lang/de/lifecycletrigger_specificdate.php
index 7eab683684dde2ee6baeea54e1c05edfd794a166..51e4efa8fb05a15b4ed9823535efa970043263c2 100644
--- a/trigger/specificdate/lang/de/lifecycletrigger_specificdate.php
+++ b/trigger/specificdate/lang/de/lifecycletrigger_specificdate.php
@@ -26,6 +26,6 @@ $string['pluginname'] = 'Bestimmtes Datum - Trigger';
 $string['privacy:metadata'] = 'Dieses Subplugin speichert keine persönlichen Daten.';
 
 $string['dates'] = 'Daten, an denen der Workflow ausgeführt werden soll.';
-$string['dates_desc'] = 'Ein Datum pro Zeile in dem Format Tag.Monat';
+$string['dates_help'] = 'Ein Datum pro Zeile in dem Format Tag.Monat<br><br>Zum Beispiel 04.08 für den 4. August. Wenn Sie das heutige Datum wählen, wird es getriggert.';
 $string['timelastrun'] = 'Datum, an dem der Trigger zuletzt ausgeführt wurde.';
 $string['dates_not_parseable'] = 'Daten müssen in dem Format Tag.Monat sein!';
diff --git a/trigger/specificdate/lang/en/lifecycletrigger_specificdate.php b/trigger/specificdate/lang/en/lifecycletrigger_specificdate.php
index 9b7113e8961b100cf03e94fc04f3b1315ee33036..d0a2dbb1c689547d69b11d934232fcbe135ae917 100644
--- a/trigger/specificdate/lang/en/lifecycletrigger_specificdate.php
+++ b/trigger/specificdate/lang/en/lifecycletrigger_specificdate.php
@@ -26,6 +26,6 @@ $string['pluginname'] = 'Specific date trigger';
 $string['privacy:metadata'] = 'This subplugin does not store any personal data.';
 
 $string['dates'] = 'Dates at which the workflow should run.';
-$string['dates_desc'] = 'Write one date per line with the format Day.Month';
+$string['dates_help'] = 'Write one date per line with the format Day.Month<br><br>For example 04.08 for 4th of august. If you put in today\'s date, it will be triggered.';
 $string['timelastrun'] = 'Date when the trigger last run.';
 $string['dates_not_parseable'] = 'Dates must be of the format Day.Month';
diff --git a/trigger/specificdate/lib.php b/trigger/specificdate/lib.php
index 8f8d82a61c1fbf9bc2a613243a93c33bd1d1596c..9df0bcbd763ab1c449164d9487fde1235f28d75c 100644
--- a/trigger/specificdate/lib.php
+++ b/trigger/specificdate/lib.php
@@ -64,38 +64,24 @@ class specificdate extends base_automatic {
      */
     public function get_course_recordset_where($triggerid) {
         $settings = settings_manager::get_settings($triggerid, settings_type::TRIGGER);
-        $lastrun = getdate($settings['timelastrun']);
         $datesraw = $settings['dates'];
         $dates = $this->parse_dates($datesraw);
+        $lastrun = getdate($settings['timelastrun']);
+        $current = time();
+        $today = getdate($current);
 
-        $triggerat = array();
-
-        foreach ($dates as $dateparts) {
-            if ($dateparts['mon'] > $lastrun['mon']) {
-                $date = new DateTime($lastrun['year'].'-'.$dateparts['mon'].'-'.$dateparts['day']);
-            } else if ($dateparts['mon'] === $lastrun['mon']) {
-                if ($dateparts['day'] > $lastrun['day']) {
-                    $date = new DateTime($lastrun['year'].'-'.$dateparts['mon'].'-'.$dateparts['day']);
+        foreach ($dates as $date) {
+            // We want to trigger only if the $date is today.
+            if ($date['mon'] == $today['mon'] && $date['day'] == $today['mday']) {
+                // Now only make sure if $lastrun was today -> don't trigger.
+                if ($lastrun['yday'] == $today['yday'] && $lastrun['year'] == $today['year']) {
+                    continue;
                 } else {
-                    $date = new DateTime(($lastrun['year'] + 1) .'-'.$dateparts['mon'].'-'.$dateparts['day']);
+                    $settings['timelastrun'] = $current;
+                    $trigger = trigger_manager::get_instance($triggerid);
+                    settings_manager::save_settings($triggerid, settings_type::TRIGGER, $trigger->subpluginname, $settings);
+                    return array('true', array());
                 }
-            } else {
-                $date = new DateTime(($lastrun['year'] + 1) .'-'.$dateparts['mon'].'-'.$dateparts['day']);
-            }
-
-            $triggerat[] = $date->getTimestamp();
-        }
-
-        sort($triggerat);
-
-        $current = time();
-
-        foreach ($triggerat as $timestamp) {
-            if ($timestamp < $current) {
-                $settings['timelastrun'] = $current;
-                $trigger = trigger_manager::get_instance($triggerid);
-                settings_manager::save_settings($triggerid, settings_type::TRIGGER, $trigger->subpluginname, $settings);
-                return array('true', array());
             }
         }
         return array('false', array());
@@ -149,11 +135,11 @@ class specificdate extends base_automatic {
      * @throws \coding_exception
      */
     public function extend_add_instance_form_definition($mform) {
-        $mform->addElement('textarea', 'dates', get_string('dates', 'lifecycletrigger_specificdate'),
-            get_string('dates_desc', 'lifecycletrigger_specificdate'));
+        $mform->addElement('textarea', 'dates', get_string('dates', 'lifecycletrigger_specificdate'));
         $mform->setType('dates', PARAM_TEXT);
+        $mform->addHelpButton('dates', 'dates', 'lifecycletrigger_specificdate');
         $mform->addElement('hidden', 'timelastrun');
-        $mform->setDefault('timelastrun', time());
+        $mform->setDefault('timelastrun', 0);
         $mform->setType('timelastrun', PARAM_INT);
     }