diff --git a/config/install/ultimate_cron.settings.yml b/config/install/ultimate_cron.settings.yml
index 61efbee..b75d558 100644
--- a/config/install/ultimate_cron.settings.yml
+++ b/config/install/ultimate_cron.settings.yml
@@ -12,7 +12,6 @@ queue:
     threads: 4
     threshold: 10
 launcher:
-  poorman_keepalive: FALSE
   thread: 'any'
   max_threads: 1
   lock_timeout: 3600
diff --git a/config/schema/ultimate_cron.schema.yml b/config/schema/ultimate_cron.schema.yml
index 2d3da32..a14a92f 100644
--- a/config/schema/ultimate_cron.schema.yml
+++ b/config/schema/ultimate_cron.schema.yml
@@ -61,9 +61,6 @@ ultimate_cron.settings:
         max_execution_time:
           type: integer
           label: Maximum time for the job to run
-        poorman_keepalive:
-          type: boolean
-          label: Keepalive
     logger:
       type: mapping
       label: Logger
@@ -207,9 +204,6 @@ ultimate_cron.plugin.launcher.serial:
         max_threads:
           type: integer
           label: 'Max threads'
-        poorman_keepalive:
-          type: boolean
-          label: 'Keepalive'
         thread:
           type: integer
           label: 'Thread'
diff --git a/src/Form/LauncherSettingsForm.php b/src/Form/LauncherSettingsForm.php
index a9b4b28..b3e2d65 100644
--- a/src/Form/LauncherSettingsForm.php
+++ b/src/Form/LauncherSettingsForm.php
@@ -65,18 +65,6 @@ class LauncherSettingsForm extends ConfigFormBase {
       '#required' => TRUE,
       '#weight' => 1,
     ];
-    $form['launcher']['poorman_keepalive'] = [
-      '#parents' => [
-        'settings',
-        'poorman_keepalive',
-      ],
-      '#title' => t('Poormans cron keepalive'),
-      '#type' => 'checkbox',
-      '#default_value' => $values->get('launcher.poorman_keepalive'),
-      '#description' => t('Retrigger poormans cron after it has finished. Requires $base_url to be accessible from the webserver.'),
-      '#fallback' => TRUE,
-      '#weight' => 3,
-    ];
 
     $options = ['any', '-- fixed --', '1'];
 
@@ -104,7 +92,6 @@ class LauncherSettingsForm extends ConfigFormBase {
     $this->config('ultimate_cron.settings')
       ->set('launcher.lock_timeout', $form_state->getValue('lock_timeout'))
       ->set('launcher.max_threads', $form_state->getValue('max_threads'))
-      ->set('launcher.poorman_keepalive', $form_state->getValue('poorman_keepalive'))
       ->set('launcher.thread', $form_state->getValue('thread'))
       ->save();
 
diff --git a/src/Launcher/LauncherBase.php b/src/Launcher/LauncherBase.php
index 789e177..e829019 100644
--- a/src/Launcher/LauncherBase.php
+++ b/src/Launcher/LauncherBase.php
@@ -47,11 +47,6 @@ use Exception;
  *       checks the jobs schedule before launching and that it also handles
  *       locking wrt concurrency for the launcher itself.
  *
- *   launchPoorman()
- *     - Launches all scheduled jobs via the proper launcher for each jobs.
- *       This method only needs to be implemented if the launcher wishes to
- *       provide a poormans cron launching mechanism. It is assumed that
- *       the poormans cron launcher handles locking wrt concurrency, etc.
  */
 abstract class LauncherBase extends CronPlugin implements LauncherInterface {
 
diff --git a/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php b/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php
index 61260e1..447710e 100644
--- a/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php
+++ b/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php
@@ -48,7 +48,6 @@ class SerialLauncher extends LauncherBase implements PluginCleanupInterface {
       'launcher' => array(
         'max_threads' => 1,
         'thread' => 'any',
-        'poorman_keepalive' => FALSE,
       ),
     ) + parent::defaultConfiguration();
   }
@@ -96,14 +95,6 @@ class SerialLauncher extends LauncherBase implements PluginCleanupInterface {
         '#required' => TRUE,
         '#weight' => 1,
       );
-      $form['launcher']['poorman_keepalive'] = array(
-        '#title' => t("Poormans cron keepalive"),
-        '#type' => 'checkbox',
-        '#default_value' => $this->configuration['launcher']['poorman_keepalive'],
-        '#description' => t('Retrigger poormans cron after it has finished. Requires $base_url to be accessible from the webserver.'),
-        '#fallback' => TRUE,
-        '#weight' => 3,
-      );
 
       return $form;
     }
@@ -388,68 +379,4 @@ class SerialLauncher extends LauncherBase implements PluginCleanupInterface {
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function launchPoorman() {
-    $lock = \Drupal::service('ultimate_cron.lock');
-    $settings = $this->getConfiguration();
-    // Is it time to run cron?
-    $cron_last = variable_get('cron_last', 0);
-    $cron_next = floor(($cron_last + 60) / 60) * 60;
-    $time = time();
-    if ($time < $cron_next) {
-      if ($settings['poorman_keepalive'] && $lock_id = $lock->lock('ultimate_cron_poorman_serial', 60)) {
-        ultimate_cron_poorman_page_flush();
-        $sleep = $cron_next - $time;
-        sleep($sleep);
-        /*
-        while ($sleep--) {
-          error_log("SLEEPING3: $sleep");
-          sleep(1);
-        }
-        /**/
-        ultimate_cron_poorman_trigger();
-        $lock->unLock($lock_id);
-      }
-      return;
-    }
-
-    unset($_GET['thread']);
-    ultimate_cron_poorman_page_flush();
-    ultimate_cron_run_launchers();
-
-    // Check poorman settings. If launcher has changed, we don't want
-    // to keepalive.
-    $poorman = ultimate_cron_plugin_load('settings', 'poorman');
-    if (!$poorman) {
-      return;
-    }
-
-    $settings = $poorman->getConfiguration();
-    if (!$settings['launcher'] || $settings['launcher'] !== $this->name) {
-      return;
-    }
-
-    $settings = $this->getConfiguration();
-    if ($settings['poorman_keepalive'] && $lock_id = $lock->lock('ultimate_cron_poorman_serial', 60)) {
-      // Is it time to run cron? If not wait before re-launching.
-      $cron_last = variable_get('cron_last', 0);
-      $cron_next = floor(($cron_last + 60) / 60) * 60;
-      $time = time();
-      if ($time < $cron_next) {
-        $sleep = $cron_next - $time;
-        sleep($sleep);
-        /*
-        while ($sleep--) {
-          error_log("SLEEPING4: $sleep");
-          sleep(1);
-        }
-        /**/
-      }
-
-      $lock->unLock($lock_id);
-      ultimate_cron_poorman_trigger();
-    }
-  }
 }
diff --git a/ultimate_cron.module b/ultimate_cron.module
index 2a7b18a..7c94ca3 100755
--- a/ultimate_cron.module
+++ b/ultimate_cron.module
@@ -227,6 +227,18 @@ function ultimate_cron_modules_installed($modules) {
   \Drupal::service('ultimate_cron.discovery')->discoverCronJobs();
 }
 
+/**
+ * Implements hook_form_FORM_ID_alter() for the system_cron_settings() form.
+ */
+function ultimate_cron_form_system_cron_settings_alter(&$form, &$form_state) {
+  $options = [60, 300, 900, 1800, 3600, 10800, 21600, 43200, 86400, 604800];
+  $form['automated_cron']['interval']['#options'] = [0 => t('Never')] + array_map([
+      \Drupal::service('date.formatter'),
+      'formatInterval',
+    ], array_combine($options, $options));
+
+}
+
 // ---------- CRON RULE FUNCTIONS ----------
 /**
  * Return blank values for all keys in an array.
diff --git a/ultimate_cron.poorman.inc b/ultimate_cron.poorman.inc
deleted file mode 100644
index 687d117..0000000
--- a/ultimate_cron.poorman.inc
+++ /dev/null
@@ -1,211 +0,0 @@
-<?php
-/**
- * @file
- * Poormans cron functions.
- */
-use Drupal\Core\Logger\RfcLogLevel;
-
-/**
- * Output buffer callback for poormans cron early page flush.
- *
- * @param string $content
- *   The content of the output buffer.
- *
- * @return string
- *   The content of the output buffer.
- */
-function _ultimate_cron_poorman_page_flush($content) {
-  if (empty($GLOBALS['ultimate_cron_page_flush'])) {
-    return $content;
-  }
-
-  // Check output buffer handlers to determine if we can safely
-  // set the content size in the http header.
-  $handlers = ob_list_handlers();
-
-  // Pop ourselves off...
-  array_pop($handlers);
-
-  // We can safe ignore default output handlers.
-  $default = array_keys($handlers, 'default output handler');
-  foreach ($default as $key) {
-    unset($handlers[$key]);
-  }
-
-  // We can also safely ignore zlib output handlers, if we remember to
-  // disable compression.
-  if ($zlib = array_keys($handlers, 'zlib output compression')) {
-    foreach ($zlib as $key) {
-      unset($handlers[$key]);
-    }
-    ini_set('zlib.output_compression', 'Off');
-  }
-
-  // If there are any unknown handlers left, we cannot safely set the
-  // Content-Length.
-  if (empty($handlers)) {
-    $size = strlen($content);
-    header("Content-Length: $size");
-  }
-
-  // In any case, we can always tell the client to close the connection.
-  header("Connection: close");
-
-  return $content;
-}
-
-// Output buffering messes up Drush ...
-if (ultimate_cron_poorman_capable()) {
-  ob_start('_ultimate_cron_poorman_page_flush');
-}
-
-///**
-// * Determines if poormans cron can run on this page.
-// */
-//function ultimate_cron_poorman_capable() {
-//  static $capable;
-//  if (isset($capable)) {
-//    return $capable;
-//  }
-//
-//  if (drupal_is_cli()) {
-//    $capable = FALSE;
-//  }
-//  elseif ($_SERVER['REQUEST_METHOD'] !== 'GET') {
-//    $capable = FALSE;
-//  }
-//  elseif (basename($_SERVER['PHP_SELF']) == 'cron.php') {
-//    $capable = FALSE;
-//  }
-//  else {
-//    $capable = TRUE;
-//  }
-//
-//  return $capable;
-//}
-
-/**
- * Implements hook_exit().
- */
-function ultimate_cron_exit($dest = NULL) {
-  // No need for poorman until site is installed.
-  if (variable_get('install_task') != 'done') {
-    return;
-  }
-
-  // Don't attempt poormans stuff until fully bootstrapped.
-  if (drupal_bootstrap() < DRUPAL_BOOTSTRAP_FULL) {
-    return;
-  }
-
-  // We're picky about when we run poormans cron, because
-  // we may want to flush the output buffer.
-  if (!ultimate_cron_poorman_capable()) {
-    return;
-  }
-
-  $poorman = ultimate_cron_plugin_load('settings', 'poorman');
-  if (!$poorman) {
-    return;
-  }
-
-  $settings = $poorman->getDefaultConfiguration();
-  if (!$settings['launcher']) {
-    return;
-  }
-
-  $launcher = ultimate_cron_plugin_load('launcher', $settings['launcher']);
-  if (!$launcher) {
-    \Drupal::logger('ultimate_cron')->error('Invalid poormans cron launcher: @name', array(
-      '@name' => $settings['launcher'],
-    ));
-    return;
-  }
-
-  // Poormans cron needs to be the last that runs.
-  // Run remaining exit hooks, and shutdown like core does.
-  $modules = module_implements('exit');
-
-  do {
-    $module = array_shift($modules);
-  } while ($modules && ($module !== 'ultimate_cron'));
-
-  foreach ($modules as $module) {
-    module_invoke($module, 'exit', $dest);
-  }
-
-  // Commit the user session, if needed.
-  drupal_session_commit();
-
-  if (variable_get('cache', 0) && ($cache = drupal_page_set_cache())) {
-    drupal_serve_page_from_cache($cache);
-  }
-  // ultimate_cron_poorman_page_flush();
-
-  _registry_check_code(REGISTRY_WRITE_LOOKUP_CACHE);
-  drupal_cache_system_paths();
-  module_implements_write_cache();
-
-  // Poormans cron should run as anonymous, just like regular cron does.
-  global $user;
-  $original_user = $user;
-  $user = drupal_anonymous_user();
-  $launcher->launchPoorman();
-  $user = $original_user;
-  exit;
-}
-
-/**
- * Flush the page and end the client request.
- */
-function ultimate_cron_poorman_page_flush() {
-  @ignore_user_abort();
-
-  $GLOBALS['ultimate_cron_page_flush'] = TRUE;
-  while (ob_get_level() > 0) {
-    ob_end_flush();
-  }
-  flush();
-
-  // FastCGI may need another way of letting the client know, that
-  // we're done with it.
-  if (function_exists('fastcgi_finish_request')) {
-    fastcgi_finish_request();
-  }
-}
-
-/**
- * Page callback for triggering poormans cron.
- */
-function ultimate_cron_poorman_page() {
-  drupal_page_is_cacheable(FALSE);
-  drupal_exit();
-}
-
-/**
- * Send the actual HTTP request for launching threads.
- */
-function ultimate_cron_poorman_trigger() {
-  $url_options = variable_get('ultimate_cron_poorman_url_options', array());
-  $http_options = variable_get('ultimate_cron_poorman_http_options', array());
-
-  $url_options = array(
-    'query' => array('timestamp' => REQUEST_TIME),
-    'absolute' => TRUE,
-  ) + $url_options;
-
-  $http_options = array(
-    'headers' => array(
-      'User-Agent' => 'Ultimate Cron',
-    ),
-  ) + $http_options;
-
-  $url = url('admin/config/system/cron/poorman', $url_options);
-  $response = drupal_http_request($url, $http_options);
-  if (!empty($response->error)) {
-    watchdog('ultimate_cron', 'Could not trigger poorman at @url. Error: @error', array(
-      '@url' => $url,
-      '@error' => $response->error,
-    ), RfcLogLevel::ERROR);
-  }
-}
