diff --git a/res.api.php b/res.api.php
index 3e76050..b23d4e7 100644
--- a/res.api.php
+++ b/res.api.php
@@ -109,14 +109,18 @@ function example_res_post_load_alter($params) {
  * @see hook_res_post_schema()
  *
  * @param array $params
- * - 'entity_type'
- * - 'bundle'
- * - 'base' the base URL of the RES client site
+ *   - 'entity_type'
+ *   - 'bundle'
+ *   - 'base' the base URL of the RES client site
+ * @param array $entity_info
+ *   An array as returned by entity_get_info().
+ * @param array $property_info
+ *   An array as returned by entity_get_all_property_info().
  *
  * @return boolean
  *   FALSE if RES should NOT go ahead with schema extraction.
  */
-function example_res_pre_schema_alter($params) {
+function example_res_pre_schema_alter($params, $entity_info, $property_info) {
   $entity_name = $bundle_name = $base = NULL;
   extract($params, EXTR_IF_EXISTS);
 
diff --git a/res.module b/res.module
index 803a34e..7d4d3fa 100644
--- a/res.module
+++ b/res.module
@@ -314,9 +314,13 @@ function res_next_rows($token, $number) {
  */
 function res_get_schema($entity_type, $bundle, $base) {
   $params = compact('entity_type', 'bundle', 'base');
-  drupal_alter('res_pre_schema', $params);
 
   $entity_info = entity_get_info($params['entity_type']);
+  $property_info = entity_get_all_property_info($params['entity_type']);
+
+  // Allow modules to alter entity/property info only for the duration of this
+  // function call.
+  drupal_alter('res_pre_schema', $params, $entity_info, $property_info);
 
   $less = array();
   // Do not do an array_flip/diff instead of looping: label field could also be an id
@@ -325,7 +329,7 @@ function res_get_schema($entity_type, $bundle, $base) {
       $less[] = $entity_info['entity keys'][$field];
     }
   }
-  $property_info = entity_get_all_property_info($entity_type);
+
   $property_info = array_diff_key($property_info, array_flip($less));
   $more = array();
   foreach ($property_info as $name => $info) {
@@ -344,7 +348,7 @@ function res_get_schema($entity_type, $bundle, $base) {
     ? array()
     : array(
       'entity'        => $entity_info,
-      'fields'        => field_info_instances($params['entity_type'], $bundle),
+      'fields'        => field_info_instances($params['entity_type'], $params['bundle']),
       'more_columns'  => $more,
     );
   $params += array('schema' => $ret);
