diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module
index b6f8f5e..c9a6af2 100644
--- a/core/modules/content_translation/content_translation.module
+++ b/core/modules/content_translation/content_translation.module
@@ -568,15 +568,27 @@ function content_translation_form_alter(array &$form, array &$form_state) {
     //   elements once we have an official #multilingual FAPI key.
     $translations = $entity->getTranslationLanguages();
     $form_langcode = $form_controller->getFormLangcode($form_state);
+    $status_translatable = NULL;
 
     // Handle fields shared between translations when there is at least one
     // translation available or a new one is being created.
     if (!$entity->isNew() && (!isset($translations[$form_langcode]) || count($translations) > 1)) {
       foreach ($entity->getFieldDefinitions() as $property_name => $definition) {
+        if ($property_name == 'status') {
+          // @todo we sure to have a better way through entity keys somehow?
+          $status_translatable = $definition->isTranslatable();
+        }
         if (isset($form[$property_name])) {
           $form[$property_name]['#multilingual'] = $definition->isTranslatable();
         }
       }
+      if (isset($status_translatable)) {
+        foreach(array('publish', 'unpublish', 'submit') as $button) {
+          if (isset($form['actions'][$button])) {
+            $form['actions'][$button]['#value'] .= ' ' . ($status_translatable ? t('(this translation)') : t('(all translations)'));
+          }
+        }
+      }
     }
 
   }
diff --git a/core/modules/content_translation/lib/Drupal/content_translation/ContentTranslationController.php b/core/modules/content_translation/lib/Drupal/content_translation/ContentTranslationController.php
index 4fc6c1e..ce4b4cc 100644
--- a/core/modules/content_translation/lib/Drupal/content_translation/ContentTranslationController.php
+++ b/core/modules/content_translation/lib/Drupal/content_translation/ContentTranslationController.php
@@ -289,7 +289,7 @@ public function entityFormSharedElements($element, $form_state, $form) {
     // @todo Find a more reliable way to determine if a form element concerns a
     //   multilingual value.
     if (!isset($ignored_types)) {
-      $ignored_types = array_flip(array('actions', 'value', 'hidden', 'vertical_tabs', 'token'));
+      $ignored_types = array_flip(array('actions', 'value', 'hidden', 'vertical_tabs', 'token', 'details'));
     }
 
     foreach (element_children($element) as $key) {
diff --git a/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationUITest.php b/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationUITest.php
index 0816fce..e1966b7 100644
--- a/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationUITest.php
+++ b/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationUITest.php
@@ -69,7 +69,7 @@ protected function doTestBasicTranslation() {
 
     $content_translation_path = $entity->getSystemPath('drupal:content-translation-overview');
     $path = $langcode . '/' . $content_translation_path . '/add/' . $default_langcode . '/' . $langcode;
-    $this->drupalPostForm($path, $this->getEditValues($values, $langcode), $this->getFormSubmitAction($entity));
+    $this->drupalPostForm($path, $this->getEditValues($values, $langcode), $this->getFormSubmitAction($entity, $default_langcode));
     if ($this->testLanguageSelector) {
       $this->assertNoFieldByXPath('//select[@id="edit-langcode"]', NULL, 'Language selector correclty disabled on translations.');
     }
@@ -86,7 +86,7 @@ protected function doTestBasicTranslation() {
     // Add another translation and mark the other ones as outdated.
     $values[$langcode] = $this->getNewEntityValues($langcode);
     $edit = $this->getEditValues($values, $langcode) + array('content_translation[retranslate]' => TRUE);
-    $this->drupalPostForm($path, $edit, $this->getFormSubmitAction($entity));
+    $this->drupalPostForm($path, $edit, $this->getFormSubmitAction($entity, $default_langcode));
     $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
 
     // Check that the entered values have been correctly stored.
@@ -126,7 +126,7 @@ protected function doTestOutdatedStatus() {
     // Mark translations as outdated.
     $edit = array('content_translation[retranslate]' => TRUE);
     $edit_path = $entity->getSystemPath('edit-form');
-    $this->drupalPostForm($langcode . '/' . $edit_path, $edit, $this->getFormSubmitAction($entity));
+    $this->drupalPostForm($langcode . '/' . $edit_path, $edit, $this->getFormSubmitAction($entity, $langcode));
     $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
 
     // Check that every translation has the correct "outdated" status.
@@ -140,7 +140,7 @@ protected function doTestOutdatedStatus() {
       else {
         $this->assertFieldByXPath('//input[@name="content_translation[outdated]"]', TRUE, 'The translate flag is checked by default.');
         $edit = array('content_translation[outdated]' => FALSE);
-        $this->drupalPostForm($path, $edit, $this->getFormSubmitAction($entity));
+        $this->drupalPostForm($path, $edit, $this->getFormSubmitAction($entity, $enabled_langcode));
         $this->drupalGet($path);
         $this->assertFieldByXPath('//input[@name="content_translation[retranslate]"]', FALSE, 'The retranslate flag is now shown.');
         $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
@@ -160,7 +160,7 @@ protected function doTestPublishedStatus() {
     foreach ($this->langcodes as $index => $langcode) {
       if ($index > 0) {
         $edit = array('content_translation[status]' => FALSE);
-        $this->drupalPostForm($langcode . '/' . $path, $edit, $this->getFormSubmitAction($entity));
+        $this->drupalPostForm($langcode . '/' . $path, $edit, $this->getFormSubmitAction($entity, $langcode));
         $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
         $this->assertFalse($entity->translation[$langcode]['status'], 'The translation has been correctly unpublished.');
       }
@@ -191,7 +191,7 @@ protected function doTestAuthoringInfo() {
         'content_translation[created]' => format_date($values[$langcode]['created'], 'custom', 'Y-m-d H:i:s O'),
       );
       $prefix = $index > 0 ? $langcode . '/' : '';
-      $this->drupalPostForm($prefix . $path, $edit, $this->getFormSubmitAction($entity));
+      $this->drupalPostForm($prefix . $path, $edit, $this->getFormSubmitAction($entity, $langcode));
     }
 
     $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
@@ -207,7 +207,7 @@ protected function doTestAuthoringInfo() {
       'content_translation[name]' => $this->randomName(12),
       'content_translation[created]' => '19/11/1978',
     );
-    $this->drupalPostForm($path, $edit, $this->getFormSubmitAction($entity));
+    $this->drupalPostForm($path, $edit, $this->getFormSubmitAction($entity, $langcode));
     $this->assertTrue($this->xpath('//div[contains(@class, "error")]//ul'), 'Invalid values generate a list of form errors.');
     $this->assertEqual($entity->translation[$langcode]['uid'], $values[$langcode]['uid'], 'Translation author correctly kept.');
     $this->assertEqual($entity->translation[$langcode]['created'], $values[$langcode]['created'], 'Translation date correctly kept.');
@@ -261,7 +261,7 @@ protected function getEditValues($values, $langcode, $new = FALSE) {
    * @return string
    *   Name of the button to hit.
    */
-  protected function getFormSubmitAction(EntityInterface $entity) {
+  protected function getFormSubmitAction(EntityInterface $entity, $langcode = NULL) {
     return t('Save');
   }
 
diff --git a/core/modules/node/lib/Drupal/node/Entity/Node.php b/core/modules/node/lib/Drupal/node/Entity/Node.php
index 1774c75..9ac3b63 100644
--- a/core/modules/node/lib/Drupal/node/Entity/Node.php
+++ b/core/modules/node/lib/Drupal/node/Entity/Node.php
@@ -399,35 +399,41 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setDisplayConfigurable('form', TRUE);
 
     $fields['uid'] = FieldDefinition::create('entity_reference')
-      ->setLabel(t('User ID'))
+      ->setLabel(t('Author'))
       ->setDescription(t('The user ID of the node author.'))
       ->setSettings(array(
         'target_type' => 'user',
         'default_value' => 0,
-      ));
+      ))
+      ->setTranslatable(TRUE);
 
     $fields['status'] = FieldDefinition::create('boolean')
       ->setLabel(t('Publishing status'))
-      ->setDescription(t('A boolean indicating whether the node is published.'));
+      ->setDescription(t('A boolean indicating whether the node is published.'))
+      ->setTranslatable(TRUE);
 
     // @todo Convert to a "created" field in https://drupal.org/node/2145103.
     $fields['created'] = FieldDefinition::create('integer')
       ->setLabel(t('Created'))
-      ->setDescription(t('The time that the node was created.'));
+      ->setDescription(t('The time that the node was created.'))
+      ->setTranslatable(TRUE);
 
     // @todo Convert to a "changed" field in https://drupal.org/node/2145103.
     $fields['changed'] = FieldDefinition::create('integer')
       ->setLabel(t('Changed'))
       ->setDescription(t('The time that the node was last edited.'))
-      ->setPropertyConstraints('value', array('EntityChanged' => array()));
+      ->setPropertyConstraints('value', array('EntityChanged' => array()))
+      ->setTranslatable(TRUE);
 
     $fields['promote'] = FieldDefinition::create('boolean')
-      ->setLabel(t('Promote'))
-      ->setDescription(t('A boolean indicating whether the node should be displayed on the front page.'));
+      ->setLabel(t('Promoted'))
+      ->setDescription(t('A boolean indicating whether the node should be displayed on the front page.'))
+      ->setTranslatable(TRUE);
 
     $fields['sticky'] = FieldDefinition::create('boolean')
       ->setLabel(t('Sticky'))
-      ->setDescription(t('A boolean indicating whether the node should be displayed at the top of lists in which it appears.'));
+      ->setDescription(t('A boolean indicating whether the node should be displayed at the top of lists in which it appears.'))
+      ->setTranslatable(TRUE);
 
     // @todo Convert to a "timestamp" field in https://drupal.org/node/2145103.
     $fields['revision_timestamp'] = FieldDefinition::create('integer')
@@ -443,7 +449,8 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
 
     $fields['log'] = FieldDefinition::create('string')
       ->setLabel(t('Log'))
-      ->setDescription(t('The log entry explaining the changes in this revision.'));
+      ->setDescription(t('The log entry explaining the changes in this revision.'))
+      ->setTranslatable(TRUE);
 
     return $fields;
   }
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php b/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php
index 7ed9f14..bce6dbe 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php
@@ -90,7 +90,7 @@ protected function createEntity($values, $langcode, $bundle_name = NULL) {
       "{$this->fieldName}[0][value]" => $values[$this->fieldName][0]['value'],
       'langcode' => $langcode,
     );
-    $this->drupalPostForm('node/add/article', $edit,t('Save and publish'));
+    $this->drupalPostForm('node/add/article', $edit, t('Save and publish'));
     $this->drupalLogin($this->translator);
     $node = $this->drupalGetNodeByTitle($values['title']);
     return $node->id();
@@ -99,11 +99,18 @@ protected function createEntity($values, $langcode, $bundle_name = NULL) {
   /**
    * Overrides \Drupal\content_translation\Tests\ContentTranslationUITest::getFormSubmitAction().
    */
-  protected function getFormSubmitAction(EntityInterface $entity) {
+  protected function getFormSubmitAction(EntityInterface $entity, $langcode = NULL) {
+    if (isset($langcode)) {
+      return $this->getFormSubmitAction($entity->getTranslation($langcode));
+    }
+    $translatable = ($field = $entity->getFieldDefinition('status')) && $field->isTranslatable();
+
     if ($entity->isPublished()) {
-      return t('Save and unpublish');
+      return $translatable ? t('Save and unpublish (this translation)') : t('Save and unpublish (all translations)');
+    }
+    else {
+      return $translatable ? t('Save and keep unpublished (this translation)') : t('Save and keep unpublished (all translations)');
     }
-    return t('Save and keep unpublished');
   }
 
   /**
@@ -114,26 +121,26 @@ protected function doTestPublishedStatus() {
     $path = $entity->getSystemPath('edit-form');
     $languages = language_list();
 
+    $translatable = ($field = $entity->getFieldDefinition('status')) && $field->isTranslatable();
     $actions = array(
-      array(t('Save and publish'), t('Save and keep published')),
-      array(t('Save and unpublish'), t('Save and keep unpublished')),
+      $translatable ? t('Save and publish (this translation)') : t('Save and publish (all translations)'),
+      $translatable ? t('Save and unpublish (this translation)') : t('Save and unpublish (all translations)'),
     );
 
-    foreach ($actions as $index => $status_actions) {
+    foreach ($actions as $index => $action) {
       // (Un)publish the node translations and check that the translation
       // statuses are (un)published accordingly.
       foreach ($this->langcodes as $langcode) {
-        if (!empty($status_actions)) {
-          $action = array_shift($status_actions);
-        }
         $this->drupalPostForm($path, array(), $action, array('language' => $languages[$langcode]));
       }
       $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
       foreach ($this->langcodes as $langcode) {
-        // The node is created as unpulished thus we switch to the published
+        // The node is created as unpublished thus we switch to the published
         // status first.
         $status = !$index;
         $this->assertEqual($status, $entity->translation[$langcode]['status'], 'The translation has been correctly unpublished.');
+        $translation = $entity->getTranslation($langcode);
+        $this->assertEqual($status, $translation->isPublished(), 'The status of the translation has been correctly saved.');
       }
     }
   }
@@ -147,25 +154,34 @@ protected function doTestAuthoringInfo() {
     $languages = language_list();
     $values = array();
 
-    // Post different authoring information for each translation.
+    // Post different base field information for each translation.
     foreach ($this->langcodes as $langcode) {
       $user = $this->drupalCreateUser();
       $values[$langcode] = array(
         'uid' => $user->id(),
         'created' => REQUEST_TIME - mt_rand(0, 1000),
+        'sticky' => (bool) mt_rand(0, 1),
+        'promote' => (bool) mt_rand(0, 1),
       );
       $edit = array(
         'uid' => $user->getUsername(),
         'created[date]' => format_date($values[$langcode]['created'], 'custom', 'Y-m-d'),
         'created[time]' => format_date($values[$langcode]['created'], 'custom', 'H:i:s'),
+        'sticky' => $values[$langcode]['sticky'],
+        'promote' => $values[$langcode]['promote'],
       );
-      $this->drupalPostForm($path, $edit, $this->getFormSubmitAction($entity), array('language' => $languages[$langcode]));
+      $this->drupalPostForm($path, $edit, $this->getFormSubmitAction($entity, $langcode), array('language' => $languages[$langcode]));
     }
 
     $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
     foreach ($this->langcodes as $langcode) {
       $this->assertEqual($entity->translation[$langcode]['uid'], $values[$langcode]['uid'], 'Translation author correctly stored.');
       $this->assertEqual($entity->translation[$langcode]['created'], $values[$langcode]['created'], 'Translation date correctly stored.');
+      $translation = $entity->getTranslation($langcode);
+      $this->assertEqual($translation->getOwnerId(), $values[$langcode]['uid'], 'Author of translation correctly stored.');
+      $this->assertEqual($translation->getCreatedTime(), $values[$langcode]['created'], 'Date of Translation correctly stored.');
+      $this->assertEqual($translation->isSticky(), $values[$langcode]['sticky'], 'Sticky of Translation correctly stored.');
+      $this->assertEqual($translation->isPromoted(), $values[$langcode]['promote'], 'Promoted of Translation correctly stored.');
     }
   }
 
@@ -237,7 +253,9 @@ function testTranslationRendering() {
     foreach (array_diff($this->langcodes, array($default_langcode)) as $langcode) {
       $values[$langcode] = $this->getNewEntityValues($langcode);
       $translation = $node->addTranslation($langcode, $values[$langcode]);
+      // Publish and promote the translation to frontpage.
       $translation->setPromoted(TRUE);
+      $translation->setPublished(TRUE);
     }
     $node->save();
 
@@ -264,7 +282,7 @@ function testTranslationRendering() {
   }
 
   /**
-   * Tests that the given path dsiplays the correct translation values.
+   * Tests that the given path displays the correct translation values.
    *
    * @param string $path
    *   The path to be tested.
diff --git a/core/modules/search/lib/Drupal/search/Tests/SearchMultilingualEntityTest.php b/core/modules/search/lib/Drupal/search/Tests/SearchMultilingualEntityTest.php
index a68dd63..5ca86e3 100644
--- a/core/modules/search/lib/Drupal/search/Tests/SearchMultilingualEntityTest.php
+++ b/core/modules/search/lib/Drupal/search/Tests/SearchMultilingualEntityTest.php
@@ -129,9 +129,11 @@ function testSearchingMultilingualFieldValues() {
     // This should find two results for the second and third node.
     $plugin->setSearch('English OR Hungarian', array(), array());
     $search_result = $plugin->execute();
+    $this->assertEqual(count($search_result), 2, 'Found two results.');
 
-    $this->assertEqual($search_result[0]['title'], 'Third node this is the Hungarian title', 'The search finds the correct Hungarian title.');
-    $this->assertEqual($search_result[1]['title'], 'Second node this is the English title', 'The search finds the correct English title.');
+    $results = array($search_result[0]['title'], $search_result[1]['title']);
+    $this->assertTrue(in_array('Third node this is the Hungarian title', $results), 'The search finds the correct Hungarian title.');
+    $this->assertTrue(in_array('Second node this is the English title', $results), 'The search finds the correct English title.');
 
     // Now filter for Hungarian results only.
     $plugin->setSearch('English OR Hungarian', array('f' => array('language:hu')), array());
