diff --git a/modules/locale/locale.admin.inc b/modules/locale/locale.admin.inc
index f2da1e5..8ac0565 100644
--- a/modules/locale/locale.admin.inc
+++ b/modules/locale/locale.admin.inc
@@ -153,50 +153,27 @@ function locale_languages_overview_form_submit($form, &$form_state) {
 /**
  * User interface for the language addition screen.
  */
-function locale_languages_add_screen() {
-  $build['predefined'] = drupal_get_form('locale_languages_predefined_form');
-  $build['custom'] = drupal_get_form('locale_languages_custom_form');
-  return $build;
-}
-
-/**
- * Predefined language setup form.
- */
-function locale_languages_predefined_form($form) {
-  $predefined = _locale_prepare_predefined_list();
-  $form['language list'] = array('#type' => 'fieldset',
-    '#title' => t('Predefined language'),
-    '#collapsible' => TRUE,
-  );
-  $form['language list']['langcode'] = array('#type' => 'select',
+function locale_languages_add_form() {
+  $predefined_languages = _locale_prepare_predefined_list();
+  $predefined_languages['custom'] = t('Custom language...');
+  $form['predefined_langcode'] = array('#type' => 'select',
     '#title' => t('Language name'),
-    '#default_value' => key($predefined),
-    '#options' => $predefined,
-    '#description' => t('Use the <em>Custom language</em> section below if your desired language does not appear in this list.'),
+    '#default_value' => key($predefined_languages),
+    '#options' => $predefined_languages,
   );
-  $form['language list']['actions'] = array('#type' => 'actions');
-  $form['language list']['actions']['submit'] = array('#type' => 'submit', '#value' => t('Add language'));
-  return $form;
-}
 
-/**
- * Custom language addition form.
- */
-function locale_languages_custom_form($form) {
-  $form['custom language'] = array('#type' => 'fieldset',
-    '#title' => t('Custom language'),
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-  );
-  _locale_languages_common_controls($form['custom language']);
-  $form['custom language']['actions'] = array('#type' => 'actions');
-  $form['custom language']['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Add custom language')
+  $form['custom_language'] = array(
+    '#type' => 'container',
+    '#states' => array(
+      'visible' => array(
+        'select#edit-predefined-langcode' => array('value' => 'custom'),
+      )
+    ),
   );
-  // Reuse the validation and submit functions of the predefined language setup form.
-  $form['#submit'][] = 'locale_languages_predefined_form_submit';
-  $form['#validate'][] = 'locale_languages_predefined_form_validate';
+  _locale_languages_common_controls($form['custom_language']);
+
+  $form['actions'] = array('#type' => 'actions');
+  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Add language'));
   return $form;
 }
 
@@ -297,8 +274,11 @@ function _locale_languages_common_controls(&$form, $language = NULL) {
 /**
  * Validate the language addition form.
  */
-function locale_languages_predefined_form_validate($form, &$form_state) {
-  $langcode = $form_state['values']['langcode'];
+function locale_languages_add_form_validate($form, &$form_state) {
+  $langcode = $form_state['values']['predefined_langcode'];
+  if ($langcode == 'custom') {
+    $langcode = $form_state['values']['langcode'];
+  }
 
   if (($duplicate = db_query("SELECT COUNT(*) FROM {languages} WHERE language = :language", array(':language' => $langcode))->fetchField()) != 0) {
     form_set_error('langcode', t('The language %language (%code) already exists.', array('%language' => $form_state['values']['name'], '%code' => $langcode)));
@@ -321,9 +301,10 @@ function locale_languages_predefined_form_validate($form, &$form_state) {
 /**
  * Process the language addition form submission.
  */
-function locale_languages_predefined_form_submit($form, &$form_state) {
-  $langcode = $form_state['values']['langcode'];
-  if (isset($form_state['values']['name'])) {
+function locale_languages_add_form_submit($form, &$form_state) {
+  $langcode = $form_state['values']['predefined_langcode'];
+  if ($langcode == 'custom') {
+    $langcode = $form_state['values']['langcode'];
     // Custom language form.
     $language = (object) array(
       'language' => $langcode,
diff --git a/modules/locale/locale.module b/modules/locale/locale.module
index 6bb697d..abb844a 100644
--- a/modules/locale/locale.module
+++ b/modules/locale/locale.module
@@ -40,7 +40,7 @@ function locale_help($path, $arg) {
       $output = '<p>' . t('With multiple languages enabled, interface text can be translated, registered users may select their preferred language, and authors can assign a specific language to content. <a href="@translations">Download contributed translations</a> from Drupal.org.', array('@translations' => 'http://localize.drupal.org')) . '</p>';
       return $output;
     case 'admin/config/regional/language/add':
-      return '<p>' . t('Add a language to be supported by your site. If your desired language is not available in the <em>Language name</em> drop-down, click <em>Custom language</em> and provide a language code and other details manually. When providing a language code manually, be sure to enter a standardized language code, since this code may be used by browsers to determine an appropriate display language.') . '</p>';
+      return '<p>' . t('Add a language to be supported by your site. If your desired language is not available, pick <em>Custom language...</em> at the end and provide a language code and other details manually.') . '</p>';
     case 'admin/config/regional/language/configure':
       $output = '<p>' . t("Define how to decide which language is used to display page elements (primarily text provided by Drupal and modules, such as field labels and help text). This decision is made by evaluating a series of detection methods for languages; the first detection method that gets a result will determine which language is used for that type of text. Define the order of evaluation of language detection methods on this page.") . '</p>';
       return $output;
@@ -87,7 +87,8 @@ function locale_menu() {
   );
   $items['admin/config/regional/language/add'] = array(
     'title' => 'Add language',
-    'page callback' => 'locale_languages_add_screen', // two forms concatenated
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('locale_languages_add_form'),
     'access arguments' => array('administer languages'),
     'weight' => 5,
     'type' => MENU_LOCAL_ACTION,
