diff --git a/includes/gettext.inc b/includes/gettext.inc
index 155d0d4..a3d2a7c 100644
--- a/includes/gettext.inc
+++ b/includes/gettext.inc
@@ -32,7 +32,7 @@ function _locale_import_po($file, $langcode, $mode) {
   drupal_set_time_limit(240);
 
   // Check if we have the language already in the database.
-  if (!db_query("SELECT COUNT(language) FROM {languages} WHERE language = :language", array(':language' => $langcode))->fetchField()) {
+  if (!language_load($langcode)) {
     drupal_set_message(t('The language selected for import is not supported.'), 'error');
     return FALSE;
   }
diff --git a/includes/locale.inc b/includes/locale.inc
index 7d92eba..906a36e 100644
--- a/includes/locale.inc
+++ b/includes/locale.inc
@@ -764,8 +764,9 @@ function _locale_rebuild_js($langcode = NULL) {
     // This is necessary to keep the variable consistent with the database
     // version of the language and to prevent checking against an outdated hash.
     $default_langcode = language_default()->language;
+    drupal_static_reset('language_list');
     if ($default_langcode == $language->language) {
-      $default = db_query("SELECT * FROM {languages} WHERE language = :language", array(':language' => $default_langcode))->fetchObject();
+      $default = language_load($default_langcode);
       variable_set('language_default', $default);
     }
   }
diff --git a/modules/locale/locale.admin.inc b/modules/locale/locale.admin.inc
index 8a20bf9..e17ed7c 100644
--- a/modules/locale/locale.admin.inc
+++ b/modules/locale/locale.admin.inc
@@ -239,22 +239,16 @@ function locale_languages_add_form($form, &$form_state) {
  * @param $langcode
  *   Language code of the language to edit.
  */
-function locale_languages_edit_form($form, &$form_state, $langcode) {
-  if ($language = db_query("SELECT * FROM {languages} WHERE language = :language", array(':language' => $langcode))->fetchObject()) {
-    _locale_languages_common_controls($form, $language);
-    $form['actions'] = array('#type' => 'actions');
-    $form['actions']['submit'] = array(
-      '#type' => 'submit',
-      '#value' => t('Save language')
-    );
-    $form['#submit'][] = 'locale_languages_edit_form_submit';
-    $form['#validate'][] = 'locale_languages_edit_form_validate';
-    return $form;
-  }
-  else {
-    drupal_not_found();
-    drupal_exit();
-  }
+function locale_languages_edit_form($form, &$form_state, $language) {
+  _locale_languages_common_controls($form, $language);
+  $form['actions'] = array('#type' => 'actions');
+  $form['actions']['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save language')
+  );
+  $form['#submit'][] = 'locale_languages_edit_form_submit';
+  $form['#validate'][] = 'locale_languages_edit_form_validate';
+  return $form;
 }
 
 /**
@@ -324,8 +318,7 @@ function locale_languages_add_predefined_form_validate($form, &$form_state) {
     form_set_error('predefined_langcode', t('Fill in the language details and save the language with <em>Add custom language</em>.'));
   }
   else {
-    $languages = language_list();
-    if (isset($languages[$langcode])) {
+    if (language_load($langcode)) {
       form_set_error('predefined_langcode', t('The language %language (%code) already exists.', array('%language' => $languages[$langcode]->name, '%code' => $langcode)));
     }
   }
@@ -431,8 +424,8 @@ function locale_languages_edit_form_submit($form, &$form_state) {
 /**
  * User interface for the language deletion confirmation screen.
  */
-function locale_languages_delete_form($form, &$form_state, $langcode) {
-
+function locale_languages_delete_form($form, &$form_state, $language) {
+  $langcode = $language->language;
   // Do not allow deletion of English locale.
   if ($langcode == 'en') {
     drupal_set_message(t('The English language cannot be deleted.'));
diff --git a/modules/locale/locale.module b/modules/locale/locale.module
index e3288da..2037c35 100644
--- a/modules/locale/locale.module
+++ b/modules/locale/locale.module
@@ -125,14 +125,14 @@ function locale_menu() {
     'file' => 'locale.admin.inc',
     'type' => MENU_VISIBLE_IN_BREADCRUMB,
   );
-  $items['admin/config/regional/language/edit/%'] = array(
+  $items['admin/config/regional/language/edit/%language'] = array(
     'title' => 'Edit language',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('locale_languages_edit_form', 5),
     'access arguments' => array('administer languages'),
     'file' => 'locale.admin.inc',
   );
-  $items['admin/config/regional/language/delete/%'] = array(
+  $items['admin/config/regional/language/delete/%language'] = array(
     'title' => 'Confirm',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('locale_languages_delete_form', 5),
@@ -256,6 +256,20 @@ function locale_permission() {
 }
 
 /**
+ * Loads a language object from the database.
+ *
+ * @param $langcode
+ *   The language code.
+ *
+ * @return
+ *   A fully-populated language object or FALSE.
+ */
+function language_load($langcode) {
+  $languages = language_list();
+  return isset($languages[$langcode]) ? $languages[$langcode] : FALSE;
+}
+
+/**
  * Form builder callback to display language selection widget.
  *
  * @ingroup forms
