diff --git a/modules/locale/locale.module b/modules/locale/locale.module
index 0788461..35ef567 100644
--- a/modules/locale/locale.module
+++ b/modules/locale/locale.module
@@ -736,18 +736,25 @@ function locale_get_plural($count, $langcode = NULL) {
   $langcode = $langcode ? $langcode : $language->language;
 
   if (!isset($plurals[$langcode][$count])) {
-    if (empty($locale_formula)) {
+    // Retrieve and statically cache the plural formula for the language.
+    if (!isset($locale_formula[$langcode])) {
       $language_list = language_list();
       $locale_formula[$langcode] = $language_list[$langcode]->formula;
     }
-    if ($locale_formula[$langcode]) {
+    // If there is a plural formula for the language, evaluate it for the given
+    // $count and statically cache the result for the combination of language
+    // and count, since the result will always be identical.
+    if (!empty($locale_formula[$langcode])) {
       $n = $count;
       $plurals[$langcode][$count] = @eval('return intval(' . $locale_formula[$langcode] . ');');
-      return $plurals[$langcode][$count];
     }
+    // In case there is no plural formula for English, use a default formula.
+    elseif ($langcode == 'en') {
+      $plurals[$langcode][$count] = (int) ($count != 1);
+    }
+    // Otherwise, return -1 (unknown).
     else {
       $plurals[$langcode][$count] = -1;
-      return -1;
     }
   }
   return $plurals[$langcode][$count];
