diff --git a/entity_translation.module b/entity_translation.module
index 64d5b5e..7564012 100644
--- a/entity_translation.module
+++ b/entity_translation.module
@@ -714,14 +714,14 @@ function entity_translation_permission() {
       'title' => t('Toggle field translatability'),
       'description' => t('Toggle translatability of fields performing a bulk update.'),
     ),
-    'edit translation shared fields' => array(
-      'title' => t('Edit shared fields'),
-      'description' => t('Edit fields shared between translations on the translation form.'),
-    ),
     'translate any entity' => array(
       'title' => t('Translate any entity'),
       'description' => t('Translate field content for any fieldable entity.'),
     ),
+    'edit translation shared fields' => array(
+      'title' => t('Edit shared fields'),
+      'description' => t('Edit fields shared between translations on the translation form.'),
+    ),
     'edit original values' => array(
       'title' => t('Edit original values'),
       'description' => t('Access any entity edit form in the original language.'),
@@ -745,6 +745,11 @@ function entity_translation_permission() {
         'title' => t('Edit original values on entities of type @type', array('@type' => $label)),
         'description' => t('Access the edit form in the original language for entities of type @type.', array('@type' => $label)),
       );
+
+      $permission["edit $entity_type translation shared fields"] = array(
+        'title' => t('Edit @type shared fields.', array('@type' => $label)),
+        'description' => t('Edit fields shared between translations on the @type translation form.', array('@type' => $label)),
+      );
     }
   }
 
diff --git a/includes/translation.handler.inc b/includes/translation.handler.inc
index 032332b..4f12fc6 100644
--- a/includes/translation.handler.inc
+++ b/includes/translation.handler.inc
@@ -280,6 +280,7 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa
   protected $entity;
   protected $entityInfo;
   protected $entityId;
+  protected $bundle;
 
   private $entityForm;
   private $translating;
@@ -311,6 +312,7 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa
     $this->entityType = $entity_type;
     $this->entityInfo = $entity_info;
     $this->entityId = $entity_id;
+    list(, , $this->bundle) = entity_extract_ids($entity_type, $entity);
     $this->setEntity($entity);
 
     $this->entityForm = FALSE;
@@ -492,8 +494,7 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa
 
     if (is_array($values)) {
       // Update field translations.
-      list(, , $bundle) = entity_extract_ids($this->entityType, $this->entity);
-      foreach (field_info_instances($this->entityType, $bundle) as $instance) {
+      foreach (field_info_instances($this->entityType, $this->bundle) as $instance) {
         $field_name = $instance['field_name'];
         $field = field_info_field($field_name);
         if ($field['translatable'] && isset($values[$field_name])) {
@@ -524,10 +525,8 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa
       $this->entity->{$translations_key}->data = array();
     }
 
-    list(, , $bundle) = entity_extract_ids($this->entityType, $this->entity);
-
     // Remove field translations.
-    foreach (field_info_instances($this->entityType, $bundle) as $instance) {
+    foreach (field_info_instances($this->entityType, $this->bundle) as $instance) {
       $field_name = $instance['field_name'];
       $field = field_info_field($field_name);
 
@@ -585,9 +584,8 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa
   public function initOriginalTranslation() {
     $fixed = FALSE;
     $translations = $this->getTranslations();
-    list(, , $bundle) = entity_extract_ids($this->entityType, $this->entity);
 
-    foreach (field_info_instances($this->entityType, $bundle) as $instance) {
+    foreach (field_info_instances($this->entityType, $this->bundle) as $instance) {
       $field_name = $instance['field_name'];
       $field = field_info_field($field_name);
       $langcode = count($this->entity->{$field_name}) == 1 ? key($this->entity->{$field_name}) : $translations->original;
@@ -635,8 +633,7 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa
    * @see EntityTranslationHandlerInterface::getDefaultLanguage()
    */
   public function getDefaultLanguage() {
-    list(, , $bundle) = entity_extract_ids($this->entityType, $this->entity);
-    $settings = variable_get('entity_translation_settings_' . $this->entityType . '__' . $bundle, array());
+    $settings = variable_get('entity_translation_settings_' . $this->entityType . '__' . $this->bundle, array());
 
     if (!empty($settings['default_language'])) {
       switch ($settings['default_language']) {
@@ -921,6 +918,7 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa
     $new_translation = !isset($translations->data[$form_langcode]);
     $no_translations = count($translations->data) < 2;
     $languages = language_list();
+    $access = user_access('translate any entity') || user_access("translate $this->entityType entities");
 
     // The only way to determine whether we are editing the original values is
     // comparing form language and entity language. Since a language change
@@ -944,6 +942,7 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa
         '#collapsed' => TRUE,
         '#tree' => TRUE,
         '#weight' => -100,
+        '#access' => $access,
         'language' => array(
           '#type' => 'select',
           '#default_value' => $this->getSourceLanguage(),
@@ -1005,7 +1004,7 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa
         '#collapsed' => TRUE,
         '#tree' => TRUE,
         '#weight' => 10,
-        '#access' => user_access('translate any entity') || user_access("translate $this->entityType entities"),
+        '#access' => $access,
       );
 
       $status = $new_translation || $translations->data[$form_langcode]['status'];
@@ -1084,14 +1083,30 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa
     if (!empty($form['actions']['delete']['#submit'])) {
       $form['actions']['delete']['#submit'][] = 'entity_translation_entity_form_submit';
     }
+
+    // Hide shared fields if the user is not allowed to edit them.
+    $this->entityFormAccess($form, user_access('edit translation shared fields') || user_access("edit $this->entityType translation shared fields"));
+  }
+
+  /**
+   * Assign the given access to the form elements not defining one yet.
+   */
+  protected function entityFormAccess(&$form, $access) {
+    if (!$access) {
+      $allowed_types = array_flip(array('actions', 'container', 'value', 'hidden', 'vertical_tabs'));
+      foreach (element_children($form) as $key) {
+        if (!isset($form[$key]['#access']) && !isset($allowed_types[$form[$key]['#type']])) {
+          $form[$key]['#access'] = $access;
+        }
+      }
+    }
   }
 
   /**
    * @see EntityTranslationHandlerInterface::entityFormLanguageWidget()
    */
   public function entityFormLanguageWidget(&$form, &$form_state) {
-    list(, , $bundle) = entity_extract_ids($this->entityType, $this->entity);
-    $settings = entity_translation_settings($this->entityType, $bundle);
+    $settings = entity_translation_settings($this->entityType, $this->bundle);
     $translations = $this->getTranslations();
     $form_langcode = $this->getFormLanguage();
     $languages = entity_translation_languages($this->entityType, $this->entity);
@@ -1152,9 +1167,8 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa
    */
   function entityFormLanguageWidgetSubmit($form, &$form_state) {
     $form_langcode = $this->getFormLanguage();
-    list(, , $bundle) = entity_extract_ids($this->entityType, $this->entity);
 
-    foreach (field_info_instances($this->entityType, $bundle) as $instance) {
+    foreach (field_info_instances($this->entityType, $this->bundle) as $instance) {
       $field_name = $instance['field_name'];
       $field = field_info_field($field_name);
       $previous_langcode = $form[$field_name]['#language'];
