diff --git a/entity_translation.admin.inc b/entity_translation.admin.inc
index 8020abb..44b073f 100644
--- a/entity_translation.admin.inc
+++ b/entity_translation.admin.inc
@@ -52,17 +52,10 @@ function entity_translation_admin_form_submit($form, $form_state) {
 /**
  * Translations overview menu callback.
  */
-function entity_translation_overview($entity_type, $entity) {
+function entity_translation_overview($entity_type, $entity, $callback = NULL) {
   // Entity translation and node translation share the same system path.
-  if (entity_translation_node($entity_type, $entity)) {
-    if (module_exists('i18n_node')) {
-      module_load_include('inc', 'i18n_node', 'i18n_node.pages');
-      return i18n_node_translation_overview($entity);
-    }
-    else {
-      module_load_include('inc', 'translation', 'translation.pages');
-      return translation_node_overview($entity);
-    }
+  if (entity_translation_node($entity_type, $entity) && $callback) {
+    return entity_translation_overview_callback($callback, $entity);
   }
 
   $handler = entity_translation_get_handler($entity_type, $entity);
@@ -167,6 +160,22 @@ function entity_translation_overview($entity_type, $entity) {
 }
 
 /**
+ * Call the appropriate translation overview callback.
+ */
+function entity_translation_overview_callback($callback, $entity) {
+  if (module_exists($callback['module'])) {
+    if (isset($callback['file'])) {
+      $path = isset($callback['file path']) ? $callback['file path'] : drupal_get_path('module', $callback['module']);
+      $file = DRUPAL_ROOT . '/' . $path . '/' . $callback['file'];
+      if (is_file($file)) {
+        require_once $file;
+      }
+    }
+    return $callback['page callback']($entity);
+  }
+}
+
+/**
  * Return the appropriate entity label for the given language.
  */
 function _entity_translation_label($entity_type, $entity, $langcode = NULL) {
diff --git a/entity_translation.node.inc b/entity_translation.node.inc
index 0fcd431..7438d3c 100644
--- a/entity_translation.node.inc
+++ b/entity_translation.node.inc
@@ -36,11 +36,16 @@ function entity_translation_node($entity_type, $node) {
  * Implements hook_menu_alter().
  */
 function entity_translation_menu_alter(&$items) {
-  if (module_exists('i18n_node')) {
-    $items['node/%node/translate']['page callback'] = 'entity_translation_overview';
-    $items['node/%node/translate']['file'] = 'entity_translation.admin.inc';
-    $items['node/%node/translate']['module'] = 'entity_translation';
-  }
+  // Preserve the menu router item defined by other modules.
+  $callback['page callback'] = $items['node/%node/translate']['page callback'];
+  $callback['page arguments'] = $items['node/%node/translate']['page arguments'];
+  $callback['file'] = $items['node/%node/translate']['file'];
+  $callback['module'] = $items['node/%node/translate']['module'];
+
+  $items['node/%node/translate']['page callback'] = 'entity_translation_overview';
+  $items['node/%node/translate']['page arguments'] = array('node', 1, $callback);
+  $items['node/%node/translate']['file'] = 'entity_translation.admin.inc';
+  $items['node/%node/translate']['module'] = 'entity_translation';
 }
 
 /**
