diff --git a/entity.api.php b/entity.api.php
index 9f7cc0a..e9d6f96 100644
--- a/entity.api.php
+++ b/entity.api.php
@@ -299,10 +299,14 @@ function entity_metadata_hook_entity_info() {
  *       is only be taken into account, if no 'access callback' is given.
  *     - schema field: (optional) In case the property is directly based upon
  *       a field specified in the entity's hook_schema(), the name of the field.
- *     - query callback: (optional) A callback for querying for entities having
- *       the given property value. See entity_property_query().
- *       In case a 'schema field' has been specified, it is not necessary to
- *       specify a callback as it will default to 'entity_metadata_table_query'.
+ *     - queryable: (optional) Whether a property is queryable with
+ *       EntityFieldQuery. Defaults to TRUE if a 'schema field' is specified, or
+ *       if the deprecated 'query callback' is set to
+ *       'entity_metadata_field_query'. Otherwise it defaults to FALSE.
+ *     - query callback: (deprecated) A callback for querying for entities
+ *       having the given property value. See entity_property_query().
+ *       Generally, properties should be queryable via EntityFieldQuery. If
+ *       that is the case, just set 'queryable' to TRUE.
  *     - required: (optional) Whether this property is required for the creation
  *       of a new instance of its entity. See
  *       entity_property_values_create_entity().
diff --git a/includes/entity.property.inc b/includes/entity.property.inc
index c13876a..86bae62 100644
--- a/includes/entity.property.inc
+++ b/includes/entity.property.inc
@@ -108,7 +108,13 @@ function entity_get_all_property_info($entity_type = NULL) {
  */
 function entity_property_query($entity_type, $property, $value, $limit = 30) {
   $properties = entity_get_all_property_info($entity_type);
-  $info = $properties[$property] + array('type' => 'text', 'query callback' => isset($properties[$property]['schema field']) ? 'entity_metadata_table_query' : FALSE);
+  $info = $properties[$property] + array('type' => 'text', 'queryable' => !empty($properties[$property]['schema field']));
+
+  // We still support the deprecated query callback, so just add in EFQ-based
+  // callbacks in case 'queryable' is set to TRUE and make use of the callback.
+  if ($info['queryable'] && empty($info['query callback'])) {
+    $info['query callback'] = !empty($info['field']) ? 'entity_metadata_field_query' : 'entity_metadata_table_query';
+  }
 
   $type = $info['type'];
   // Make sure an entity or a list of entities are passed on as identifiers
