diff --git modules/field/field.info.inc modules/field/field.info.inc
index f5daa19..6e3e284 100644
--- modules/field/field.info.inc
+++ modules/field/field.info.inc
@@ -28,17 +28,29 @@ function field_info_cache_clear() {
   // functions are moved to the entity API.
   entity_info_cache_clear();
 
-  _field_info_collate_types(TRUE);
-  _field_info_collate_fields(TRUE);
+  field_info_collate_types_reset();
+  field_info_collate_fields_reset();
+}
+
+/**
+ * Reset the cached collation information.
+ */
+function field_info_collate_types_reset() {
+  drupal_static_reset('_field_info_collate_types');
+  cache_clear_all('field_info_types:', 'cache_field', TRUE);
+}
+
+/**
+ * Reset the cached information on existing fields and instances.
+ */
+function field_info_collate_fields_reset() {
+  drupal_static_reset('_field_info_collate_fields');
+  cache_clear_all('field_info_fields', 'cache_field');
 }
 
 /**
  * Collates all information on field types, widget types and related structures.
  *
- * @param $reset
- *   If TRUE, clear the cache. The information will be rebuilt from the database
- *   next time it is needed. Defaults to FALSE.
- *
  * @return
  *   If $reset is TRUE, nothing.
  *   If $reset is FALSE, an array containing the following elements:
@@ -64,21 +76,18 @@ function field_info_cache_clear() {
  *     revision key, bundle key, cacheable, and bundles from hook_entity_info(),
  *     as well as module, giving the module that exposes the entity type.
  */
-function _field_info_collate_types($reset = FALSE) {
+function _field_info_collate_types() {
   global $language;
-  static $info;
+  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'];
 
   // The _info() hooks invoked below include translated strings, so each
   // language is cached separately.
   $langcode = $language->language;
 
-  if ($reset) {
-    $info = NULL;
-    // Clear all languages.
-    cache_clear_all('field_info_types:', 'cache_field', TRUE);
-    return;
-  }
-
   if (!isset($info)) {
     if ($cached = cache_get("field_info_types:$langcode", 'cache_field')) {
       $info = $cached->data;
@@ -158,10 +167,6 @@ function _field_info_collate_types($reset = FALSE) {
 /**
  * Collates all information on existing fields and instances.
  *
- * @param $reset
- *   If TRUE, clear the cache. The information will be rebuilt from the
- *   database next time it is needed. Defaults to FALSE.
- *
  * @return
  *   If $reset is TRUE, nothing.
  *   If $reset is FALSE, an array containing the following elements:
@@ -175,14 +180,12 @@ function _field_info_collate_types($reset = FALSE) {
  *   - instances: Array of existing instances, keyed by entity type, bundle
  *     name and field name. This entry only lists non-deleted instances.
  */
-function _field_info_collate_fields($reset = FALSE) {
-  static $info;
-
-  if ($reset) {
-    $info = NULL;
-    cache_clear_all('field_info_fields', 'cache_field');
-    return;
+function _field_info_collate_fields() {
+  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 (!isset($info)) {
     if ($cached = cache_get('field_info_fields', 'cache_field')) {
diff --git modules/field_ui/field_ui.test modules/field_ui/field_ui.test
index c0fbaf2..113927a 100644
--- modules/field_ui/field_ui.test
+++ modules/field_ui/field_ui.test
@@ -154,7 +154,7 @@ class FieldUITestCase extends DrupalWebTestCase {
    */
   function assertFieldSettings($bundle, $field_name, $string = 'dummy test string', $entity_type = 'node') {
     // Reset the fields info.
-    _field_info_collate_fields(TRUE);
+    field_info_collate_fields_reset();
     // Assert field settings.
     $field = field_info_field($field_name);
     $this->assertTrue($field['settings']['test_field_setting'] == $string, t('Field settings were found.'));
@@ -245,7 +245,7 @@ class FieldUITestCase extends DrupalWebTestCase {
     $this->fieldUIDeleteField($bundle_path1, $this->field_name, $this->field_label, $this->type);
 
     // Reset the fields info.
-    _field_info_collate_fields(TRUE);
+    field_info_collate_fields_reset();
     // Check that the field instance was deleted.
     $this->assertNull(field_info_instance('node', $this->field_name, $this->type), t('Field instance was deleted.'));
     // Check that the field was not deleted
@@ -255,7 +255,7 @@ class FieldUITestCase extends DrupalWebTestCase {
     $this->fieldUIDeleteField($bundle_path2, $this->field_name, $this->field_label, $type_name2);
 
     // Reset the fields info.
-    _field_info_collate_fields(TRUE);
+    field_info_collate_fields_reset();
     // Check that the field instance was deleted.
     $this->assertNull(field_info_instance('node', $this->field_name, $type_name2), t('Field instance was deleted.'));
     // Check that the field was deleted too.
