diff --git modules/field/field.info.inc modules/field/field.info.inc
index be30375..6869580 100644
--- modules/field/field.info.inc
+++ modules/field/field.info.inc
@@ -67,13 +67,18 @@ function field_info_cache_clear() {
  *     as well as module, giving the module that exposes the entity type.
  */
 function _field_info_collate_types($reset = FALSE) {
-  global $language;
-  static $info;
-
   // The _info() hooks invoked below include translated strings, so each
   // language is cached separately.
+  global $language;
   $langcode = $language->language;
 
+  // Use the advanced drupal_static() pattern, since this is called very often.
+  static $drupal_static_fast;
+  if (!isset($drupal_static_fast)) {
+    $drupal_static_fast['_field_info_collate_types'] = &drupal_static(__FUNCTION__);
+  }
+  $info = &$drupal_static_fast['_field_info_collate_types'];
+
   if ($reset) {
     $info = NULL;
     // Clear all languages.
@@ -178,7 +183,12 @@ function _field_info_collate_types($reset = FALSE) {
  *     name and field name. This entry only lists non-deleted instances.
  */
 function _field_info_collate_fields($reset = FALSE) {
-  static $info;
+  // Use the advanced drupal_static() pattern, since this is called very often.
+  static $drupal_static_fast;
+  if (!isset($drupal_static_fast)) {
+    $drupal_static_fast['_field_info_collate_fields'] = &drupal_static(__FUNCTION__);
+  }
+  $info = &$drupal_static_fast['_field_info_collate_fields'];
 
   if ($reset) {
     $info = NULL;
