diff --git a/entity_translation.install b/entity_translation.install
index ffff0b8..da7be90 100644
--- a/entity_translation.install
+++ b/entity_translation.install
@@ -93,6 +93,86 @@ function entity_translation_install() {
 
   // Make translation use the content language type.
   variable_set('translation_language_type', LANGUAGE_TYPE_CONTENT);
+
+  // Grant the 'edit original values' permission, so we don't break editing on existing sites.
+  $msg = _entity_translation_grant_original_values_permissions();
+  drupal_set_message($msg);
+}
+
+/**
+ * Grant 'edit $type original values' permission to roles which have respective entity
+ * editing permissions.
+ */
+function _entity_translation_grant_original_values_permissions() {
+  $permissions = array();
+
+  // Nodes
+  $permissions['node'][] = 'administer nodes';
+  foreach (node_permissions_get_configured_types() as $type) {
+    $permissions['node'][] = "create $type content";
+    $permissions['node'][] = "edit own $type content";
+    $permissions['node'][] = "edit any $type content";
+  }
+
+  // Users: permission 'edit original user values' needs to be granted to all
+  // registered users to allow edit access to a user's profile page.
+  $permissions['user'] = array();
+
+  // Comments
+  if (module_exists('comment')) {
+    $permissions['comment'][] = 'post comments';
+    $permissions['comment'][] = 'edit own comments';
+  }
+
+  // Taxonomy terms
+  if (module_exists('taxonomy')) {
+    $permissions['taxonomy_term'][] = 'administer taxonomy';
+    foreach (taxonomy_get_vocabularies() as $vocabulary) {
+      $permissions['taxonomy_term'][] = "edit terms in {$vocabulary->vid}";
+    }
+  }
+
+  // Files
+  if (module_exists('file_entity')) {
+    $permissions['file'][] = 'administer files';
+    $permissions['file'][] = 'edit file';
+  }
+
+  $assignments = array();
+  foreach ($permissions as $entity_type => $permissions_filter) {
+    $permission = "edit $entity_type original values";
+    $members_only = empty($perms);
+    $assignments[] = _entity_translation_grant_permission($permission, $members_only, $permissions_filter);
+  }
+  $assignments = '<ul><li>' . implode('</li><li>', $assignments) . '</li></ul>';
+
+  $t = get_t();
+  return $t('The following permissions have been assigned to existing roles: !assignments', array('!assignments' => $assignments));
+}
+
+/**
+ * Grant the given permission to all roles which already have any of the
+ * permissions specified in the $permissions_filter parameter.
+ *
+ * @param $permission
+ *   The new permission which to grant.
+ * @param $membersonly
+ *   Set TRUE in order to ignore anonymous users.
+ * @param $permissions_filter
+ *   List of permissions used for loading roles.
+ * @return
+ *   A message describing permission changes.
+ */
+function _entity_translation_grant_permission($permission, $membersonly = FALSE, $permissions_filter = NULL) {
+  $roles = user_roles($membersonly, $permissions_filter);
+  foreach ($roles as $rid => $role) {
+    user_role_grant_permissions($rid, array($permission));
+  }
+  $t = get_t();
+  return $t('%permission was assigned to %roles', array(
+    '%permission' => $permission,
+    '%roles' => implode(', ', $roles)
+  ));
 }
 
 /**
@@ -167,3 +247,10 @@ function entity_translation_update_7001() {
     ->condition('name', 'entity_translation')
     ->execute();
 }
+
+/**
+ * Grant 'edit original values' permission to roles which have entity editing permissions.
+ */
+function entity_translation_update_7002() {
+  return _entity_translation_grant_original_values_permissions();
+}
diff --git a/entity_translation.module b/entity_translation.module
index 7b9c707..babc5e8 100644
--- a/entity_translation.module
+++ b/entity_translation.module
@@ -512,7 +512,7 @@ function entity_translation_permission() {
     ),
     'edit original values' => array(
       'title' => t('Edit original values'),
-      'description' => t('Access the entity edit form in the original language.'),
+      'description' => t('Access any entity edit form in the original language.'),
     ),
     'translate any entity' => array(
       'title' => t('Translate any entity'),
@@ -527,6 +527,10 @@ function entity_translation_permission() {
         'title' => t('Translate entities of type @type', array('@type' => $label)),
         'description' => t('Translate field content for entities of type @type.', array('@type' => $label)),
       );
+      $permission["edit $entity_type original values"] = array(
+        '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)),
+      );
     }
   }
 
diff --git a/includes/translation.handler.inc b/includes/translation.handler.inc
index a538060..136462a 100644
--- a/includes/translation.handler.inc
+++ b/includes/translation.handler.inc
@@ -662,7 +662,7 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa
    * @see EntityTranslationHandlerInterface::getTranslationAccess()
    */
   public function getTranslationAccess($langcode) {
-    return $langcode != $this->getLanguage() || user_access('edit original values');
+    return $langcode != $this->getLanguage() || user_access('edit original values') || user_access("edit {$this->entityType} original values");
   }
 
   /**
