diff --git a/modules/field/field.module b/modules/field/field.module
index 132238e..07dc110 100644
--- a/modules/field/field.module
+++ b/modules/field/field.module
@@ -948,6 +948,7 @@ function field_get_items($entity_type, $entity, $field_name, $langcode = NULL) {
 function field_has_data($field) {
   $query = new EntityFieldQuery();
   return (bool) $query
+    ->age(FIELD_LOAD_REVISION)
     ->fieldCondition($field)
     ->range(0, 1)
     ->count()
diff --git a/modules/field/tests/field.test b/modules/field/tests/field.test
index 1e59315..d4f3a38 100644
--- a/modules/field/tests/field.test
+++ b/modules/field/tests/field.test
@@ -485,6 +485,66 @@ class FieldAttachStorageTestCase extends FieldAttachTestCase {
   }
 
   /**
+   * Test field_has_data().
+   */
+  function testFieldHasData() {
+    $entity_type = 'test_entity';
+    $langcode = LANGUAGE_NONE;
+
+    $field_name = 'field_1';
+    $field = array('field_name' => $field_name, 'type' => 'test_field');
+    $field = field_create_field($field);
+
+    $this->assertFalse(field_has_data($field), "No data should be detected.");
+
+    $instance = array(
+      'field_name' => $field_name,
+      'entity_type' => 'test_entity',
+      'bundle' => 'test_bundle'
+    );
+    $instance = field_create_instance($instance);
+    $table = _field_sql_storage_tablename($field);
+    $revision_table = _field_sql_storage_revision_tablename($field);
+
+    $columns = array('entity_type', 'entity_id', 'revision_id', 'delta', 'language', $field_name . '_value');
+
+    $eid = 0;
+
+    // Insert data into the field revision table
+    $query = db_insert($revision_table)->fields($columns);
+    $query->values(array($entity_type, $eid, 0, 0, $langcode, 1));
+    $query->execute();
+
+    $this->assertTrue(field_has_data($field), "Revision data only should be detected.");
+
+    $field_name = 'field_2';
+    $field = array('field_name' => $field_name, 'type' => 'test_field');
+    $field = field_create_field($field);
+
+    $this->assertFalse(field_has_data($field), "No data should be detected.");
+
+    $instance = array(
+      'field_name' => $field_name,
+      'entity_type' => 'test_entity',
+      'bundle' => 'test_bundle'
+    );
+    $instance = field_create_instance($instance);
+    $table = _field_sql_storage_tablename($field);
+    $revision_table = _field_sql_storage_revision_tablename($field);
+
+    $columns = array('entity_type', 'entity_id', 'revision_id', 'delta', 'language', $field_name . '_value');
+
+    $eid = 1;
+
+    // Insert data into the field table
+    $query = db_insert($table)->fields($columns);
+    $query->values(array($entity_type, $eid, 0, 0, $langcode, 1));
+    $query->execute();
+
+    $this->assertFalse(field_has_data($field), "Values only in field table should not be detected.");
+  }
+
+  /**
    * Test field_attach_delete().
    */
   function testFieldAttachDelete() {
@@ -1067,25 +1127,25 @@ class FieldAttachOtherTestCase extends FieldAttachTestCase {
     $this->assertEqual($form[$this->field_name_2][$langcode]['#title'], $this->instance_2['label'], "Second field's form title is {$this->instance_2['label']}");
     for ($delta = 0; $delta < $this->field['cardinality']; $delta++) {
       // field_test_widget uses 'textfield'
-        $this->assertEqual($form[$this->field_name][$langcode][$delta]['value']['#type'], 'textfield', "First field's form delta $delta widget is textfield");
-      }
-      for ($delta = 0; $delta < $this->field_2['cardinality']; $delta++) {
-        // field_test_widget uses 'textfield'
-        $this->assertEqual($form[$this->field_name_2][$langcode][$delta]['value']['#type'], 'textfield', "Second field's form delta $delta widget is textfield");
-      }
+      $this->assertEqual($form[$this->field_name][$langcode][$delta]['value']['#type'], 'textfield', "First field's form delta $delta widget is textfield");
+    }
+    for ($delta = 0; $delta < $this->field_2['cardinality']; $delta++) {
+      // field_test_widget uses 'textfield'
+      $this->assertEqual($form[$this->field_name_2][$langcode][$delta]['value']['#type'], 'textfield', "Second field's form delta $delta widget is textfield");
+    }
 
-      // When generating form for a single field (the second field).
-      $options = array('field_name' => $this->field_name_2);
-      $form = array();
-      $form_state = form_state_defaults();
-      field_attach_form($entity_type, $entity, $form, $form_state, NULL, $options);
-
-      $this->assertFalse(isset($form[$this->field_name]), 'The first field does not exist in the form');
-      $this->assertEqual($form[$this->field_name_2][$langcode]['#title'], $this->instance_2['label'], "Second field's form title is {$this->instance_2['label']}");
-      for ($delta = 0; $delta < $this->field_2['cardinality']; $delta++) {
-        // field_test_widget uses 'textfield'
-        $this->assertEqual($form[$this->field_name_2][$langcode][$delta]['value']['#type'], 'textfield', "Second field's form delta $delta widget is textfield");
-      }
+    // When generating form for a single field (the second field).
+    $options = array('field_name' => $this->field_name_2);
+    $form = array();
+    $form_state = form_state_defaults();
+    field_attach_form($entity_type, $entity, $form, $form_state, NULL, $options);
+
+    $this->assertFalse(isset($form[$this->field_name]), 'The first field does not exist in the form');
+    $this->assertEqual($form[$this->field_name_2][$langcode]['#title'], $this->instance_2['label'], "Second field's form title is {$this->instance_2['label']}");
+    for ($delta = 0; $delta < $this->field_2['cardinality']; $delta++) {
+      // field_test_widget uses 'textfield'
+      $this->assertEqual($form[$this->field_name_2][$langcode][$delta]['value']['#type'], 'textfield', "Second field's form delta $delta widget is textfield");
+    }
   }
 
   /**
