diff --git modules/field/field.crud.inc modules/field/field.crud.inc
index 21e000c..57f25f8 100644
--- modules/field/field.crud.inc
+++ modules/field/field.crud.inc
@@ -576,22 +576,13 @@ function field_read_fields($params = array(), $include_additional = array()) {
 }
 
 /**
- * Marks a field and its instances and data for deletion.
+ * Marks a field for deletion.
  *
  * @param $field_name
  *   The field name to delete.
  */
-function field_delete_field($field_name) {
-  // Delete all non-deleted instances.
+function field_delete_field_record($field_name) {
   $field = field_info_field($field_name);
-  if (isset($field['bundles'])) {
-    foreach ($field['bundles'] as $entity_type => $bundles) {
-      foreach ($bundles as $bundle) {
-        $instance = field_info_instance($entity_type, $field_name, $bundle);
-        field_delete_instance($instance);
-      }
-    }
-  }
 
   // Mark field data for deletion.
   module_invoke($field['storage']['module'], 'field_storage_delete_field', $field);
@@ -609,6 +600,28 @@ function field_delete_field($field_name) {
 }
 
 /**
+ * Marks a field and its instances and data for deletion.
+ *
+ * @param $field_name
+ *   The field name to delete.
+ */
+function field_delete_field($field_name) {
+
+  // Delete all non-deleted instances.
+  $field = field_info_field($field_name);
+  if (isset($field['bundles'])) {
+    foreach ($field['bundles'] as $entity_type => $bundles) {
+      foreach ($bundles as $bundle) {
+        $instance = field_info_instance($entity_type, $field_name, $bundle);
+        field_delete_instance_record($instance);
+      }
+    }
+  }
+
+  field_delete_field_record($field_name);
+}
+
+/**
  * Creates an instance of a field, binding it to a bundle.
  *
  * @param $instance
@@ -924,7 +937,7 @@ function field_read_instances($params = array(), $include_additional = array())
  * @param $instance
  *   An instance structure.
  */
-function field_delete_instance($instance) {
+function field_delete_instance_record($instance) {
   // Mark the field instance for deletion.
   db_update('field_config_instance')
     ->fields(array('deleted' => 1))
@@ -944,6 +957,25 @@ function field_delete_instance($instance) {
 }
 
 /**
+ * Marks a field instance and its data for deletion.
+ *
+ * If this is the last instance, deletes the field.
+ *
+ * @param $instance
+ *   An instance structure.
+ */
+function field_delete_instance($instance) {
+  field_delete_instance_record($instance);
+
+  // Delete the field if that was the last instance.
+  $field = field_info_field($instance['field_name']);
+
+  if (count($field['bundles']) == 0) {
+    field_delete_field_record($field['field_name']);
+  }
+}
+
+/**
  * @} End of "defgroup field_crud".
  */
 
diff --git modules/field/tests/field.test modules/field/tests/field.test
index 30b1d86..8697cf2 100644
--- modules/field/tests/field.test
+++ modules/field/tests/field.test
@@ -2511,7 +2511,7 @@ class FieldInstanceCrudTestCase extends FieldTestCase {
     field_create_instance($this->instance_definition);
     $this->another_instance_definition = $this->instance_definition;
     $this->another_instance_definition['bundle'] .= '_another_bundle';
-    $instance = field_create_instance($this->another_instance_definition);
+    field_create_instance($this->another_instance_definition);
 
     // Test that the first instance is not deleted, and then delete it.
     $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
@@ -2530,6 +2530,11 @@ class FieldInstanceCrudTestCase extends FieldTestCase {
     // Make sure the other field instance is not deleted.
     $another_instance = field_read_instance('test_entity', $this->another_instance_definition['field_name'], $this->another_instance_definition['bundle']);
     $this->assertTrue(!empty($another_instance) && empty($another_instance['deleted']), t('A non-deleted field instance is not marked for deletion.'));
+
+    // Make sure the field is deleted when its last instance is deleted.
+    field_delete_instance($another_instance);
+    $field = field_read_field($another_instance['field_name'], array('include_deleted' => TRUE));
+    $this->assertTrue(!empty($field['deleted']), t('A deleted field is marked for deletion after all its instances have been marked for deletion.'));
   }
 }
 
@@ -3069,7 +3074,7 @@ class FieldBulkDeleteTestCase extends FieldTestCase {
     foreach ($this->bundles as $bundle) {
       // Delete the instance.
       $instance = field_info_instance($this->entity_type, $field['field_name'], $bundle);
-      field_delete_instance($instance);
+      field_delete_instance_record($instance);
 
       // Purge the data.
       field_purge_batch(10);
diff --git modules/field_ui/field_ui.admin.inc modules/field_ui/field_ui.admin.inc
index 9d36400..741cb02 100644
--- modules/field_ui/field_ui.admin.inc
+++ modules/field_ui/field_ui.admin.inc
@@ -1706,10 +1706,6 @@ function field_ui_field_delete_form_submit($form, &$form_state) {
 
   if (!empty($bundle) && $field && !$field['locked'] && $form_values['confirm']) {
     field_delete_instance($instance);
-    // Delete the field if that was the last instance.
-    if (count($field['bundles']) == 1 && count(current($field['bundles'])) == 1) {
-      field_delete_field($field['field_name']);
-    }
     drupal_set_message(t('The field %field has been deleted from the %type content type.', array('%field' => $instance['label'], '%type' => $bundle_label)));
   }
   else {
