diff --git a/core/modules/language/language.admin.inc b/core/modules/language/language.admin.inc
index 11c6e62d3ca16a26c5656f3819dc22d15675c82f..afac71c78b94cd75462d26bac183d87448c22448 100644
--- a/core/modules/language/language.admin.inc
+++ b/core/modules/language/language.admin.inc
@@ -19,17 +19,20 @@ function language_admin_overview_form($form, &$form_state) {
   $form['languages'] = array(
     '#languages' => $languages,
     '#language_default' => $default,
-    '#tree' => TRUE,
+    '#type' => 'table',
     '#header' => array(
       t('Name'),
       t('Default'),
       t('Weight'),
       t('Operations'),
     ),
-    '#theme' => 'language_admin_overview_form_table',
+    '#tabledrag' => array(
+      array('order', 'sibling', 'language-order-weight'),
+    ),
   );
 
   foreach ($languages as $langcode => $language) {
+    $form['languages'][$langcode]['#attributes']['class'][] = 'draggable';
     $form['languages'][$langcode]['#weight'] = $language->weight;
     $title = check_plain($language->name);
     $description = '';
@@ -98,43 +101,6 @@ function language_admin_overview_form($form, &$form_state) {
   return $form;
 }
 
-/**
- * Returns HTML for the language overview form.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_language_admin_overview_form_table($variables) {
-  $form = $variables['form'];
-
-  $rows = array();
-  foreach (element_children($form, TRUE) as $langcode) {
-    $element = &$form[$langcode];
-    $row = array(
-      'class' => array('draggable'),
-    );
-    foreach (element_children($element, TRUE) as $column) {
-      $cell = &$element[$column];
-      $row['data'][] = drupal_render($cell);
-    }
-    $rows[] = $row;
-  }
-
-  $output = theme('table', array(
-    'header' => $form['#header'],
-    'rows' => $rows,
-    'attributes' => array('id' => 'language-order'),
-  ));
-  $output .= drupal_render_children($form);
-
-  drupal_add_tabledrag('language-order', 'order', 'sibling', 'language-order-weight');
-
-  return $output;
-}
-
 /**
  * Process language overview form submissions, updating existing languages.
  */
diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index 50c7724c6600d7ab232bf7921b55de1d3f11c615..c2356bee416a7181b9d13aa582e0fc56cc3a557e 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -188,10 +188,6 @@ function language_permission() {
  */
 function language_theme() {
   return array(
-    'language_admin_overview_form_table' => array(
-      'render element' => 'form',
-      'file' => 'language.admin.inc',
-    ),
     'language_negotiation_configure_form' => array(
       'render element' => 'form',
     ),