diff --git a/core/modules/node/lib/Drupal/node/NodeTranslationController.php b/core/modules/node/lib/Drupal/node/NodeTranslationController.php
index b5e7ca2..a9e6b7c 100644
--- a/core/modules/node/lib/Drupal/node/NodeTranslationController.php
+++ b/core/modules/node/lib/Drupal/node/NodeTranslationController.php
@@ -59,8 +59,9 @@ protected function entityFormTitle(EntityInterface $entity) {
    */
   public function entityFormEntityBuild($entity_type, EntityInterface $entity, array $form, array &$form_state) {
     if (isset($form_state['values']['translation_entity'])) {
+      $form_controller = translation_entity_form_controller($form_state);
       $translation = &$form_state['values']['translation_entity'];
-      $translation['status'] = $form_state['values']['status'];
+      $translation['status'] = $form_controller->getEntity($form_state)->status;
       $translation['name'] = $form_state['values']['name'];
       $translation['created'] = $form_state['values']['date'];
     }
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php b/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php
index d206500..3c09a44 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php
@@ -60,23 +60,49 @@ function getTranslatorPermissions() {
   }
 
   /**
+   * Overrides \Drupal\translation_entity\Tests\EntityTranslationUITest::getNewEntityValues().
+   */
+  protected function getNewEntityValues($langcode) {
+    // Node title is not translatable yet, hence we use a fixed value.
+    return array('title' => $this->title) + parent::getNewEntityValues($langcode);
+  }
+
+  /**
+   * Overrides \Drupal\translation_entity\Tests\EntityTranslationUITest::getFormSubmitAction().
+   */
+  protected function getFormSubmitAction() {
+    return t('Save and keep unpublished');
+  }
+
+  /**
    * Overrides \Drupal\translation_entity\Tests\EntityTranslationUITest::assertPublishedStatus().
    */
   protected function assertPublishedStatus() {
     $entity = entity_load($this->entityType, $this->entityId, TRUE);
     $path = $this->controller->getEditPath($entity);
+    $languages = language_list();
 
-    // Unpublish the node and check that the translations are unpublished
-    // accordingly.
-    foreach ($this->langcodes as $index => $langcode) {
-      $prefix = $index > 0 ? $langcode . '/' : '';
-      $edit = array('status' => FALSE);
-      $this->drupalPost($prefix . $path, $edit, t('Save'));
-    }
+    $actions = array(
+      array(t('Save and publish'), t('Save and keep published')),
+      array(t('Save and unpublish'), t('Save and keep unpublished')),
+    );
 
-    $entity = entity_load($this->entityType, $this->entityId, TRUE);
-    foreach ($this->langcodes as $index => $langcode) {
-      $this->assertFalse($entity->translation[$langcode]['status'], 'The translation has been correctly unpublished.');
+    foreach ($actions as $index => $status_actions) {
+      // (Un)publish the node trnslations 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->drupalPost($path, array(), $action, array('language' => $languages[$langcode]));
+      }
+      $entity = entity_load($this->entityType, $this->entityId, TRUE);
+      foreach ($this->langcodes as $langcode) {
+        // The node is created as unpulished thus we switch to the published
+        // status first.
+        $status = !$index;
+        $this->assertEqual($status, $entity->translation[$langcode]['status'], 'The translation has been correctly unpublished.');
+      }
     }
   }
 
@@ -86,6 +112,7 @@ protected function assertPublishedStatus() {
   protected function assertAuthoringInfo() {
     $entity = entity_load($this->entityType, $this->entityId, TRUE);
     $path = $this->controller->getEditPath($entity);
+    $languages = language_list();
     $values = array();
 
     // Post different authoring information for each translation.
@@ -99,8 +126,7 @@ protected function assertAuthoringInfo() {
         'name' => $user->name,
         'date' => format_date($values[$langcode]['created'], 'custom', 'Y-m-d H:i:s O'),
       );
-      $prefix = $index > 0 ? $langcode . '/' : '';
-      $this->drupalPost($prefix . $path, $edit, t('Save'));
+      $this->drupalPost($path, $edit, $this->getFormSubmitAction(), array('language' => $languages[$langcode]));
     }
 
     $entity = entity_load($this->entityType, $this->entityId, TRUE);
@@ -149,14 +175,6 @@ function testFieldTranslationForm() {
   }
 
   /**
-   * Overrides \Drupal\translation_entity\Tests\EntityTranslationUITest::getNewEntityValues().
-   */
-  protected function getNewEntityValues($langcode) {
-    // Node title is not translatable yet, hence we use a fixed value.
-    return array('title' => $this->title) + parent::getNewEntityValues($langcode);
-  }
-
-  /**
    * Test that no metadata is stored for a disabled bundle.
    */
   public function testDisabledBundle() {
diff --git a/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationUITest.php b/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationUITest.php
index 188f074..493f14f 100644
--- a/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationUITest.php
+++ b/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationUITest.php
@@ -199,7 +199,7 @@ protected function assertBasicTranslation() {
 
     $base_path = $this->controller->getBasePath($entity);
     $path = $langcode . '/' . $base_path . '/translations/add/' . $default_langcode . '/' . $langcode;
-    $this->drupalPost($path, $this->getEditValues($values, $langcode), t('Save'));
+    $this->drupalPost($path, $this->getEditValues($values, $langcode), $this->getFormSubmitAction());
     if ($this->testLanguageSelector) {
       $this->assertNoFieldByXPath('//select[@id="edit-langcode"]', NULL, 'Language selector correclty disabled on translations.');
     }
@@ -216,7 +216,7 @@ protected function assertBasicTranslation() {
     // Add another translation.
     $values[$langcode] = $this->getNewEntityValues($langcode);
     $edit = $this->getEditValues($values, $langcode);
-    $this->drupalPost($path, $edit, t('Save'));
+    $this->drupalPost($path, $edit, $this->getFormSubmitAction());
     $entity = entity_load($this->entityType, $this->entityId, TRUE);
 
     // Check that the entered values have been correctly stored.
@@ -241,7 +241,7 @@ protected function assertOutdatedStatus() {
 
     // Mark translations as outdated.
     $edit = array('translation_entity[retranslate]' => TRUE);
-    $this->drupalPost($langcode . '/' . $this->controller->getEditPath($entity), $edit, t('Save'));
+    $this->drupalPost($langcode . '/' . $this->controller->getEditPath($entity), $edit, $this->getFormSubmitAction());
     $entity = entity_load($this->entityType, $this->entityId, TRUE);
 
     // Check that every translation has the correct "outdated" status.
@@ -255,7 +255,7 @@ protected function assertOutdatedStatus() {
       else {
         $this->assertFieldByXPath('//input[@name="translation_entity[outdated]"]', TRUE, 'The translate flag is checked by default.');
         $edit = array('translation_entity[outdated]' => FALSE);
-        $this->drupalPost($path, $edit, t('Save'));
+        $this->drupalPost($path, $edit, $this->getFormSubmitAction());
         $this->drupalGet($path);
         $this->assertFieldByXPath('//input[@name="translation_entity[retranslate]"]', FALSE, 'The retranslate flag is now shown.');
         $entity = entity_load($this->entityType, $this->entityId, TRUE);
@@ -275,7 +275,7 @@ protected function assertPublishedStatus() {
     foreach ($this->langcodes as $index => $langcode) {
       if ($index > 0) {
         $edit = array('translation_entity[status]' => FALSE);
-        $this->drupalPost($langcode . '/' . $path, $edit, t('Save'));
+        $this->drupalPost($langcode . '/' . $path, $edit, $this->getFormSubmitAction());
         $entity = entity_load($this->entityType, $this->entityId, TRUE);
         $this->assertFalse($entity->translation[$langcode]['status'], 'The translation has been correctly unpublished.');
       }
@@ -306,7 +306,7 @@ protected function assertAuthoringInfo() {
         'translation_entity[created]' => format_date($values[$langcode]['created'], 'custom', 'Y-m-d H:i:s O'),
       );
       $prefix = $index > 0 ? $langcode . '/' : '';
-      $this->drupalPost($prefix . $path, $edit, t('Save'));
+      $this->drupalPost($prefix . $path, $edit, $this->getFormSubmitAction());
     }
 
     $entity = entity_load($this->entityType, $this->entityId, TRUE);
@@ -322,7 +322,7 @@ protected function assertAuthoringInfo() {
       'translation_entity[name]' => $this->randomName(12),
       'translation_entity[created]' => $this->randomName(),
     );
-    $this->drupalPost($path, $edit, t('Save'));
+    $this->drupalPost($path, $edit, $this->getFormSubmitAction());
     $this->assertTrue($this->xpath('//div[@id="messages"]//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.');
@@ -401,6 +401,13 @@ protected function getEditValues($values, $langcode, $new = FALSE) {
   }
 
   /**
+   * Returns the form action value to be used to submit the entity form.
+   */
+  protected function getFormSubmitAction() {
+    return t('Save');
+  }
+
+  /**
    * Returns the translation object to use to retrieve the translated values.
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
