diff --git a/core/modules/datetime/datetime.module b/core/modules/datetime/datetime.module
index ccf1a0c..750c912 100644
--- a/core/modules/datetime/datetime.module
+++ b/core/modules/datetime/datetime.module
@@ -991,11 +991,11 @@ function datetime_form_node_form_alter(&$form, &$form_state, $form_id) {
   $format_type = datetime_default_format_type();
 
   // Alter the 'Authored on' date to use datetime.
-  $form['author']['date']['#type'] = 'datetime';
+  $form['date']['#type'] = 'datetime';
   $date_format = entity_load('date_format', 'html_date')->getPattern($format_type);
   $time_format = entity_load('date_format', 'html_time')->getPattern($format_type);
-  $form['author']['date']['#description'] = t('Format: %format. Leave blank to use the time of form submission.', array('%format' => datetime_format_example($date_format . ' ' . $time_format)));
-  unset($form['author']['date']['#maxlength']);
+  $form['date']['#description'] = t('Format: %format. Leave blank to use the time of form submission.', array('%format' => datetime_format_example($date_format . ' ' . $time_format)));
+  unset($form['date']['#maxlength']);
 }
 
 /**
diff --git a/core/modules/node/lib/Drupal/node/NodeFormController.php b/core/modules/node/lib/Drupal/node/NodeFormController.php
index 1cc58a7..1333d6d 100644
--- a/core/modules/node/lib/Drupal/node/NodeFormController.php
+++ b/core/modules/node/lib/Drupal/node/NodeFormController.php
@@ -133,14 +133,14 @@ public function form(array $form, array &$form_state) {
       '#access' => $node->isNewRevision() || user_access('administer nodes'),
     );
 
-    $form['revision_information']['revision']['revision'] = array(
+    $form['revision'] = array(
       '#type' => 'checkbox',
       '#title' => t('Create new revision'),
       '#default_value' => $node->isNewRevision(),
       '#access' => user_access('administer nodes'),
     );
 
-    $form['revision_information']['revision']['log'] = array(
+    $form['log'] = array(
       '#type' => 'textarea',
       '#title' => t('Revision log message'),
       '#rows' => 4,
@@ -175,7 +175,7 @@ public function form(array $form, array &$form_state) {
       '#weight' => 90,
     );
 
-    $form['author']['name'] = array(
+    $form['name'] = array(
       '#type' => 'textfield',
       '#title' => t('Authored by'),
       '#maxlength' => 60,
@@ -184,7 +184,7 @@ public function form(array $form, array &$form_state) {
       '#weight' => -1,
       '#description' => t('Leave blank for %anonymous.', array('%anonymous' => $user_config->get('anonymous'))),
     );
-    $form['author']['date'] = array(
+    $form['date'] = array(
       '#type' => 'textfield',
       '#title' => t('Authored on'),
       '#maxlength' => 25,
@@ -208,22 +208,64 @@ public function form(array $form, array &$form_state) {
       '#weight' => 95,
     );
 
-    $form['options']['promote'] = array(
+    $form['promote'] = array(
       '#type' => 'checkbox',
       '#title' => t('Promoted to front page'),
       '#default_value' => $node->isPromoted(),
     );
 
-    $form['options']['sticky'] = array(
+    $form['sticky'] = array(
       '#type' => 'checkbox',
       '#title' => t('Sticky at top of lists'),
       '#default_value' => $node->isSticky(),
     );
 
+    $form['#pre_render'] = array(array($this, 'preRenderStructure'));
+
     return parent::form($form, $form_state, $node);
   }
 
   /**
+   * Pre-render callback to structure the base fields into sections.
+   *
+   * @param $form
+   *   The Node form array structure.
+   */
+  public function preRenderStructure($form) {
+    // Promotion options.
+    if (isset($form['promote'])) {
+      $form['options']['promote'] = $form['promote'];
+      unset($form['promote']);
+    }
+    if (isset($form['sticky'])) {
+      $form['options']['sticky'] = $form['sticky'];
+      unset($form['sticky']);
+    }
+
+    // Authoring information.
+    if (isset($form['name'])) {
+      $form['author']['name'] = $form['name'];
+      unset($form['name']);
+    }
+    if (isset($form['date'])) {
+      $form['author']['date'] = $form['date'];
+      unset($form['date']);
+    }
+
+    // Revision information.
+    if (isset($form['revision'])) {
+      $form['revision_information']['revision']['revision'] = $form['revision'];
+      unset($form['revision']);
+    }
+    if (isset($form['log'])) {
+      $form['revision_information']['revision']['log'] = $form['log'];
+      unset($form['log']);
+    }
+
+    return $form;
+  }
+
+  /**
    * Overrides Drupal\Core\Entity\EntityFormController::actions().
    */
   protected function actions(array $form, array &$form_state) {
