diff --git a/classes/form/form_delays_filter.php b/classes/form/form_delays_filter.php
index 638f5012002f3bc9cd8cc6a9e2b8c3e5654fe7e0..f262d60771f34918442eb373e1c12d25834151d1 100644
--- a/classes/form/form_delays_filter.php
+++ b/classes/form/form_delays_filter.php
@@ -88,46 +88,4 @@ class form_delays_filter extends \moodleform {
         $this->add_action_buttons(true, get_string('apply', 'tool_lifecycle'));
     }
 
-    /**
-     * This method is called after definition(), data submission and set_data().
-     * All form setup that is dependent on form values should go in here.
-     */
-    public function definition_after_data() {
-        $cache = $this->get_cache();
-        if ($this->is_submitted() && $this->is_validated()) {
-            if ($this->is_cancelled()) {
-                $cache->delete('delays_filter');
-            } else {
-                $cache->set('delays_filter', $this->get_data());
-            }
-        } else {
-            $this->set_data($cache->get('delays_filter'));
-        }
-    }
-
-    /**
-     * Override get data to return cached data when nothing was submitted.
-     * @return object
-     */
-    public function get_data() {
-        $data = parent::get_data();
-        if ($data) {
-            return $data;
-        } else {
-            return $this->get_cache()->get('delays_filter');
-        }
-    }
-
-    /**
-     * Gets the cache.
-     * @return cache the cache to get the cached mform data.
-     */
-    private function get_cache() {
-        if (!$this->cache) {
-            $this->cache = cache::make('tool_lifecycle', 'mformdata');
-        }
-        return $this->cache;
-    }
-
-
 }
diff --git a/classes/table/delayed_courses_table.php b/classes/table/delayed_courses_table.php
index bb99d69d9275842fa6b309ec926a2509277b67f0..3277028e795b85ff13f8e4bbe13323d67ed9492b 100644
--- a/classes/table/delayed_courses_table.php
+++ b/classes/table/delayed_courses_table.php
@@ -48,9 +48,6 @@ class delayed_courses_table extends \table_sql {
     public function __construct($filterdata) {
         parent::__construct('tool_lifecycle-delayed-courses');
 
-        global $DB;
-        $DB->set_debug(true);
-
         $fields = 'c.id as courseid, c.fullname as coursefullname, cat.name as category, ';
 
         $selectseperatedelays = true;
diff --git a/delayedcourses.php b/delayedcourses.php
index e78a820406c15f4e51ad411175d7e48bd58a9bc6..f8f34c877b5ee5fc2f50e3e54aae97f52d3b9722 100644
--- a/delayedcourses.php
+++ b/delayedcourses.php
@@ -62,7 +62,19 @@ $PAGE->set_heading(get_string('delayed_courses_header', 'tool_lifecycle'));
 
 $mform = new form_delays_filter($PAGE->url);
 
-$data = $mform->get_data();
+// Cache handling.
+$cache = cache::make('tool_lifecycle', 'mformdata');
+if ($mform->is_cancelled()) {
+    $cache->delete('delays_filter');
+    redirect($PAGE->url);
+} else if ($data = $mform->get_data()) {
+    $cache->set('delays_filter', $data);
+} else {
+    $data = $cache->get('delays_filter');
+    if ($data) {
+        $mform->set_data($data);
+    }
+}
 
 $table = new delayed_courses_table($data);
 $table->define_baseurl($PAGE->url);
@@ -70,4 +82,14 @@ $table->define_baseurl($PAGE->url);
 echo $OUTPUT->header();
 $mform->display();
 $table->out(100, false);
+
+$params = ['sesskey' => sesskey(), 'action' => 'bulk-delete'];
+if ($data) {
+    $params = array_merge($params, (array) $data);
+}
+
+$button = new single_button(new moodle_url($PAGE->url, $params),
+        get_string('delete_all_delays', 'tool_lifecycle'));
+
+echo $OUTPUT->render($button);
 echo $OUTPUT->footer();
diff --git a/lang/en/tool_lifecycle.php b/lang/en/tool_lifecycle.php
index a92b9c7804929d7819bc661116ca5157c5f18975..a8cc60b78413b5b5e1ceb0596760d9bb9c3eae44 100644
--- a/lang/en/tool_lifecycle.php
+++ b/lang/en/tool_lifecycle.php
@@ -205,3 +205,4 @@ $string['show_delays'] = 'Kind of view';
 $string['all_delays'] = 'All delays';
 $string['globally'] = 'Global delays';
 $string['delays_for_workflow'] = 'Delays for "{$a}"';
+$string['delete_all_delays'] = 'Delete all delays';