diff --git a/core/modules/layout/layouts/static/node-form/node-form.tpl.php b/core/modules/layout/layouts/static/node-form/node-form.tpl.php
new file mode 100644
index 0000000000000000000000000000000000000000..f070dd5fd4615bba357cf02eedad25abf1f6abe4
--- /dev/null
+++ b/core/modules/layout/layouts/static/node-form/node-form.tpl.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * @file
+ * Form template with 3 main regions.
+ *
+ * Available variables:
+ * - $form: the remainder of the original $form array after preprocessing.
+ *   Should be printed using drupal_render_children($form).
+ * - $regions: array of layout regions
+ *   - $main: Contents for the main region
+ *   - $secondary: Contents for the secondary regions
+ *   - $footer: Form actions
+ */
+?>
+<div class="layout-display layout-node-form clearfix">
+  <div class="layout-region form-region-main">
+    <?php print drupal_render_children($form); ?>
+
+    <?php if ($regions['main']): ?>
+      <?php print render($regions['main']); ?>
+    <?php endif; ?>
+  </div>
+
+  <?php if ($regions['secondary']): ?>
+    <div class="layout-region layout-region-secondary">
+      <?php print render($regions['secondary']); ?>
+    </div>
+  <?php endif; ?>
+
+  <?php if ($regions['footer']): ?>
+    <div class="layout-region layout-region-footer">
+      <?php print render($regions['footer']); ?>
+    </div>
+  <?php endif; ?>
+</div>
diff --git a/core/modules/node/lib/Drupal/node/NodeFormController.php b/core/modules/node/lib/Drupal/node/NodeFormController.php
index 215ad81e4a9df6aaca7f7178a40f495a533edf67..9ccffb27537d7bfcd0835d518735e8018266ec07 100644
--- a/core/modules/node/lib/Drupal/node/NodeFormController.php
+++ b/core/modules/node/lib/Drupal/node/NodeFormController.php
@@ -56,6 +56,10 @@ protected function prepareEntity(EntityInterface $node) {
    */
   public function form(array $form, array &$form_state, EntityInterface $node) {
     $user_config = config('user.settings');
+
+    // Use a custom layout for this form
+    $form['#theme'] = array('node_form');
+
     // Some special stuff when previewing a node.
     if (isset($form_state['node_preview'])) {
       $form['#prefix'] = $form_state['node_preview'];
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 541531228397829854502d442ed2d87b4328703f..39e189262a220e55539aa8f7b854dde9ffe15226 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -179,6 +179,11 @@ function node_theme() {
     'node_recent_content' => array(
       'variables' => array('node' => NULL),
     ),
+    'node_form' => array(
+      'render element' => 'form',
+      'path' => 'core/modules/layout/layouts/static/node-form',
+      'template' => 'node-form',
+    ),
   );
 }
 
@@ -1239,6 +1244,35 @@ function template_preprocess_node(&$variables) {
 }
 
 /**
+ * Processes variables for node-form.tpl.php
+ */
+function template_preprocess_node_form(&$vars) {
+  $form = &$vars['form'];
+
+  // Create regions expected by the layout template.
+  $vars['regions'] = array(
+    'main' => array(),
+    'secondary' => array(),
+    'footer' => array(),
+  );
+
+  // Chunk the form into separate render arrays and place them in regions.
+  // Currently this is rudimentary; array key order within regions determines
+  // render order, and the remaining $form array needs to be printed in the
+  // template using drupal_render_children($form).
+  //
+  // The settings_summary element doesn't exist yet.
+  // $vars['regions']['secondary'][] = $form['settings_summary'];
+  // unset($form['settings_summary']);
+
+  $vars['regions']['secondary'][] = $form['additional_settings'];
+  unset($form['additional_settings']);
+
+  $vars['regions']['footer'] = $form['actions'];
+  unset($form['actions']);
+}
+
+/**
  * Implements hook_permission().
  */
 function node_permission() {
