diff --git a/core/composer.json b/core/composer.json
index 26938e3..b35666b 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -39,6 +39,7 @@
   "replace": {
     "drupal/action": "self.version",
     "drupal/aggregator": "self.version",
+    "drupal/automated_cron": "self.version",
     "drupal/bartik": "self.version",
     "drupal/ban": "self.version",
     "drupal/basic_auth": "self.version",
diff --git a/core/modules/automated_cron/automated_cron.info.yml b/core/modules/automated_cron/automated_cron.info.yml
new file mode 100644
index 0000000..0a5c91c
--- /dev/null
+++ b/core/modules/automated_cron/automated_cron.info.yml
@@ -0,0 +1,6 @@
+name: Automatic cron
+type: module
+description: Provides an automatic cron by executing it at the end of a request
+package: Core
+version: VERSION
+core: 8.x
diff --git a/core/modules/automated_cron/automated_cron.module b/core/modules/automated_cron/automated_cron.module
new file mode 100644
index 0000000..92efdeb
--- /dev/null
+++ b/core/modules/automated_cron/automated_cron.module
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * @file
+ * Provides an automatic cron by executing it at the end of a request.
+ */
+
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Implements hook_help().
+ */
+function automated_cron_help($route_name, RouteMatchInterface $route_match) {
+  switch ($route_name) {
+    case 'help.page.automated_cron':
+      $output = '';
+      $output .= '<h3>' . t('About') . '</h3>';
+      $output .= '<p>' . t('The automated cron system runs the Drupal cron operation using normal browser/page requests instead of having to set up a separate cron job. Automatic cron module checks at the end of each Drupal request when cron operation was last ran and, if it has been too long since last run, it executes the cron tasks as part of that request. For more information, see the <a href="!docs">cron tutorial on drupal.org</a>.', array('!docs' => 'https://www.drupal.org/cron'))  . '</p>';
+      $output .= '<h3>' . t('Uses') . '</h3>';
+      $output .= '<dl>';
+      $output .= '<dt>' . t('Configuring the automatic cron') . '</dt>';
+      $output .= '<dd>' . t('On the <a href="!cron-settings">Cron page</a>,  you can manage the automated cron settings. The default frequency is every three hours.', array('!cron-settings' => \Drupal::url('system.cron_settings')))  . '</dd>';
+      $output .= '<dt>' . t('Disabling the automatic cron') . '</dt>';
+      $output .= '<dd>' . t('If you want to disable the automated cron, change the "Run cron every" value to "Never".')  . '</dd>';
+      $output .= '</dl>';
+      return $output;
+  }
+}
+
+/**
+ * Implements hook_form_FORM_ID_alter().
+ */
+function automated_cron_form_system_cron_settings_alter(&$form, &$form_state) {
+  $cron_config = \Drupal::config('system.cron');
+
+  // Add automatic cron settings.
+  $form['cron'] = [
+    '#title' => t('Cron settings'),
+    '#type' => 'details',
+    '#open' => TRUE,
+  ];
+  $options = [3600, 10800, 21600, 43200, 86400, 604800];
+  $form['cron']['cron_safe_threshold'] = [
+    '#type' => 'select',
+    '#title' => t('Run cron every'),
+    '#description' => t('More information about setting up scheduled tasks can be found by <a href="@url">reading the cron tutorial on drupal.org</a>.', ['@url' => 'https://www.drupal.org/cron']),
+    '#default_value' => $cron_config->get('threshold.autorun'),
+    '#options' => [0 => t('Never')] + array_map([Drupal::service('date.formatter'), 'formatInterval'], array_combine($options, $options)),
+  ];
+
+  $form['actions']['#type'] = 'actions';
+  $form['actions']['submit'] = [
+    '#type' => 'submit',
+    '#value' => t('Save configuration'),
+    '#button_type' => 'primary',
+  ];
+
+  // Add submit callback.
+  $form['#submit'][] = 'automated_cron_settings_submit';
+}
+
+/**
+ * Form submission handler for system_cron_settings().
+ */
+function automated_cron_settings_submit($form, FormStateInterface $form_state) {
+  \Drupal::configFactory()->getEditable('system.cron')
+    ->set('threshold.autorun', $form_state->getValue('cron_safe_threshold'))
+    ->save();
+}
diff --git a/core/modules/automated_cron/automated_cron.services.yml b/core/modules/automated_cron/automated_cron.services.yml
new file mode 100644
index 0000000..729842f
--- /dev/null
+++ b/core/modules/automated_cron/automated_cron.services.yml
@@ -0,0 +1,6 @@
+services:
+  automated_cron.subscriber:
+    class: Drupal\automated_cron\EventSubscriber\AutomaticCron
+    arguments: ['@cron', '@config.factory', '@state']
+    tags:
+      - { name: event_subscriber }
diff --git a/core/modules/automated_cron/src/EventSubscriber/AutomaticCron.php b/core/modules/automated_cron/src/EventSubscriber/AutomaticCron.php
new file mode 100644
index 0000000..9b8ef40
--- /dev/null
+++ b/core/modules/automated_cron/src/EventSubscriber/AutomaticCron.php
@@ -0,0 +1,85 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\automated_cron\EventSubscriber\AutomaticCron.
+ */
+
+namespace Drupal\automated_cron\EventSubscriber;
+
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\CronInterface;
+use Drupal\Core\State\StateInterface;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\HttpKernel\Event\PostResponseEvent;
+use Symfony\Component\HttpKernel\KernelEvents;
+
+/**
+ * A subscriber running cron when a request terminates.
+ */
+class AutomaticCron implements EventSubscriberInterface {
+
+  /**
+   * The cron service.
+   *
+   * @var \Drupal\Core\CronInterface
+   */
+  protected $cron;
+
+  /**
+   * The cron configuration.
+   *
+   * @var \Drupal\Core\Config\Config
+   */
+  protected $config;
+
+  /**
+  * The state key value store.
+  *
+  * Drupal\Core\State\StateInterface;
+  */
+  protected $state;
+
+  /**
+   * Construct a new automatic cron runner.
+   *
+   * @param \Drupal\Core\CronInterface $cron
+   *   The cron service.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The config factory.
+   */
+  public function __construct(CronInterface $cron, ConfigFactoryInterface $config_factory, StateInterface $state) {
+    $this->cron = $cron;
+    $this->config = $config_factory->get('system.cron');
+    $this->state = $state;
+  }
+
+  /**
+   * Run the automated cron if enabled.
+   *
+   * @param \Symfony\Component\HttpKernel\Event\PostResponseEvent $event
+   *   The Event to process.
+   */
+  public function onTerminate(PostResponseEvent $event) {
+    $threshold = $this->config->get('threshold.autorun');
+    if ($threshold > 0) {
+      $cron_next = $this->state->get('system.cron_last', 0) + $threshold;
+      if ((int) $event->getRequest()->server->get('REQUEST_TIME') > $cron_next) {
+        $this->cron->run();
+      }
+    }
+  }
+
+  /**
+   * Registers the methods in this class that should be listeners.
+   *
+   * @return array
+   *   An array of event listener definitions.
+   */
+  public static function getSubscribedEvents() {
+    $events[KernelEvents::TERMINATE][] = array('onTerminate', 100);
+
+    return $events;
+  }
+
+}
diff --git a/core/modules/system/src/EventSubscriber/AutomaticCron.php b/core/modules/system/src/EventSubscriber/AutomaticCron.php
deleted file mode 100644
index 3b630df..0000000
--- a/core/modules/system/src/EventSubscriber/AutomaticCron.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\system\EventSubscriber\AutomaticCron.
- */
-
-namespace Drupal\system\EventSubscriber;
-
-use Drupal\Core\Config\ConfigFactoryInterface;
-use Drupal\Core\CronInterface;
-use Drupal\Core\State\StateInterface;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-use Symfony\Component\HttpKernel\Event\PostResponseEvent;
-use Symfony\Component\HttpKernel\KernelEvents;
-
-/**
- * A subscriber running cron when a request terminates.
- */
-class AutomaticCron implements EventSubscriberInterface {
-
-  /**
-   * The cron service.
-   *
-   * @var \Drupal\Core\CronInterface
-   */
-  protected $cron;
-
-  /**
-   * The cron configuration.
-   *
-   * @var \Drupal\Core\Config\Config
-   */
-  protected $config;
-
-  /**
-   * The state key value store.
-   *
-   * Drupal\Core\State\StateInterface;
-   */
-  protected $state;
-
-  /**
-   * Construct a new automatic cron runner.
-   *
-   * @param \Drupal\Core\CronInterface $cron
-   *   The cron service.
-   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
-   *   The config factory.
-   * @param \Drupal\Core\State\StateInterface $state
-   *   The state key value store.
-   */
-  public function __construct(CronInterface $cron, ConfigFactoryInterface $config_factory, StateInterface $state) {
-    $this->cron = $cron;
-    $this->config = $config_factory->get('system.cron');
-    $this->state = $state;
-  }
-
-  /**
-   * Run the automated cron if enabled.
-   *
-   * @param Symfony\Component\HttpKernel\Event\PostResponseEvent $event
-   *   The Event to process.
-   */
-  public function onTerminate(PostResponseEvent $event) {
-    // If the site is not fully installed, suppress the automated cron run.
-    // Otherwise it could be triggered prematurely by Ajax requests during
-    // installation.
-    if ($this->state->get('install_task') == 'done') {
-      $threshold = $this->config->get('threshold.autorun');
-      if ($threshold > 0) {
-        $cron_next = $this->state->get('system.cron_last', 0) + $threshold;
-        if (REQUEST_TIME > $cron_next) {
-          $this->cron->run();
-        }
-      }
-    }
-  }
-
-  /**
-   * Registers the methods in this class that should be listeners.
-   *
-   * @return array
-   *   An array of event listener definitions.
-   */
-  public static function getSubscribedEvents() {
-    $events[KernelEvents::TERMINATE][] = array('onTerminate', 100);
-
-    return $events;
-  }
-
-}
diff --git a/core/modules/system/src/Form/CronForm.php b/core/modules/system/src/Form/CronForm.php
index c57ceae..b76ebc5 100644
--- a/core/modules/system/src/Form/CronForm.php
+++ b/core/modules/system/src/Form/CronForm.php
@@ -110,32 +110,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#markup' => '<p>' . t('To run cron from outside the site, go to <a href="!cron">!cron</a>', array('!cron' => $this->url('system.cron', array('key' => $this->state->get('system.cron_key')), array('absolute' => TRUE)))) . '</p>',
     );
 
-    $form['cron'] = array(
-      '#title' => t('Cron settings'),
-      '#type' => 'details',
-      '#open' => TRUE,
-    );
-    $options = array(3600, 10800, 21600, 43200, 86400, 604800);
-    $form['cron']['cron_safe_threshold'] = array(
-      '#type' => 'select',
-      '#title' => t('Run cron every'),
-      '#description' => t('More information about setting up scheduled tasks can be found by <a href="@url">reading the cron tutorial on drupal.org</a>.', array('@url' => 'https://www.drupal.org/cron')),
-      '#default_value' => $config->get('threshold.autorun'),
-      '#options' => array(0 => t('Never')) + array_map(array($this->dateFormatter, 'formatInterval'), array_combine($options, $options)),
-    );
-
-    return parent::buildForm($form, $form_state);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, FormStateInterface $form_state) {
-    $this->config('system.cron')
-      ->set('threshold.autorun', $form_state->getValue('cron_safe_threshold'))
-      ->save();
-
-    parent::submitForm($form, $form_state);
+    return $form;
   }
 
   /**
diff --git a/core/modules/system/src/Tests/System/CronRunTest.php b/core/modules/system/src/Tests/System/CronRunTest.php
index 063d9ab..f1fa372 100644
--- a/core/modules/system/src/Tests/System/CronRunTest.php
+++ b/core/modules/system/src/Tests/System/CronRunTest.php
@@ -21,7 +21,7 @@ class CronRunTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('common_test', 'common_test_cron_helper');
+  public static $modules = array('common_test', 'common_test_cron_helper', 'automated_cron');
 
   /**
    * Test cron runs.
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 042c8f2..d21341d 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -1203,3 +1203,10 @@ function system_update_8001(&$sandbox = NULL) {
   }
 }
 
+/**
+ * Enable automatic cron module.
+ */
+function system_update_8002() {
+  $module_list = ['automated_cron'];
+  \Drupal::service('module_installer')->install($module_list, FALSE);
+}
diff --git a/core/modules/system/system.services.yml b/core/modules/system/system.services.yml
index 29ea018..0f816d6 100644
--- a/core/modules/system/system.services.yml
+++ b/core/modules/system/system.services.yml
@@ -37,11 +37,6 @@ services:
     class: Drupal\system\SystemConfigSubscriber
     tags:
       - { name: event_subscriber }
-  system.automatic_cron:
-    class: Drupal\system\EventSubscriber\AutomaticCron
-    arguments: ['@cron', '@config.factory', '@state']
-    tags:
-      - { name: event_subscriber }
   system.config_cache_tag:
     class: Drupal\system\EventSubscriber\ConfigCacheTag
     arguments: ['@theme_handler', '@cache_tags.invalidator']
diff --git a/core/profiles/standard/standard.info.yml b/core/profiles/standard/standard.info.yml
index a356ae8..bb43704 100644
--- a/core/profiles/standard/standard.info.yml
+++ b/core/profiles/standard/standard.info.yml
@@ -37,6 +37,7 @@ dependencies:
   - views
   - views_ui
   - tour
+  - automated_cron
 themes:
   - bartik
   - seven
