diff --git a/entity_translation.api.php b/entity_translation.api.php
index 214b86d..d7e4cde 100644
--- a/entity_translation.api.php
+++ b/entity_translation.api.php
@@ -44,14 +44,16 @@
  *   translation UI. Defaults to "$base_path/translate".
  * - path wildcard: The menu router path wildcard identifying the entity.
  *   Defaults to %ENTITY_TYPE.
+ * - admin them: Whether the translation UI should use the administration theme.
+ *   Defaults to TRUE.
  * - path schemes: An array of menu router path schemes used for attaching the
  *   entity translation UI. This element can be used to declare additional path
  *   schemes, if an entity type uses multiple schemes for managing entities
  *   (e.g. different schemes for different bundles). Each path scheme can define
  *   the following elements (descriptions see above): 'base path', 'view path',
- *   'edit path', 'translate path', and 'path wildcard'. All path elements that
- *   are defined on the entity translation info array directly are automatically
- *   added as a 'default' path scheme.
+ *   'edit path', 'translate path', 'path wildcard' and 'admin theme'. All path
+ *   elements that are defined on the entity translation info array directly are
+ *   automatically added as a 'default' path scheme.
  * - theme callback: The callback to be used to determine the translation
  *   theme. Defaults to 'variable_get'.
  * - theme arguments: The arguments to be used to determine the translation
diff --git a/entity_translation.module b/entity_translation.module
index ae346a7..569e7e7 100644
--- a/entity_translation.module
+++ b/entity_translation.module
@@ -58,6 +58,7 @@ function entity_translation_entity_info() {
         'class' => 'EntityTranslationNodeHandler',
         'access callback' => 'entity_translation_node_tab_access',
         'access arguments' => array(1),
+        'admin theme' => variable_get('node_admin_theme'),
       ),
     ),
   );
@@ -67,6 +68,7 @@ function entity_translation_entity_info() {
       'translation' => array(
         'entity_translation' => array(
           'class' => 'EntityTranslationCommentHandler',
+          'admin theme' => FALSE,
         ),
       ),
     );
@@ -117,7 +119,7 @@ function entity_translation_entity_info_alter(&$entity_info) {
 
       // Insert the default path scheme into the 'path schemes' array and remove
       // respective elements from the entity_translation info array.
-      static $path_scheme_keys = array('base path', 'view path', 'edit path', 'translate path', 'path wildcard');
+      static $path_scheme_keys = array('base path', 'view path', 'edit path', 'translate path', 'path wildcard', 'admin theme');
       $default_scheme = array_intersect_key($et_info, array_flip($path_scheme_keys));
       if (!empty($default_scheme)) {
         $et_info['path schemes']['default'] = $default_scheme;
@@ -139,6 +141,7 @@ function entity_translation_entity_info_alter(&$entity_info) {
           $translate_path = $scheme['base path'] . '/translate';
 
           $et_info['path schemes'][$delta] += array(
+            'admin theme' => TRUE,
             'view path' => $view_path,
             'edit path' => $edit_path,
             'translate path' => $translate_path,
@@ -232,38 +235,38 @@ function _entity_translation_validate_path_schemes(&$schemes, $entity_type_label
     }
   }
 
-  if (empty($schemes)) return;
+  if (empty($schemes)) {
+    return;
+  }
 
   // Make sure we have a set of paths to validate the scheme against.
   if (empty($paths)) {
     // This should never happen.
-    throw new Exception('The ET path scheme validation function has not been initialized properly.');
+    throw new Exception('The Entity Translation path scheme validation function has not been initialized properly.');
   }
 
   foreach ($schemes as $delta => $scheme) {
     // Every path scheme needs to declare a path wildcard for the entity id.
     if (empty($scheme['path wildcard'])) {
-      drupal_set_message(t('ET path scheme %scheme for entities of type %entity_type does not declare a path wildcard.', array(
-        '%scheme' => $delta,
-        '%entity_type' => $entity_type_label,
-      )));
+      $t_args = array('%scheme' => $delta, '%entity_type' => $entity_type_label);
+      drupal_set_message(t('Entity Translation path scheme %scheme for entities of type %entity_type does not declare a path wildcard.', $t_args));
       unset($schemes[$delta]);
       continue;
     }
-    $wildcard = $scheme['path wildcard'];
 
+    $wildcard = $scheme['path wildcard'];
     $validate_keys = array('base path' => FALSE, 'view path' => FALSE, 'edit path' => FALSE, 'translate path' => TRUE);
+
     foreach ($validate_keys as $key => $check_parent) {
       if (isset($scheme[$key])) {
         $path = $scheme[$key];
         $parts = explode('/', $path);
         $schemes[$delta][$key . ' parts'] = $parts;
 
-        // Check that that the path contains the path wildcard.
+        // Check that the path contains the path wildcard.
         if (!in_array($wildcard, $parts)) {
-          drupal_set_message(t('Invalid %path_key defined for entities of type %entity_type: entity wildcard %wildcard not found in %path.', array(
-            '%path_key' => $key, '%entity_type' => $entity_type_label, '%wildcard' => $wildcard, '%path' => $path,
-          )), 'warning');
+          $t_args = array('%path_key' => $key, '%entity_type' => $entity_type_label, '%wildcard' => $wildcard, '%path' => $path);
+          drupal_set_message(t('Invalid %path_key defined for entities of type %entity_type: entity wildcard %wildcard not found in %path.', $t_args), 'warning');
         }
 
         // Check that the current element has a parent path which matches an
@@ -271,17 +274,15 @@ function _entity_translation_validate_path_schemes(&$schemes, $entity_type_label
         if ($check_parent) {
           $parent_path = implode('/', array_slice($parts, 0, -1));
           if (!isset($paths[preg_replace($regex, '%', $parent_path)])) {
-            drupal_set_message(t('Invalid %path_key defined for entities of type %entity_type: parent menu item not found for %path', array(
-              '%path_key' => $key, '%entity_type' => $entity_type_label, '%path' => $path,
-            )),'warning');
-            unset($schemes[$delta]['translate path']);
+            $t_args = array('%path_key' => $key, '%entity_type' => $entity_type_label, '%path' => $path);
+            drupal_set_message(t('Invalid %path_key defined for entities of type %entity_type: parent menu item not found for %path', $t_args),'warning');
+            unset($schemes[$delta][$key]);
           }
         }
         // Check that the current element matches an existing menu path.
-        else if (!isset($paths[preg_replace($regex, '%', $path)])) {
-          drupal_set_message(t('Invalid %path_key defined for entities of type %entity_type: matching menu item not found for %path', array(
-            '%path_key' => $key, '%entity_type' => $entity_type_label, '%path' => $path,
-          )), 'warning');
+        elseif (!isset($paths[preg_replace($regex, '%', $path)])) {
+          $t_args = array('%path_key' => $key, '%entity_type' => $entity_type_label, '%path' => $path);
+          drupal_set_message(t('Invalid %path_key defined for entities of type %entity_type: matching menu item not found for %path', $t_args), 'warning');
           unset($schemes[$delta][$key]);
         }
       }
@@ -398,9 +399,9 @@ function entity_translation_menu_alter(&$items) {
             'access callback' => 'entity_translation_edit_access',
             'access arguments' => array_merge($args, $original_item['access arguments']),
           )
-          // We need to inherit the remaining menu item keys, mostly 'module' and
-          // 'file' to keep ajax callbacks working (see drupal_retrieve_form() and
-          // form_get_cache()).
+          // We need to inherit the remaining menu item keys, mostly 'module'
+          // and 'file' to keep ajax callbacks working (see form_get_cache() and
+          // drupal_retrieve_form()).
           + $original_item;
 
           // Add translation callback.
@@ -438,6 +439,9 @@ function entity_translation_menu_alter(&$items) {
     }
   }
 
+  // Avoid bloating memory with unused data.
+  drupal_static_reset('_entity_translation_validate_path_schemes');
+
   // Node-specific menu alterations.
   entity_translation_node_menu_alter($items, $backup);
 }
@@ -599,22 +603,18 @@ function _entity_translation_callback($callback, $args, $info = array()) {
 function entity_translation_admin_paths() {
   $paths = array();
   foreach (entity_get_info() as $entity_type => $info) {
-    // Only mark node related paths as admin paths, if the user has
-    // configured Drupal to use the administration theme when editing or
-    // creating content.
-    if ($entity_type == 'node' && !variable_get('node_admin_theme')) {
-      continue;
-    }
     if (entity_translation_enabled($entity_type, TRUE)) {
       foreach ($info['translation']['entity_translation']['path schemes'] as $scheme) {
-        if (isset($scheme['translate path'])) {
-          $translate_path = preg_replace('|%[^/]*|', '*', $scheme['translate path']);
-          $paths[$translate_path] = TRUE;
-          $paths["$translate_path/*"] = TRUE;
-        }
-        if (isset($scheme['edit path'])) {
-          $edit_path = preg_replace('|%[^/]*|', '*', $scheme['edit path']);
-          $paths["$edit_path/*"] = TRUE;
+        if (!empty($scheme['admin theme'])) {
+          if (isset($scheme['translate path'])) {
+            $translate_path = preg_replace('|%[^/]*|', '*', $scheme['translate path']);
+            $paths[$translate_path] = TRUE;
+            $paths["$translate_path/*"] = TRUE;
+          }
+          if (isset($scheme['edit path'])) {
+            $edit_path = preg_replace('|%[^/]*|', '*', $scheme['edit path']);
+            $paths["$edit_path/*"] = TRUE;
+          }
         }
       }
     }
diff --git a/includes/translation.handler.inc b/includes/translation.handler.inc
index f1a6c7b..404efbf 100644
--- a/includes/translation.handler.inc
+++ b/includes/translation.handler.inc
@@ -154,7 +154,7 @@ interface EntityTranslationHandlerInterface {
    * @param $scheme
    *   The new path scheme.
    */
-  public function switchPathScheme($scheme);
+  public function setPathScheme($scheme);
 
   /**
    * A string allowing the user to identify the entity.
@@ -643,7 +643,7 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa
    * @see EntityTranslationHandlerInterface::getEditPath()
    */
   public function getEditPath($langcode = NULL) {
-    return empty($this->editPath) ? FALSE : empty($langcode) ? $this->editPath : $this->editPath . '/' . $langcode;
+    return empty($this->editPath) ? FALSE : (empty($langcode) ? $this->editPath : $this->editPath . '/' . $langcode);
   }
 
   /**
@@ -663,7 +663,7 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa
   /**
    * @see EntityTranslationHandlerInterface::switchPathScheme()
    */
-  public function switchPathScheme($scheme) {
+  public function setPathScheme($scheme) {
     if ($scheme != $this->activePathScheme) {
       $this->activePathScheme = $scheme;
       $this->initPathVariables();
