diff --git a/node_reference/node_reference.module b/node_reference/node_reference.module
index eab7f3e..48e6570 100644
--- a/node_reference/node_reference.module
+++ b/node_reference/node_reference.module
@@ -9,13 +9,11 @@
  * Implements hook_menu().
  */
 function node_reference_menu() {
-  $items = array();
-  $items['node_reference/autocomplete/%/%'] = array(
-    'title' => 'node_reference autocomplete',
+  $items['node_reference/autocomplete/%/%/%'] = array(
     'page callback' => 'node_reference_autocomplete',
-    'page arguments' => array(2, 3),
-    'access callback' => 'node_reference_autocomplete_access',
-    'access arguments' => array(2, 3),
+    'page arguments' => array(2, 3, 4),
+    'access callback' => 'reference_autocomplete_access',
+    'access arguments' => array(2, 3, 4),
     'type' => MENU_CALLBACK,
   );
   return $items;
@@ -535,7 +533,7 @@ function node_reference_field_widget_form(&$form, &$form_state, $field, $instanc
       $element += array(
         '#type' => 'textfield',
         '#default_value' => isset($items[$delta]['nid']) ? $items[$delta]['nid'] : NULL,
-        '#autocomplete_path' => $instance['widget']['settings']['autocomplete_path'] . '/' . $instance['entity_type'] . '/' . $field['field_name'],
+        '#autocomplete_path' => $instance['widget']['settings']['autocomplete_path'] . '/' . $instance['entity_type'] . '/' . $instance['bundle'] . '/' . $field['field_name'],
         '#size' => $instance['widget']['settings']['size'],
         '#maxlength' => 255,
         '#element_validate' => array('node_reference_autocomplete_validate'),
@@ -798,25 +796,15 @@ function _node_reference_potential_references_standard($field, $options) {
 }
 
 /**
- * Menu access callback for the autocomplete path.
- *
- * Check for both 'edit' and 'view' access in the unlikely event
- * a user has edit but not view access.
- */
-function node_reference_autocomplete_access($entity_type, $field_name) {
-  return user_access('access content') && ($field = field_info_field($field_name)) && field_access('view', $field, $entity_type) && field_access('edit', $field, $entity_type);
-}
-
-/**
  * Menu callback for the autocomplete results.
  */
-function node_reference_autocomplete($entity_type, $field_name, $string = '') {
+function node_reference_autocomplete($entity_type, $bundle, $field_name, $string = '') {
   $field = field_info_field($field_name);
+  $instance = field_info_instance($entity_type, $field_name, $bundle);
 
   $options = array(
     'string' => $string,
-    // @todo broken - this is in $field['widget']['settings']['autocomplete_match'] - we'd need the $instance.
-    'match' => isset($field['widget']['autocomplete_match']) ? $field['widget']['autocomplete_match'] : 'contains',
+    'match' => $instance['widget']['settings']['autocomplete_match'],
     'limit' => 10,
   );
   $references = _node_reference_potential_references($field, $options);
diff --git a/references.module b/references.module
index 3cba603..73cc216 100644
--- a/references.module
+++ b/references.module
@@ -6,6 +6,20 @@
  */
 
 /**
+ * Menu access callback for reference autocomplete paths.
+ *
+ * Check for both 'edit' and 'view' access in the unlikely event
+ * a user has edit but not view access.
+ */
+function reference_autocomplete_access($entity_type, $bundle, $field_name, $entity = NULL, $account = NULL) {
+  return user_access('access content', $account)
+      && ($field = field_info_field($field_name))
+      && field_info_instance($entity_type, $field_name, $bundle)
+      && field_access('view', $field, $entity_type, $entity, $account)
+      && field_access('edit', $field, $entity_type, $entity, $account);
+}
+
+/**
  * Implements hook_views_api().
  */
 function references_views_api() {
@@ -170,4 +184,4 @@ function references_potential_references_view($entity_type, $view_name, $display
   $results = $view->execute_display($display_name, $args);
 
   return $results;
-}
\ No newline at end of file
+}
diff --git a/user_reference/user_reference.module b/user_reference/user_reference.module
index 78d0955..a2f1c1e 100644
--- a/user_reference/user_reference.module
+++ b/user_reference/user_reference.module
@@ -9,12 +9,12 @@
  * Implements hook_menu().
  */
 function user_reference_menu() {
-  $items = array();
-  $items['user_reference/autocomplete'] = array(
-    'title' => 'user_reference autocomplete',
+  $items['user_reference/autocomplete/%/%/%'] = array(
     'page callback' => 'user_reference_autocomplete',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK
+    'page arguments' => array(2, 3, 4),
+    'access callback' => 'reference_autocomplete_access',
+    'access arguments' => array(2, 3, 4),
+    'type' => MENU_CALLBACK,
   );
   return $items;
 }
@@ -379,7 +379,7 @@ function user_reference_field_widget_form(&$form, &$form_state, $field, $instanc
       $element += array(
         '#type' => 'textfield',
         '#default_value' => isset($items[$delta]['uid']) ? $items[$delta]['uid'] : NULL,
-        '#autocomplete_path' => $instance['widget']['settings']['autocomplete_path'] . '/' . $field['field_name'],
+        '#autocomplete_path' => $instance['widget']['settings']['autocomplete_path'] . '/' . $instance['entity_type'] . '/' . $instance['bundle'] . '/' . $field['field_name'],
         '#size' => $instance['widget']['settings']['size'],
         '#element_validate' => array('user_reference_autocomplete_validate'),
         '#value_callback' => 'user_reference_autocomplete_value',
@@ -644,13 +644,13 @@ function _user_reference_potential_references_standard($field, $options) {
 /**
  * Menu callback; Retrieve a pipe delimited string of autocomplete suggestions for existing users
  */
-function user_reference_autocomplete($field_name, $string = '') {
+function user_reference_autocomplete($field_name, $bundle, $string = '') {
   $field = field_info_field($field_name);
+  $instance = field_info_instance($entity_type, $field_name, $bundle);
 
   $options = array(
     'string' => $string,
-    // @todo broken - this is in $field['widget']['settings']['autocomplete_match'] - we'd need the $instance.
-    'match' => isset($field['widget']['autocomplete_match']) ? $field['widget']['autocomplete_match'] : 'contains',
+    'match' => $instance['widget']['settings']['autocomplete_match'],
     'limit' => 10,
   );
   $references = _user_reference_potential_references($field, $options);
