diff --git modules/field/field.install modules/field/field.install
index 02455c4..80e423d 100644
--- modules/field/field.install
+++ modules/field/field.install
@@ -310,18 +310,27 @@ function _update_7000_field_delete_instance($field_name, $entity_type, $bundle)
 /**
  * Utility function: fetch all the field definitions from the database.
  *
+ * Warning: unlike the field_read_fields() API function, this function returns
+ * all fields by default, including deleted and inactive fields, unless
+ * specified otherwise in the $conditions parameter.
+ *
  * @param $conditions
  *   An array of conditions to limit the select query to.
+ * @param $key
+ *   The name of the field property the return array is indexed by. Using
+ *   anything else than 'id' might cause incomplete results if the $conditions
+ *   do not filter out deleted fields.
+ *
+ * @return
+ *   An array of fields matching $conditions, keyed by the property specified
+ *   by the $key parameter.
  */
-function _update_7000_field_read_fields(array $conditions = array()) {
+function _update_7000_field_read_fields(array $conditions = array(), $key = 'id') {
   $fields = array();
   $query = db_select('field_config', 'fc', array('fetch' => PDO::FETCH_ASSOC))
-    ->fields('fc')
-    ->condition('deleted', 0);
-  if (!empty($conditions)) {
-    foreach ($conditions as $column => $value) {
-      $query->condition($column, $value);
-    }
+    ->fields('fc');
+  foreach ($conditions as $column => $value) {
+    $query->condition($column, $value);
   }
   foreach ($query->execute() as $record) {
     $field = unserialize($record['data']);
@@ -338,7 +347,7 @@ function _update_7000_field_read_fields(array $conditions = array()) {
     $field['translatable'] = $record['translatable'];
     $field['deleted'] = $record['deleted'];
 
-    $fields[$field['field_name']] = $field;
+    $fields[$field[$key]] = $field;
   }
   return $fields;
 }
diff --git modules/field/modules/list/list.install modules/field/modules/list/list.install
index cc7bcaf..fe5d299 100644
--- modules/field/modules/list/list.install
+++ modules/field/modules/list/list.install
@@ -51,7 +51,7 @@ function list_field_schema($field) {
  */
 function list_update_7001() {
   $fields = _update_7000_field_read_fields(array('module' => 'list'));
-  foreach ($fields as $field_name => $field) {
+  foreach ($fields as $field) {
     $update = array();
 
     // Translate the old string format into the new array format.
@@ -116,3 +116,15 @@ function _list_update_7001_extract_allowed_values($string, $position_keys) {
 
   return $values;
 }
+
+/**
+ * Re-apply list_update_7001() for deleted fields.
+ */
+function list_update_7002() {
+  // See http://drupal.org/node/1022924: list_update_7001() intitally
+  // overlooked deleted fields, which then caused fatal errors when the fields
+  // were being purged.
+  // list_update_7001() has the required checks to ensure it is reentrant, so
+  // it can simply be executed once more..
+  list_update_7001();
+}
\ No newline at end of file
diff --git modules/field/modules/text/text.install modules/field/modules/text/text.install
index cd1d9de..eee0f57 100644
--- modules/field/modules/text/text.install
+++ modules/field/modules/text/text.install
@@ -93,7 +93,7 @@ function text_update_7000() {
     'module' => 'text',
     'storage_type' => 'field_sql_storage',
   ));
-  foreach ($fields as $field_name => $field) {
+  foreach ($fields as $field) {
     if ($field['deleted']) {
       $table = "field_deleted_data_{$field['id']}";
       $revision_table = "field_deleted_revision_{$field['id']}";
diff --git modules/taxonomy/taxonomy.install modules/taxonomy/taxonomy.install
index 73c115a..80d50ed 100644
--- modules/taxonomy/taxonomy.install
+++ modules/taxonomy/taxonomy.install
@@ -567,8 +567,12 @@ function taxonomy_update_7005(&$sandbox) {
   // of term references stored so far for the current revision, which
   // provides the delta value for each term reference data insert. The
   // deltas are reset for each new revision.
-
-  $field_info = _update_7000_field_read_fields();
+  
+  $conditions = array(
+    'type' => 'taxonomy_term_reference',
+    'deleted' => 0,
+  );
+  $field_info = _update_7000_field_read_fields($conditions, 'field_name');
 
   // This is a multi-pass update. On the first call we need to initialize some
   // variables.
