diff --git a/core/modules/node/lib/Drupal/node/NodeFormController.php b/core/modules/node/lib/Drupal/node/NodeFormController.php
index 6b97015..87200ce 100644
--- a/core/modules/node/lib/Drupal/node/NodeFormController.php
+++ b/core/modules/node/lib/Drupal/node/NodeFormController.php
@@ -253,7 +253,7 @@ protected function actions(array $form, array &$form_state) {
     $preview_mode = variable_get('node_preview_' . $node->type, DRUPAL_OPTIONAL);
 
     $element['preview'] = array(
-      '#access' => $preview_mode != DRUPAL_DISABLED,
+      '#access' => $preview_mode != DRUPAL_DISABLED && (node_access('create', $node) || node_access('update', $node)),
       '#value' => t('Preview'),
       '#validate' => array(
         array($this, 'validate'),
@@ -345,8 +345,10 @@ public function submit(array $form, array &$form_state) {
    *   A reference to a keyed array containing the current state of the form.
    */
   public function preview(array $form, array &$form_state) {
-    drupal_set_title(t('Preview'), PASS_THROUGH);
+    // @todo Remove this: we should not have explicit includes in autoloaded
+    //   classes.
     module_load_include('inc', 'node', 'node.pages');
+    drupal_set_title(t('Preview'), PASS_THROUGH);
     $form_state['node_preview'] = node_preview($this->getEntity($form_state));
     $form_state['rebuild'] = TRUE;
   }
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php b/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php
index 004a2d1..b13b625 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php
@@ -77,7 +77,7 @@ function testTranslateLinkContentAdminPage() {
    * Tests field translation form.
    */
   function testFieldTranslationForm() {
-    $admin_user = $this->drupalCreateUser(array('translate any entity', 'access administration pages', 'bypass node access'));
+    $admin_user = $this->drupalCreateUser(array_merge($this->getTranslatorPermissions(), array('access administration pages', 'bypass node access')));
     $this->drupalLogin($admin_user);
 
     $article = $this->drupalCreateNode(array('type' => 'article', 'langcode' => 'en'));
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTranslationUITest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTranslationUITest.php
index f36ac05..ed9fda9 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTranslationUITest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTranslationUITest.php
@@ -70,7 +70,7 @@ protected function setupBundle() {
    * Overrides \Drupal\translation_entity\Tests\EntityTranslationUITest::getTranslatorPermission().
    */
   function getTranslatorPermissions() {
-    $vocabulary = taxonomy_vocabulary_machine_name_load($this->bundle);
+    $vocabulary = taxonomy_vocabulary_load($this->bundle);
     return array_merge(parent::getTranslatorPermissions(), array('administer taxonomy', 'translate terms in ' . $vocabulary->id()));
   }
 
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index f154d1f..8c5f605 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -101,7 +101,7 @@ function taxonomy_permission() {
          'title' => t('Delete terms from %vocabulary', array('%vocabulary' => $vocabulary->name)),
       ),
     );
-    if (module_exists('translation_entity') && translation_entity_enabled('taxonomy_term', $vocabulary->machine_name)) {
+    if (module_exists('translation_entity') && translation_entity_enabled('taxonomy_term', $vocabulary->name)) {
       $permissions += array(
          'translate terms in ' . $vocabulary->vid => array(
            'title' => t('Translate terms from %vocabulary', array('%vocabulary' => $vocabulary->name)),
