diff --git a/core/modules/node/node.install b/core/modules/node/node.install
index 1d6a8c8..7b72bd3 100644
--- a/core/modules/node/node.install
+++ b/core/modules/node/node.install
@@ -92,12 +92,12 @@ function node_schema() {
         'unsigned' => TRUE,
         'not null' => TRUE,
       ),
-      'langcode' => array(
-        'description' => 'The {language}.langcode of this version.',
-        'type' => 'varchar',
-        'length' => 12,
+      'revision_uid' => array(
+        'description' => 'The {users}.uid that created this version.',
+        'type' => 'int',
+        'unsigned' => TRUE,
         'not null' => TRUE,
-        'default' => '',
+        'default' => 0,
       ),
       'log' => array(
         'description' => 'The log entry explaining the changes in this version.',
@@ -111,12 +111,12 @@ function node_schema() {
         'not null' => TRUE,
         'default' => 0,
       ),
-      'revision_uid' => array(
-        'description' => 'The {users}.uid that created this version.',
-        'type' => 'int',
-        'unsigned' => TRUE,
+      'langcode' => array(
+        'description' => 'The {language}.langcode of this version.',
+        'type' => 'varchar',
+        'length' => 12,
         'not null' => TRUE,
-        'default' => 0,
+        'default' => '',
       ),
     ),
     'indexes' => array(
@@ -780,12 +780,13 @@ function node_update_8015() {
 function _node_update_8016_schema() {
   $schema = array();
 
+  // Node field storage.
   $schema['node_field_data'] = array(
-    'description' => 'Base table for node properties.',
+    'description' => 'Data table for node base fields.',
     'fields' => array(
       'nid' => array(
         'description' => 'The primary identifier for a node.',
-        'type' => 'serial',
+        'type' => 'int',
         'unsigned' => TRUE,
         'not null' => TRUE,
       ),
@@ -869,11 +870,12 @@ function _node_update_8016_schema() {
     'indexes' => array(
       'node_changed' => array('changed'),
       'node_created' => array('created'),
+      'node_default_langcode' => array('default_langcode'),
+      'node_langcode' => array('langcode'),
       'node_frontpage' => array('promote', 'status', 'sticky', 'created'),
       'node_status_type' => array('status', 'type', 'nid'),
       'node_title_type' => array('title', array('type', 4)),
       'node_type' => array(array('type', 4)),
-      'nid' => array('nid'),
       'vid' => array('vid'),
       'uid' => array('uid'),
     ),
@@ -887,11 +889,11 @@ function _node_update_8016_schema() {
         'columns' => array('uid' => 'uid'),
       ),
     ),
-    'primary key' => array('nid', 'vid', 'langcode'),
+    'primary key' => array('nid', 'langcode'),
   );
 
   $schema['node_field_revision'] = array(
-    'description' => 'Stores information about each saved version of a {node}.',
+    'description' => 'Revision table for node base fields.',
     'fields' => array(
       'nid' => array(
         'description' => 'The {node} this version belongs to.',
@@ -901,7 +903,7 @@ function _node_update_8016_schema() {
       ),
       'vid' => array(
         'description' => 'The primary identifier for this version.',
-        'type' => 'serial',
+        'type' => 'int',
         'unsigned' => TRUE,
         'not null' => TRUE,
       ),
@@ -918,25 +920,6 @@ function _node_update_8016_schema() {
         'not null' => TRUE,
         'default' => 1,
       ),
-      'log' => array(
-        'description' => 'The log entry explaining the changes in this version.',
-        'type' => 'text',
-        'not null' => FALSE,
-        'size' => 'big',
-      ),
-      'revision_timestamp' => array(
-        'description' => 'The Unix timestamp when the version was created.',
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'revision_uid' => array(
-        'description' => 'The {users}.uid that created this version.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
       'title' => array(
         'description' => 'The title of this version, always treated as non-markup plain text.',
         'type' => 'varchar',
@@ -989,34 +972,62 @@ function _node_update_8016_schema() {
       ),
     ),
     'indexes' => array(
-      'nid' => array('nid'),
       'uid' => array('uid'),
-      'revision_uid' => array('revision_uid'),
-      'vid' => array('vid'),
+      'node_default_langcode' => array('default_langcode'),
+      'node_langcode' => array('langcode'),
     ),
     'foreign keys' => array(
       'versioned_node' => array(
         'table' => 'node',
         'columns' => array('nid' => 'nid'),
       ),
-      'version_author' => array(
+      'node_author' => array(
         'table' => 'users',
         'columns' => array('uid' => 'uid'),
       ),
     ),
-    'primary key' => array('nid', 'vid', 'langcode'),
+    'primary key' => array('vid', 'langcode'),
   );
 
   return $schema;
 }
 
 /**
- * Upgrade node schema to the standard entity SQL schema: create new tables.
+ * Upgrade node schema to the standard entity SQL schema: prepare schema.
  */
 function node_update_8016() {
   foreach (_node_update_8016_schema() as $table => $table_schema) {
     db_create_table($table, $table_schema);
   }
+
+  $spec = array(
+    'description' => 'The {language}.langcode of this version.',
+    'type' => 'varchar',
+    'length' => 12,
+    'not null' => TRUE,
+    'default' => '',
+  );
+  $keys_new = array('indexes' => array('node_langcode' => array('langcode')));
+  db_add_field('node_revision', 'langcode', $spec, $keys_new);
+
+  $spec = array(
+    'description' => 'The Unix timestamp when the version was created.',
+    'type' => 'int',
+    'not null' => TRUE,
+    'default' => 0,
+  );
+  db_change_field('node_revision', 'timestamp', 'revision_timestamp', $spec);
+
+  db_drop_index('node_revision', 'uid');
+  $spec = array(
+    'description' => 'The {users}.uid that created this version.',
+    'type' => 'int',
+    'unsigned' => TRUE,
+    'not null' => TRUE,
+    'default' => 0,
+  );
+  db_change_field('node_revision', 'uid', 'revision_uid', $spec);
+  db_add_index('node_revision', 'revision_uid', array('revision_uid'));
 }
 
 /**
@@ -1032,10 +1043,11 @@ function node_update_8017(&$sandbox) {
   // Prepare the new records.
   $queries = array();
   $schema = _node_update_8016_schema();
-  $result = db_query_range('SELECT nr.*, nr.timestamp AS revision_timestamp, nr.uid as revision_uid, 1 AS default_langcode, n.langcode, n.vid = nr.vid AS default_revision, n.uid, n.changed, n.created, n.type FROM {node_revision} nr JOIN {node} n ON nr.nid = n.nid ORDER BY nr.nid ASC, nr.vid ASC', $sandbox['progress'], 50);
+  $result = db_query_range('SELECT nr.*, nr.revision_timestamp, nr.revision_uid, 1 AS default_langcode, n.langcode, n.vid = nr.vid AS default_revision, n.uid, n.changed, n.created, n.type FROM {node_revision} nr JOIN {node} n ON nr.nid = n.nid ORDER BY nr.nid ASC, nr.vid ASC', $sandbox['progress'], 50);
 
   foreach ($result as $row) {
     $sandbox['progress']++;
+
     foreach ($schema as $table => $table_schema) {
       // We need to store the data table record only when dealing with the
       // default revision.
@@ -1053,6 +1065,11 @@ function node_update_8017(&$sandbox) {
         $queries[$table]->values($record);
       }
     }
+
+    // Populate the langcode column with the same value for each revision as we
+    // have no other data available.
+    $args = array('langcode' => $row->langcode, 'vid' => $row->vid);
+    db_query('UPDATE {node_revision} SET langcode = :langcode WHERE vid = :vid', $args);
   }
 
   // Store the new records.
@@ -1071,10 +1088,14 @@ function node_update_8018() {
   foreach ($indexes as $index) {
     db_drop_index('node', $index);
   }
-  $fields = array('title', 'uid', 'status', 'created', 'changed', 'comment', 'promote', 'sticky');
+  $fields = array('title', 'uid', 'status', 'created', 'changed', 'comment', 'promote', 'sticky', 'langcode');
   foreach ($fields as $field) {
     db_drop_field('node', $field);
   }
+  $fields = array('title', 'status', 'comment', 'promote', 'sticky');
+  foreach ($fields as $field) {
+    db_drop_field('node_revision', $field);
+  }
 }
 
 /**
