diff --git a/includes/locale.inc b/includes/locale.inc
index 9714319..bd46e2d 100644
--- a/includes/locale.inc
+++ b/includes/locale.inc
@@ -739,14 +739,7 @@ function _locale_prepare_predefined_list() {
       unset($predefined[$key]);
       continue;
     }
-    // Include native name in output, if possible
-    if (count($value) > 1) {
-      $tname = t($value[0]);
-      $predefined[$key] = ($tname == $value[1]) ? $tname : "$tname ($value[1])";
-    }
-    else {
-      $predefined[$key] = t($value[0]);
-    }
+    $predefined[$key] = t($value[0]);
   }
   asort($predefined);
   return $predefined;
diff --git a/modules/locale/locale.admin.inc b/modules/locale/locale.admin.inc
index f2da1e5..285a2bf 100644
--- a/modules/locale/locale.admin.inc
+++ b/modules/locale/locale.admin.inc
@@ -31,14 +31,12 @@ function locale_languages_overview_form() {
     }
     $form['weight'][$langcode] = array(
       '#type' => 'weight',
-      '#title' => t('Weight for @title', array('@title' => $language->name)),
+      '#title' => t('Weight for @title', array('@title' => t($language->name))),
       '#title_display' => 'invisible',
       '#default_value' => $language->weight,
       '#attributes' => array('class' => array('language-order-weight')),
     );
-    $form['name'][$langcode] = array('#markup' => check_plain($language->name));
-    $form['native'][$langcode] = array('#markup' => check_plain($language->native));
-    $form['direction'][$langcode] = array('#markup' => ($language->direction == LANGUAGE_RTL ? t('Right to left') : t('Left to right')));
+    $form['name'][$langcode] = array('#markup' => check_plain(t($language->name)));
   }
   $form['enabled'] = array(
     '#type' => 'checkboxes',
@@ -54,8 +52,17 @@ function locale_languages_overview_form() {
     '#options' => $options,
     '#default_value' => language_default()->language,
   );
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
+
+  // Gather language stats to show.
+  $form['stat_values'] = module_invoke_all('locale_language_stats');
+
+  $form['actions'] = array(
+    '#type' => 'actions',
+    'submit' => array(
+      '#type' => 'submit',
+      '#value' => t('Save configuration'),
+    ),
+  );
   $form['#theme'] = 'locale_languages_overview_form';
 
   return $form;
@@ -73,6 +80,9 @@ function locale_languages_overview_form() {
 function theme_locale_languages_overview_form($variables) {
   $form = $variables['form'];
   $default = language_default();
+  $stat_headers = array();
+  $languages = language_list();
+
   foreach ($form['name'] as $key => $element) {
     // Do not take form control structures.
     if (is_array($element) && element_child($key)) {
@@ -90,23 +100,48 @@ function theme_locale_languages_overview_form($variables) {
       $form['enabled'][$key]['#title_display'] = 'invisible';
       $form['site_default'][$key]['#title'] = t('Set !title as default', array('!title' => $title));
       $form['site_default'][$key]['#title_display'] = 'invisible';
-      $rows[] = array(
+
+      $row = array(
         'data' => array(
-          '<strong>' . $title . '</strong>',
-          drupal_render($form['native'][$key]),
-          check_plain($key),
-          drupal_render($form['direction'][$key]),
-          array('data' => drupal_render($form['enabled'][$key]), 'align' => 'center'),
+          $title,
+          drupal_render($form['enabled'][$key]),
           drupal_render($form['site_default'][$key]),
           drupal_render($form['weight'][$key]),
-          l(t('edit'), 'admin/config/regional/language/edit/' . $key) . (($key != 'en' && $key != $default->language) ? ' ' . l(t('delete'), 'admin/config/regional/language/delete/' . $key) : '')
-        ),
-        'class' => array('draggable'),
+        )
       );
+      // Add individual stats columns to language overview.
+      foreach ($form['stat_values'] as $stat_index => $stat_type) {
+        if (is_array($stat_type) && isset($stat_type['#title']) && isset($stat_type['#values'])) {
+          $stat_headers[$stat_index] = $stat_type['#title'];
+          if (isset($stat_type['#values'][$key])) {
+            if (!empty($stat_type['#values'][$key]['path'])) {
+              $row['data'][] = l($stat_type['#values'][$key]['value'], $stat_type['#values'][$key]['path']);
+            }
+            else {
+              $row['data'][] = $stat_type['#values'][$key]['value'];
+            }
+          }
+          else {
+            $row['data'][] = '';
+          }
+        }
+      }
+
+      // Add operations as a final column.
+      $row['data'][] = l(t('edit'), 'admin/config/regional/language/edit/' . $key) . (($key != 'en' && $key != $default->language) ? ' ' . l(t('delete'), 'admin/config/regional/language/delete/' . $key) : '');
+      $row['class'] = array('draggable');
+      $rows[] = $row;
     }
   }
-  $header = array(array('data' => t('English name')), array('data' => t('Native name')), array('data' => t('Code')), array('data' => t('Direction')), array('data' => t('Enabled')), array('data' => t('Default')), array('data' => t('Weight')), array('data' => t('Operations')));
+
+  $header = array_merge(array(t('Name'), t('Enabled'), t('Default'), t('Weight')), $stat_headers, array(t('Operations')));
   $output = theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'language-order')));
+
+  // These contained elements we rendered above, so we don't need the markup
+  // wrapper for them polluting the end of the form.
+  drupal_render($form['enabled']);
+  drupal_render($form['site_default']);
+
   $output .= drupal_render_children($form);
 
   drupal_add_tabledrag('language-order', 'order', 'sibling', 'language-order-weight');
diff --git a/modules/locale/locale.module b/modules/locale/locale.module
index 6bb697d..d07b9bb 100644
--- a/modules/locale/locale.module
+++ b/modules/locale/locale.module
@@ -48,16 +48,13 @@ function locale_help($path, $arg) {
       $output = '<p>' . t('Determine the language from a request/session parameter. Example: "http://example.com?language=de" sets language to German based on the use of "de" within the "language" parameter.') . '</p>';
       return $output;
     case 'admin/config/regional/translate':
-      $output = '<p>' . t('This page provides an overview of available translatable strings. See the <a href="@languages">Languages page</a> for more information on adding support for additional languages.', array('@languages' => url('admin/config/regional/language'))) . '</p>';
-      return $output;
+      return '<p>' . t('This page allows a translator to search for specific translated and untranslated strings, and is used when creating or editing translations. (Note: For translation tasks involving many strings, it may be more convenient to <a href="@export">export</a> strings for offline editing in a desktop Gettext translation editor.) Searches may be limited to strings in a specific language.', array('@export' => url('admin/config/regional/translate/export'))) . '</p>';
     case 'admin/config/regional/translate/import':
       $output = '<p>' . t('This page imports the translated strings contained in an individual Gettext Portable Object (<em>.po</em>) file. Normally distributed as part of a translation package (each translation package may contain several <em>.po</em> files), a <em>.po</em> file may need to be imported after offline editing in a Gettext translation editor. Importing an individual <em>.po</em> file may be a lengthy process.') . '</p>';
       $output .= '<p>' . t('Note that the <em>.po</em> files within a translation package are imported automatically (if available) when new modules or themes are enabled, or as new languages are added. Since this page only allows the import of one <em>.po</em> file at a time, it may be simpler to download and extract a translation package into your Drupal installation directory and <a href="@language-add">add the language</a> (which automatically imports all <em>.po</em> files within the package). Translation packages are available for download on the <a href="@translations">Drupal translation page</a>.', array('@language-add' => url('admin/config/regional/language/add'), '@translations' => 'http://localize.drupal.org')) . '</p>';
       return $output;
     case 'admin/config/regional/translate/export':
       return '<p>' . t('This page exports the translated strings used by your site. An export file may be in Gettext Portable Object (<em>.po</em>) form, which includes both the original string and the translation (used to share translations with others), or in Gettext Portable Object Template (<em>.pot</em>) form, which includes the original strings only (used to create new translations with a Gettext translation editor).') . '</p>';
-    case 'admin/config/regional/translate/translate':
-      return '<p>' . t('This page allows a translator to search for specific translated and untranslated strings, and is used when creating or editing translations. (Note: For translation tasks involving many strings, it may be more convenient to <a href="@export">export</a> strings for offline editing in a desktop Gettext translation editor.) Searches may be limited to strings in a specific language.', array('@export' => url('admin/config/regional/translate/export'))) . '</p>';
     case 'admin/structure/block/manage/%/%':
       if ($arg[4] == 'locale' && $arg[5] == 'language') {
         return '<p>' . t('This block is only shown if <a href="@languages">at least two languages are enabled</a> and <a href="@configuration">language negotiation</a> is set to <em>URL</em> or <em>Session</em>.', array('@languages' => url('admin/config/regional/language'), '@configuration' => url('admin/config/regional/language/configure'))) . '</p>';
@@ -135,25 +132,17 @@ function locale_menu() {
 
   // Translation functionality
   $items['admin/config/regional/translate'] = array(
-    'title' => 'Translate interface',
-    'description' => 'Translate the built in interface and optionally other text.',
-    'page callback' => 'locale_translate_overview_screen',
+    'title' => 'Interface translation',
+    'description' => 'Translate the built-in user interface.',
+    'page callback' => 'locale_translate_seek_screen', // search results and form concatenated
     'access arguments' => array('translate interface'),
     'file' => 'locale.pages.inc',
     'weight' => -5,
   );
-  $items['admin/config/regional/translate/overview'] = array(
-    'title' => 'Overview',
-    'weight' => 0,
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-  );
   $items['admin/config/regional/translate/translate'] = array(
     'title' => 'Translate',
-    'weight' => 10,
-    'type' => MENU_LOCAL_TASK,
-    'page callback' => 'locale_translate_seek_screen', // search results and form concatenated
-    'access arguments' => array('translate interface'),
-    'file' => 'locale.pages.inc',
+    'weight' => 0,
+    'type' => MENU_DEFAULT_LOCAL_TASK,
   );
   $items['admin/config/regional/translate/import'] = array(
     'title' => 'Import',
@@ -1056,3 +1045,39 @@ function locale_form_comment_form_alter(&$form, &$form_state, $form_id) {
     $form['language']['#value'] = $language_content->language;
   }
 }
+
+/**
+ * Implements hook_locale_language_stats().
+ */
+function locale_locale_language_stats() {
+  $stats = array();
+
+  drupal_static_reset('language_list');
+  $languages = language_list('language');
+  $stats['#title'] = t('Interface translation');
+  $path = 'admin/config/regional/translate/translate';
+  $num_strings = db_query("SELECT COUNT(*) FROM {locales_source}")->fetchField();
+
+  // Set up overview table with default values, ensuring common order for values.
+  $stats['#values'] = array();
+  foreach ($languages as $langcode => $language) {
+    if ($langcode == 'en') {
+      $stats['#values'][$langcode] = array('path' => '', 'value' => t('n/a'));
+    }
+    else {
+      $stats['#values'][$langcode] = array('path' => $path, 'value' => '0/' . $num_strings . ' (0%)');
+    }
+  }
+
+  if (!empty($num_strings)) {
+    // If we have source strings, match translations and compute progress. Not
+    // all languages may have information.
+    $translations = db_query("SELECT COUNT(*) AS translation, t.language FROM {locales_source} s INNER JOIN {locales_target} t ON s.lid = t.lid GROUP BY language");
+    foreach ($translations as $data) {
+      $ratio = ($data->translation > 0) ? round(($data->translation/$num_strings) * 100.0, 2) : 0;
+      $stats['#values'][$data->language]['value'] = $data->translation . '/' . $num_strings . " ($ratio%)";
+    }
+  }
+
+  return array($stats);
+}
diff --git a/modules/locale/locale.pages.inc b/modules/locale/locale.pages.inc
index 3e6590e..26de396 100644
--- a/modules/locale/locale.pages.inc
+++ b/modules/locale/locale.pages.inc
@@ -6,37 +6,6 @@
  */
 
 /**
- * Overview screen for translations.
- */
-function locale_translate_overview_screen() {
-  drupal_static_reset('language_list');
-  $languages = language_list('language');
-  $headers = array(t('Language'), t('Interface translation status'));
-  $num_strings = db_query("SELECT COUNT(*) FROM {locales_source}")->fetchField();
-
-  // Set up overview table with default values, ensuring common order for values.
-  $rows = array();
-  foreach ($languages as $langcode => $language) {
-    $rows[$langcode] = array(
-      'name' => ($langcode == 'en' ? t('English (built-in)') : t($language->name)),
-      'status' => ($langcode == 'en' ? t('n/a') : '0/' . $num_strings . ' (0%)'),
-    );
-  }
-
-  if (!empty($num_strings)) {
-    // If we have source strings, match translations and compute progress. Not
-    // all languages may have information.
-    $translations = db_query("SELECT COUNT(*) AS translation, t.language FROM {locales_source} s INNER JOIN {locales_target} t ON s.lid = t.lid GROUP BY language");
-    foreach ($translations as $data) {
-      $ratio = ($data->translation > 0) ? round(($data->translation/$num_strings) * 100.0, 2) : 0;
-      $rows[$data->language]['status'] = $data->translation . '/' . $num_strings . " ($ratio%)";
-    }
-  }
-
-  return theme('table', array('header' => $headers, 'rows' => $rows));
-}
-
-/**
  * String search screen.
  */
 function locale_translate_seek_screen() {
diff --git a/modules/locale/locale.test b/modules/locale/locale.test
index 31556cb..0574797 100644
--- a/modules/locale/locale.test
+++ b/modules/locale/locale.test
@@ -73,10 +73,8 @@ class LocaleConfigurationTest extends DrupalWebTestCase {
     );
     $this->drupalPost('admin/config/regional/language/add', $edit, t('Add custom language'));
     $this->assertEqual($this->getUrl(), url('admin/config/regional/language', array('absolute' => TRUE)), t('Correct page redirection.'));
-    $this->assertText($langcode, t('Language code found.'));
-    $this->assertText($name, t('Name found.'));
-    $this->assertText($native, t('Native found.'));
-    $this->assertText($native, t('Test language added.'));
+    $this->assertRaw(' form-item-weight-' . $langcode, t('Language code found.'));
+    $this->assertText(t($name), t('Test language added.'));
 
     // Check if we can change the default language.
     $path = 'admin/config/regional/language';
@@ -233,12 +231,8 @@ class LocaleTranslationFunctionalTest extends DrupalWebTestCase {
     t($name, array(), array('langcode' => $langcode));
     // Reset locale cache.
     locale_reset();
-    $this->assertText($langcode, t('Language code found.'));
-    $this->assertText($name, t('Name found.'));
-    $this->assertText($native, t('Native found.'));
-    // No t() here, we do not want to add this string to the database and it's
-    // surely not translated yet.
-    $this->assertText($native, t('Test language added.'));
+    $this->assertRaw(' form-item-weight-' . $langcode, t('Language code found.'));
+    $this->assertText(t($name), t('Test language added.'));
     $this->drupalLogout();
 
     // Search for the name and translate it.
