diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc
index 29cb7382780a0fc84f7e8d461a78655e21d430a7..6322b917430c0714e5ac5d4b2de0fbb0fedd5911 100644
--- a/includes/bootstrap.inc
+++ b/includes/bootstrap.inc
@@ -2292,6 +2292,9 @@ function drupal_language_types() {
  * Return true if there is more than one language enabled.
  */
 function drupal_multilingual() {
+  // The "language_count" variable stores the number of enabled languages to
+  // avoid unnecessarily querying the database when building the list of
+  // enabled languages on monolingual sites.
   return variable_get('language_count', 1) > 1;
 }
 
diff --git a/modules/locale/locale.admin.inc b/modules/locale/locale.admin.inc
index 3e4c6f188113ee163cb149892846b748a078b000..de16133fb5a9e7115a7434643dfcfa0384f21374 100644
--- a/modules/locale/locale.admin.inc
+++ b/modules/locale/locale.admin.inc
@@ -467,6 +467,9 @@ function locale_languages_delete_form_submit($form, &$form_state) {
       ->fields(array('language' => ''))
       ->condition('language', $form_state['values']['langcode'])
       ->execute();
+    if ($languages[$form_state['values']['langcode']]->enabled) {
+      variable_set('language_count', variable_get('language_count', 1) - 1);
+    }
     module_invoke_all('multilingual_settings_changed');
     $variables = array('%locale' => $languages[$form_state['values']['langcode']]->name);
     drupal_set_message(t('The language %locale has been removed.', $variables));
diff --git a/modules/locale/locale.test b/modules/locale/locale.test
index 765bfb6dd7cfdaad24d07ad1caf37b5840231686..5e9e8336cf427fc824606da7cc620093d7e6cf7d 100644
--- a/modules/locale/locale.test
+++ b/modules/locale/locale.test
@@ -129,7 +129,7 @@ class LocaleConfigurationTest extends DrupalWebTestCase {
     $this->drupalGet('admin/config/regional/language');
     $this->clickLink(t('delete'));
     $this->assertText(t('Are you sure you want to delete the language'), t('"delete" link is correct.'));
-    // Delete the language.
+    // Delete an enabled language.
     $this->drupalGet('admin/config/regional/language/delete/' . $langcode);
     // First test the 'cancel' link.
     $this->clickLink(t('Cancel'));
@@ -144,6 +144,31 @@ class LocaleConfigurationTest extends DrupalWebTestCase {
     // Verify that language is no longer found.
     $this->drupalGet('admin/config/regional/language/delete/' . $langcode);
     $this->assertResponse(404, t('Language no longer found.'));
+    // Make sure the "language_count" variable has been updated correctly.
+    drupal_static_reset('language_list');
+    $enabled = language_list('enabled');
+    $this->assertEqual(variable_get('language_count', 1), count($enabled[1]), t('Language count is correct.'));
+    // Delete a disabled language.
+    // Disable an enabled language.
+    $edit = array(
+      'enabled[fr]' => FALSE,
+    );
+    $this->drupalPost($path, $edit, t('Save configuration'));
+    $this->assertNoFieldChecked('edit-enabled-fr', t('French language disabled.'));
+    // Get the count of enabled languages.
+    drupal_static_reset('language_list');
+    $enabled = language_list('enabled');
+    // Delete the disabled language.
+    $this->drupalPost('admin/config/regional/language/delete/fr', array(), t('Delete'));
+    // We need raw here because %locale will add HTML.
+    $this->assertRaw(t('The language %locale has been removed.', array('%locale' => 'French')), t('Disabled language has been removed.'));
+    $this->assertEqual($this->getUrl(), url('admin/config/regional/language', array('absolute' => TRUE)), t('Correct page redirection.'));
+    // Verify that language is no longer found.
+    $this->drupalGet('admin/config/regional/language/delete/fr');
+    $this->assertResponse(404, t('Language no longer found.'));
+    // Make sure the "language_count" variable has not changed.
+    $this->assertEqual(variable_get('language_count', 1), count($enabled[1]), t('Language count is correct.'));
+
 
     // Ensure we can't delete the English language.
     $this->drupalGet('admin/config/regional/language/delete/en');