diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index a10e71422be208396ebc20c3f539a93eb12ba4d9..d28b92b5351bf2afb5b44bd0b993ffa9baf745ee 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -18,6 +18,7 @@
 - Die Funktionen `studip_json_encode()` und `studip_json_decode()` wurden entfernt. Stattdessen müssen die Methode `json_encode()` und `json_decode()` verwendet werden. ([Issue #3814](https://gitlab.studip.de/studip/studip/-/issues/3814))
 - Die `MembersModel.php` wurde entfernt ([Issue #3811](https://gitlab.studip.de/studip/studip/-/issues/3811))
 - Die `admission.inc.php` wurde entfernt. ([Issue #3812](https://gitlab.studip.de/studip/studip/-/issues/3812))
+- Die Methoden `CronjobScheduler::scheduleOnce()` sowie `CronjobTask::scheduleOnce()` wurden ersatzlos entfernt. ([Issue #4078](https://gitlab.studip.de/studip/studip/-/issues/4078))
 
 ## Security related issues
 
diff --git a/app/controllers/admin/cronjobs/schedules.php b/app/controllers/admin/cronjobs/schedules.php
index 294d78d0b2d8942617a883f07111f561ed312c00..929ae297d5eff42f64cdbfedd0bee1ac4a10fc34 100644
--- a/app/controllers/admin/cronjobs/schedules.php
+++ b/app/controllers/admin/cronjobs/schedules.php
@@ -29,7 +29,7 @@ class Admin_Cronjobs_SchedulesController extends AuthenticatedController
         if (empty($_SESSION['cronjob-filter'])) {
             $_SESSION['cronjob-filter'] = [
                 'where'  => '1',
-                'values' => array_fill_keys(['type', 'status', 'task_id'], null),
+                'values' => array_fill_keys(['status', 'task_id'], null),
             ];
         }
 
@@ -102,9 +102,6 @@ class Admin_Cronjobs_SchedulesController extends AuthenticatedController
         $filter     = array_filter(Request::optionArray('filter'));
         $conditions = [];
 
-        if (!empty($filter['type'])) {
-            $conditions[] = "type = " . DBManager::get()->quote($filter['type']);
-        }
         if (!empty($filter['status'])) {
             $active = (int)($filter['status'] === 'active');
             $conditions[] = "active = " . DBManager::get()->quote($active);
@@ -130,7 +127,6 @@ class Admin_Cronjobs_SchedulesController extends AuthenticatedController
         if (Request::submitted('store')) {
             $parameters = Request::getArray('parameters');
 
-            $schedule->priority    = Request::option('priority', 'normal');
             $schedule->title       = Request::get('title');
             $schedule->description = Request::get('description');
             $schedule->active      = Request::int('active', 0);
@@ -138,27 +134,20 @@ class Admin_Cronjobs_SchedulesController extends AuthenticatedController
                 $schedule->task_id = Request::option('task_id');
             }
             $schedule->parameters  = $parameters[$schedule->task_id];
-            $schedule->type        = Request::option('type') === 'once'
-                                   ? 'once'
-                                   : 'periodic';
-
-            if ($schedule->type === 'once') {
-                $temp = Request::getArray('once');
-                $schedule->next_execution = strtotime($temp['date'] . ' ' . $temp['time']);
-            } else {
-                $temp = Request::getArray('periodic');
-                $schedule->minute      = $this->extractCronItem($temp['minute']);
-                $schedule->hour        = $this->extractCronItem($temp['hour']);
-                $schedule->day         = $this->extractCronItem($temp['day']);
-                $schedule->month       = $this->extractCronItem($temp['month']);
-                $schedule->day_of_week = mb_strlen($temp['day_of_week']['value'])
-                                       ? (int) $temp['day_of_week']['value']
-                                       : null;
-
-                if ($schedule->active) {
-                    $schedule->next_execution = $schedule->calculateNextExecution();
-                }
+
+            $temp = Request::getArray('periodic');
+            $schedule->minute      = $this->extractCronItem($temp['minute']);
+            $schedule->hour        = $this->extractCronItem($temp['hour']);
+            $schedule->day         = $this->extractCronItem($temp['day']);
+            $schedule->month       = $this->extractCronItem($temp['month']);
+            $schedule->day_of_week = mb_strlen($temp['day_of_week']['value'])
+                                   ? (int) $temp['day_of_week']['value']
+                                   : null;
+
+            if ($schedule->active) {
+                $schedule->next_execution = $schedule->calculateNextExecution();
             }
+
             $schedule->store();
 
             PageLayout::postSuccess(_('Die Änderungen wurden gespeichert.'));
diff --git a/app/views/admin/cronjobs/schedules/display.php b/app/views/admin/cronjobs/schedules/display.php
index 8eb9075961090a2051a21d8295c5beaf9c6418e5..ddf1d213bea0daaec48e91a287426be91aaf93a5 100644
--- a/app/views/admin/cronjobs/schedules/display.php
+++ b/app/views/admin/cronjobs/schedules/display.php
@@ -16,9 +16,6 @@
     <dt><?= _('Aktiv') ?></dt>
     <dd><?= $schedule->active ? _('Ja') : _('Nein') ?></dd>
 
-    <dt><?= _('Priorität') ?></dt>
-    <dd><?= CronjobSchedule::describePriority($schedule->priority) ?></dd>
-
 <? if (count($schedule->parameters) > 0): ?>
     <dt><?= _('Parameter') ?></dt>
     <dd>
@@ -33,23 +30,8 @@
     <dt><?= _('Aufgabe') ?></dt>
     <dd><?= htmlReady($schedule->task->name) ?></dd>
 
-    <dt><?= _('Typ') ?></dt>
-<? if ($schedule->type === 'once'): ?>
-    <dd>
-        <?= sprintf(_('Einmalig am %s um %s'), date('d.m.Y', $schedule->next_execution), date('H:i', $schedule->next_execution)) ?>
-    </dd>
-
-    <dt><?= _('Ausgeführt') ?>?</dt>
-    <dd>
-    <? if ($schedule->execution_count > 0): ?>
-        <?= _('Ja') ?>, <?= sprintf(_('am %s um %s'), date('d.m.Y', $schedule->last_execution), date('H:i:s', $schedule->last_execution)) ?>
-    <? else: ?>
-        <?= _('Nein') ?>
-    <? endif; ?>
-    </dd>
-<? else: ?>
+    <dt><?= _('Ausführungsrhytmus') ?></dt>
     <dd>
-        <?= _('Regelmässig') ?>
         <?= $this->render_partial('admin/cronjobs/schedules/periodic-schedule', $schedule->toArray()) ?>
     </dd>
 
@@ -68,8 +50,6 @@
         <dt><?= _('Letztes Ergebnis') ?></dt>
         <dd><code><?= htmlReady($schedule->last_result) ?></code></dd>
     <? endif; ?>
-
-<? endif; ?>
 </dl>
 
 <div data-dialog-button>
diff --git a/app/views/admin/cronjobs/schedules/edit.php b/app/views/admin/cronjobs/schedules/edit.php
index 96be249d333443f9527fddb9d304a6acd347d7e9..87545105a771727883d73da1cd0d9691bd1118f7 100644
--- a/app/views/admin/cronjobs/schedules/edit.php
+++ b/app/views/admin/cronjobs/schedules/edit.php
@@ -41,17 +41,6 @@ $days_of_week = [
             <?= _('Aktiv') ?>
         </label>
 
-        <label>
-            <?= _('Priorität') ?>
-            <select name="priority" id="priority">
-            <? foreach (CronjobSchedule::getPriorities() as $priority => $label): ?>
-                <option value="<?= $priority ?>" <? if ((!$schedule->priority && $priority === CronjobSchedule::PRIORITY_NORMAL) || $schedule->priority === $priority) echo 'selected'; ?>>
-                    <?= htmlReady($label) ?>
-                </option>
-            <? endforeach; ?>
-            </select>
-        </label>
-
         <label>
             <?= _('Titel') ?>
             <input type="text" name="title" id="title" value="<?= htmlReady($schedule->title ?: '') ?>">
@@ -118,14 +107,6 @@ $days_of_week = [
     <fieldset>
         <legend><?= _('Zeitplan') ?></legend>
 
-        <label>
-            <input type="radio" name="type" value="periodic"
-                   data-activates="[name^='periodic']"
-                   data-deactivates="[name^='once']"
-                   <? if ($schedule->type === 'periodic') echo 'checked'; ?>>
-            <?= _('Wiederholt') ?>
-        </label>
-
         <section>
             <table class="default">
                 <colgroup>
@@ -218,26 +199,6 @@ $days_of_week = [
                 </tbody>
             </table>
         </section>
-
-        <label>
-            <input type="radio" name="type" value="once"
-                   data-activates="input[name^='once']"
-                   data-deactivates="[name^='periodic']"
-                   <? if ($schedule->type === 'once') echo 'checked'; ?>>
-            <?= _('Einmalig') ?>
-        </label>
-
-        <label class="col-1">
-            <?= _('Datum') ?>
-            <input type="text" name="once[date]" data-date-picker class="size-s"
-                   value="<? if ($schedule->type === 'once' && $schedule->next_execution) echo date('d.m.Y', $schedule->next_execution); ?>">
-        </label>
-
-        <label class="col-1">
-            <?= _('Uhrzeit') ?>
-            <input type="text" name="once[time]" data-time-picker class="size-s"
-                   value="<? if ($schedule->type === 'once' && $schedule->next_execution) echo date('H:i', $schedule->next_execution) ?>">
-        </label>
     </fieldset>
 
     <footer class="buttons">
diff --git a/app/views/admin/cronjobs/schedules/index.php b/app/views/admin/cronjobs/schedules/index.php
index 61608758899ea406f0ce69c0cc41fa4588927f4c..f4b0b13040642b767d2ce777e824016afc5b7930 100644
--- a/app/views/admin/cronjobs/schedules/index.php
+++ b/app/views/admin/cronjobs/schedules/index.php
@@ -18,19 +18,7 @@ use Studip\Button, Studip\LinkButton;
                 <?= sprintf(_('Passend: %u von %u Cronjobs'), count($schedules), $total) ?>
             <? endif; ?>
         </legend>
-        <label class="col-2">
-            <?= _('Typ') ?>
-            <select name="filter[type]" id="type" class="submit-upon-select">
-                <option value=""><?= _('Alle Cronjobs anzeigen') ?></option>
-                <option value="once" <? if ($filter['type'] === 'once') echo 'selected'; ?>>
-                    <?= _('Nur einmalige Cronjobs anzeigen') ?>
-                </option>
-                <option value="periodic" <? if ($filter['type'] === 'periodic') echo 'selected'; ?>>
-                    <?= _('Nur regelmässige Cronjobs anzeigen') ?>
-                </option>
-            </select>
-        </label>
-        <label class="col-2">
+        <label class="col-3">
             <?= _('Aufgabe') ?>
             <select name="filter[task_id]" id="task_id" class="submit-upon-select">
                 <option value=""><?= _('Alle Cronjobs anzeigen') ?></option>
@@ -41,7 +29,7 @@ use Studip\Button, Studip\LinkButton;
                 <? endforeach; ?>
             </select>
         </label>
-        <label class="col-2">
+        <label class="col-3">
             <?= _('Status') ?>
             <select name="filter[status]" id="status" class="submit-upon-select">
                 <option value=""><?= _('Alle Cronjobs anzeigen') ?></option>
@@ -74,7 +62,6 @@ use Studip\Button, Studip\LinkButton;
             <col style="width: 20px">
             <col>
             <col style="width: 40px">
-            <col style="width: 100px">
             <col style="width: 30px">
             <col style="width: 30px">
             <col style="width: 30px">
@@ -91,7 +78,6 @@ use Studip\Button, Studip\LinkButton;
             </th>
             <th data-sort="text"><?= _('Cronjob') ?></th>
             <th data-sort="htmldata"><?= _('Aktiv') ?></th>
-            <th data-sort="text"><?= _('Typ') ?></th>
             <th colspan="5" data-sort="false"><?= _('Ausführung') ?></th>
             <th data-sort="false"><?= _('Optionen') ?></th>
         </tr>
@@ -124,14 +110,7 @@ use Studip\Button, Studip\LinkButton;
                         </a>
                     <? endif; ?>
                 </td>
-                <td><?= $schedule->type === 'once' ? _('Einmalig') : _('Regelmässig') ?></td>
-                <? if ($schedule->type === 'once'): ?>
-                    <td colspan="5">
-                        <?= strftime('%x %R', $schedule->next_execution) ?>
-                    </td>
-                <? else: ?>
-                    <?= $this->render_partial('admin/cronjobs/schedules/periodic-schedule', $schedule->toArray() + ['display' => 'table-cells']) ?>
-                <? endif; ?>
+                <?= $this->render_partial('admin/cronjobs/schedules/periodic-schedule', $schedule->toArray() + ['display' => 'table-cells']) ?>
                 <td style="text-align: right">
                     <a data-dialog href="<?= $controller->display($schedule) ?>">
                         <?= Icon::create('admin')->asImg(['title' => _('Cronjob anzeigen')]) ?>
@@ -152,7 +131,7 @@ use Studip\Button, Studip\LinkButton;
         </tbody>
         <tfoot>
         <tr>
-            <td colspan="10">
+            <td colspan="9">
                 <select name="action" data-activates=".cronjobs button[name=bulk]" aria-label="<?= _('Aktion auswählen')?>">
                     <option value="">- <?= _('Aktion auswählen') ?> -</option>
                     <option value="activate"><?= _('Aktivieren') ?></option>
diff --git a/db/migrations/1.231_add_files_search_index.php b/db/migrations/1.231_add_files_search_index.php
index 18a22ae009a78bdee7d9dab67c5adb8591b0f36d..5ac455ac5004a1b79769274df9567b8cac25b60b 100644
--- a/db/migrations/1.231_add_files_search_index.php
+++ b/db/migrations/1.231_add_files_search_index.php
@@ -181,12 +181,7 @@ class AddFilesSearchIndex extends Migration
 
     private function installCronjob()
     {
-        $scheduler = CronjobScheduler::getInstance();
-
         require_once 'lib/classes/FilesSearch/Cronjob.php';
-        $task = new  \FilesSearch\Cronjob();
-        $taskId = $scheduler->registerTask($task);
-        $scheduler->scheduleOnce($taskId, strtotime('+1 minute'))->activate();
-        $scheduler->schedulePeriodic($taskId, 55, 0)->activate();
+        \FilesSearch\Cronjob::register()->schedule(55, 0)->activate(true);
     }
 }
diff --git a/db/migrations/6.0.1_remove_cronjobs_scheduling_once_and_priority.php b/db/migrations/6.0.1_remove_cronjobs_scheduling_once_and_priority.php
new file mode 100644
index 0000000000000000000000000000000000000000..d3d95b036c9b47991b5a8b7ad3bbe841d9c0fa59
--- /dev/null
+++ b/db/migrations/6.0.1_remove_cronjobs_scheduling_once_and_priority.php
@@ -0,0 +1,19 @@
+<?php
+ return new class extends Migration
+ {
+     protected function up()
+     {
+         $query = "ALTER TABLE `cronjobs_schedules`
+                   DROP COLUMN `priority`,
+                   DROP COLUMN `type`";
+         DBManager::get()->exec($query);
+     }
+
+     protected function down()
+     {
+         $query = "ALTER TABLE `cronjobs_schedules`
+                   ADD COLUMN `priority` ENUM('low', 'normal', 'high') COLLATE `latin1_bin` DEFAULT NULL AFTER `parameters`,
+                   ADD COLUMN `type` ENUM('periodic', 'once') COLLATE `latin1_bin` DEFAULT NULL AFTER `priority`";
+         DBManager::get()->exec($query);
+     }
+ };
diff --git a/lib/classes/CronjobScheduler.class.php b/lib/classes/CronjobScheduler.class.php
index 67db94c6d4d7eabb9e0d5bd4d3df1a9bcb952959..69b1fb39f16312cc8b33fe3c7956d7d836d7d1e7 100644
--- a/lib/classes/CronjobScheduler.class.php
+++ b/lib/classes/CronjobScheduler.class.php
@@ -131,35 +131,6 @@ class CronjobScheduler
         return $this;
     }
 
-    /**
-     * Schedules a task for a single execution at the provided time.
-     *
-     * @param String $task_id    The id of the task to be executed
-     * @param int    $timestamp  When the task should be executed
-     * @param String $priority   Priority of the execution (low, normal, high),
-     *                           defaults to normal
-     * @param Array  $parameters Optional parameters passed to the task
-     * @return CronjobSchedule The generated schedule object.
-     */
-    public function scheduleOnce($task_id, $timestamp, $priority = CronjobSchedule::PRIORITY_NORMAL,
-                                 $parameters = [])
-    {
-        $schedule = new CronjobSchedule();
-        $schedule->type           = 'once';
-        $schedule->task_id        = $task_id;
-        $schedule->parameters     = $parameters;
-        $schedule->priority       = $priority;
-        $schedule->next_execution = $timestamp;
-
-        $schedule->store();
-
-        $task = $schedule->task;
-        $task->assigned_count += 1;
-        $task->store();
-
-        return $schedule;
-    }
-
     /**
      * Schedules a task for periodic execution with the provided schedule.
      *
@@ -185,21 +156,21 @@ class CronjobScheduler
      *                            - 1 >= x >= 7 for "exactly at day of week x"
      *                              (x starts with monday at 1 and ends with
      *                               sunday at 7)
-     * @param String $priority   Priority of the execution (low, normal, high),
-     *                           defaults to normal
      * @param Array  $parameters Optional parameters passed to the task
      * @return CronjobSchedule The generated schedule object.
      */
-    public function schedulePeriodic($task_id, $minute = null, $hour = null,
-                                     $day = null, $month = null, $day_of_week = null,
-                                     $priority = CronjobSchedule::PRIORITY_NORMAL,
-                                     $parameters = [])
-    {
+    public function schedule(
+        string $task_id,
+        ?int $minute = null,
+        ?int $hour = null,
+        ?int $day = null,
+        ?int $month = null,
+        ?int $day_of_week = null,
+        array $parameters = []
+    ): CronjobSchedule {
         $schedule = new CronjobSchedule();
-        $schedule->type       = 'periodic';
         $schedule->task_id    = $task_id;
         $schedule->parameters = $parameters;
-        $schedule->priority   = $priority;
 
         $schedule->minute = $minute;
         $schedule->hour = $hour;
@@ -216,6 +187,24 @@ class CronjobScheduler
         return $schedule;
     }
 
+    /**
+     * An alias for schedule for backwards compatibility.
+     *
+     * @see CronjobScheduler::schedule()
+     */
+    public function schedulePeriodic(
+        $task_id,
+        $minute = null,
+        $hour = null,
+        $day = null,
+        $month = null,
+        $day_of_week = null,
+        $priority = null,
+        $parameters = []
+    ) {
+        return $this->schedule($task_id, $minute, $hour, $day, $month, $day_of_week, $parameters);
+    }
+
     /**
      * Cancels the provided schedule.
      *
@@ -259,7 +248,7 @@ class CronjobScheduler
 
         // Find all schedules that are due to execute and which task is active
         $temp = CronjobSchedule::findBySQL('active = 1 AND next_execution <= UNIX_TIMESTAMP() '
-                                          .'ORDER BY priority DESC, next_execution ASC');
+                                          .'ORDER next_execution');
         $schedules = array_filter($temp, function ($schedule) { return $schedule->task->active; });
 
         if (count($schedules) === 0) {
diff --git a/lib/models/CronjobSchedule.class.php b/lib/models/CronjobSchedule.class.php
index 4304be1717948f7ec5012e83fbc7ac50fc8d2cfe..0eb19ba8ea6c9014756730ce679f3ed52e3e2780 100644
--- a/lib/models/CronjobSchedule.class.php
+++ b/lib/models/CronjobSchedule.class.php
@@ -34,8 +34,6 @@
  * @property string|null $title database column
  * @property string|null $description database column
  * @property string|null $parameters database column
- * @property string $priority database column
- * @property string $type database column
  * @property int|null $minute database column
  * @property int|null $hour database column
  * @property int|null $day database column
@@ -53,10 +51,6 @@
 
 class CronjobSchedule extends SimpleORMap
 {
-    const PRIORITY_LOW    = 'low';
-    const PRIORITY_NORMAL = 'normal';
-    const PRIORITY_HIGH   = 'high';
-
     protected static function configure($config = [])
     {
         $config['db_table'] = 'cronjobs_schedules';
@@ -78,41 +72,6 @@ class CronjobSchedule extends SimpleORMap
         parent::configure($config);
     }
 
-    /**
-     * Returns a mapped version of the priorities (key = priority value,
-     * value = localized priority label).
-     *
-     * @return Array The mapped priorities
-     */
-    public static function getPriorities()
-    {
-        $mapping = [];
-        $mapping[self::PRIORITY_LOW]    = _('niedrig');
-        $mapping[self::PRIORITY_NORMAL] = _('normal');
-        $mapping[self::PRIORITY_HIGH]   = _('hoch');
-
-        return $mapping;
-    }
-
-    /**
-     * Maps a priority value to it's localized label.
-     *
-     * @param  String $priority Priority value
-     * @return String The localized label
-     * @throws RuntimeException when an unknown priority value is passed
-     */
-    public static function describePriority($priority)
-    {
-        $priority = $priority ?? 'normal';
-
-        $mapping = self::getPriorities();
-        if (!isset($mapping[$priority])) {
-            throw new RuntimeException('Access to unknown priority "' . $priority . '"');
-        }
-
-        return $mapping[$priority];
-    }
-
     /**
      * replaces title with task name if title is empty.
      *
@@ -171,10 +130,12 @@ class CronjobSchedule extends SimpleORMap
      *
      * @return CronjobSchedule Returns itself to allow chaining
      */
-    public function activate()
+    public function activate(bool $run_immediately = false)
     {
-        $this->active         = 1;
-        $this->next_execution = $this->calculateNextExecution();
+        $next_execution = $run_immediately ? strtotime('-1 minute') : $this->calculateNextExecution();
+
+        $this->active = true;
+        $this->next_execution = $next_execution;
         $this->store();
 
         return $this;
@@ -187,7 +148,7 @@ class CronjobSchedule extends SimpleORMap
      */
     public function deactivate()
     {
-        $this->active = 0;
+        $this->active = false;
         $this->store();
 
         return $this;
@@ -221,9 +182,6 @@ class CronjobSchedule extends SimpleORMap
 
         $result = $this->task->engage($this->last_result, $this->parameters);
 
-        if ($this->type === 'once') {
-            $this->active = 0;
-        }
         $this->last_result = $result;
         $this->store();
 
@@ -245,16 +203,12 @@ class CronjobSchedule extends SimpleORMap
     /**
      * Calculates the next execution for this schedule.
      *
-     * For schedules of type 'once' the check solely tests whether the
-     * timestamp has already passed and will return false in that case.
-     * Otherwise the defined timestamp will be returned.
-     *
-     * For schedules of type 'periodic' the next execution
-     * is calculated by increasing the current timestamp and testing
-     * whether all conditions match. This is not the best method to test
-     * and should be optimized sooner or later.
+     * The next execution is calculated by increasing the current timestamp
+     * and testing whether all conditions match. This is not the best method
+     * to test and should be optimized sooner or later.
      *
      * @param mixed $now Defines the temporal fix point
+     *
      * @return int Timestamp of calculated next execution
      * @throws RuntimeException When calculation takes too long (you should
      *                          check the conditions for validity in that case)
@@ -263,12 +217,6 @@ class CronjobSchedule extends SimpleORMap
     {
         $now = $now ?: time();
 
-        if ($this->type === 'once') {
-            return $now <= $this->next_execution
-                ? $this->next_execution
-                : false;
-        }
-
         $result  = $now;
         $result -= $result % 60;
 
diff --git a/lib/models/CronjobTask.class.php b/lib/models/CronjobTask.class.php
index f235951618f0df598de6f9724a71814d7806830a..8a56ca0ad91928c2bb13cf2b02046c0598cdcfc0 100644
--- a/lib/models/CronjobTask.class.php
+++ b/lib/models/CronjobTask.class.php
@@ -159,72 +159,70 @@ class CronjobTask extends SimpleORMap
 
 // Convenience methods to ease the usage
 
-    /**
-     * Schedules this task for a single execution at the provided time.
-     *
-     * @param int    $timestamp  When the task should be executed
-     * @param String $priority   Priority of the execution (low, normal, high),
-     *                           defaults to normal
-     * @param Array  $parameters Optional parameters passed to the task
-     * @return CronjobSchedule The generated schedule object.
-     */
-    public function scheduleOnce($timestamp, $priority = CronjobSchedule::PRIORITY_NORMAL,
-                                 $parameters = [])
-    {
-        return CronjobScheduler::getInstance()->scheduleOnce(
-            $this->id,
-            $timestamp,
-            $priority,
-            $parameters
-        );
-    }
-
     /**
      * Schedules this task for periodic execution with the provided schedule.
      *
-     * @param mixed  $minute      Minute part of the schedule:
+     * @param int|null  $minute      Minute part of the schedule:
      *                            - null for "every minute" a.k.a. "don't care"
      *                            - x < 0 for "every x minutes"
      *                            - x >= 0 for "only at minute x"
-     * @param mixed  $hour        Hour part of the schedule:
+     * @param int|null  $hour        Hour part of the schedule:
      *                            - null for "every hour" a.k.a. "don't care"
      *                            - x < 0 for "every x hours"
      *                            - x >= 0 for "only at hour x"
-     * @param mixed  $day         Day part of the schedule:
+     * @param int|null  $day         Day part of the schedule:
      *                            - null for "every day" a.k.a. "don't care"
      *                            - x < 0 for "every x days"
      *                            - x > 0 for "only at day x"
-     * @param mixed  $month       Month part of the schedule:
+     * @param int|null  $month       Month part of the schedule:
      *                            - null for "every month" a.k.a. "don't care"
      *                            - x < 0 for "every x months"
      *                            - x > 0 for "only at month x"
-     * @param mixed  $day_of_week Day of week part of the schedule:
+     * @param int|null  $day_of_week Day of week part of the schedule:
      *                            - null for "every day" a.k.a. "don't care"
      *                            - 1 >= x >= 7 for "exactly at day of week x"
      *                              (x starts with monday at 1 and ends with
      *                               sunday at 7)
-     * @param String $priority   Priority of the execution (low, normal, high),
-     *                           defaults to normal
-     * @param Array  $parameters Optional parameters passed to the task
+     * @param array  $parameters Optional parameters passed to the task
      * @return CronjobSchedule The generated schedule object.
      */
-    public function schedulePeriodic($minute = null, $hour = null,
-                                     $day = null, $month = null, $day_of_week = null,
-                                     $priority = CronjobSchedule::PRIORITY_NORMAL,
-                                     $parameters = [])
-    {
-        return CronjobScheduler::getInstance()->schedulePeriodic(
+    public function schedule(
+        ?int $minute = null,
+        ?int $hour = null,
+        ?int $day = null,
+        ?int $month = null,
+        ?int $day_of_week = null,
+        array $parameters = []
+    ): CronjobSchedule {
+        return CronjobScheduler::getInstance()->schedule(
             $this->id,
             $minute,
             $hour,
             $day,
             $month,
             $day_of_week,
-            $priority,
             $parameters
         );
     }
 
+    /**
+     * An alias for schedule for backwards compatibility.
+     *
+     * @see CronjobTask::schedule()
+     * @return CronjobSchedule
+     */
+    public function schedulePeriodic(
+        $minute = null,
+        $hour = null,
+        $day = null,
+        $month = null,
+        $day_of_week = null,
+        $priority = '',
+        $parameters = []
+    ) {
+        return $this->schedule($minute, $hour, $day, $month, $day_of_week, $parameters);
+    }
+
     /**
      * Extracts the default parameter values from the associated task.
      *
diff --git a/tests/unit/lib/classes/CronjobScheduleTest.php b/tests/unit/lib/classes/CronjobScheduleTest.php
index a97872ef3c57f5a3f0a89339353148fc22707b4c..b6fd573122f5193f3fcabf3e555acd2317793f16 100644
--- a/tests/unit/lib/classes/CronjobScheduleTest.php
+++ b/tests/unit/lib/classes/CronjobScheduleTest.php
@@ -26,69 +26,15 @@ class CronjobScheduleTest extends \Codeception\Test\Unit
         StudipTestHelper::tear_down_tables();
     }
 
-    function testOnceSchedule()
-    {
-        $schedule = new CronjobSchedule();
-        $schedule->type = 'once';
-
-        $this->assertEquals('once', $schedule->type);
-
-        return $schedule;
-    }
-
-    /**
-     * @depends testOnceSchedule
-     */
-    function testNextExecutionOncePast($schedule)
-    {
-        $now  = strtotime('10.11.2013 01:02:00');
-        $then = strtotime('-2 weeks', $now);
-
-        $schedule->next_execution = $then;
-        $schedule->calculateNextExecution();
-
-        $this->assertEquals($then, $schedule->next_execution);
-    }
-
-    /**
-     * @depends testOnceSchedule
-     */
-    function testNextExecutionOncePresent($schedule)
-    {
-        $now = strtotime('10.11.2013 01:02:00');
-
-        $schedule->next_execution = $now;
-        $schedule->calculateNextExecution();
-
-        $this->assertEquals($now, $schedule->next_execution);
-    }
-
-    /**
-     * @depends testOnceSchedule
-     */
-    function testNextExecutionOnceFuture(CronjobSchedule $schedule)
-    {
-        $now  = strtotime('10.11.2013 01:02:00');
-        $then = strtotime('+2 weeks', $now);
-
-        $schedule->next_execution = $then;
-        $schedule->calculateNextExecution($now);
-
-        $this->assertEquals($then, $schedule->next_execution);
-    }
-
     function testPeriodicSchedule()
     {
         $schedule = new CronjobSchedule();
-        $schedule->type        = 'periodic';
         $schedule->minute      = null;
         $schedule->hour        = null;
         $schedule->day         = null;
         $schedule->month       = null;
         $schedule->day_of_week = null;
 
-        $this->assertEquals('periodic', $schedule->type);
-
         return $schedule;
     }