diff --git node_reference/node_reference.module node_reference/node_reference.module
index fc2dd84..a95be31 100644
--- node_reference/node_reference.module
+++ node_reference/node_reference.module
@@ -10,12 +10,11 @@
  */
 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),
+    'page arguments' => array(2, 3, 4),
     'access callback' => 'node_reference_autocomplete_access',
-    'access arguments' => array(2, 3),
+    'access arguments' => array(2, 3, 4),
     'type' => MENU_CALLBACK,
   );
   return $items;
@@ -450,7 +449,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'),
@@ -689,20 +688,19 @@ function _node_reference_potential_references_standard($field, $string = '', $ma
  * 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) {
+function node_reference_autocomplete_access($entity_type, $bundle, $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);
+  $match = $instance['widget']['settings']['autocomplete_match'];
 
-  // @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';
   $matches = array();
-
   $references = _node_reference_potential_references($field, $string, $match, array(), 10);
   foreach ($references as $id => $row) {
     // Add a class wrapper for a few required CSS overrides.
diff --git user_reference/user_reference.module user_reference/user_reference.module
index 41ff2e6..62bc564 100644
--- user_reference/user_reference.module
+++ user_reference/user_reference.module
@@ -10,11 +10,12 @@
  */
 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' => 'user_reference_autocomplete_access',
+    'access arguments' => array(2, 3, 4),
+    'type' => MENU_CALLBACK,
   );
   return $items;
 }
@@ -291,7 +292,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',
@@ -523,14 +524,23 @@ function _user_reference_potential_references_standard($field, $string = '', $ma
 }
 
 /**
+ * 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 user_reference_autocomplete_access($entity_type, $bundle, $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; Retrieve a pipe delimited string of autocomplete suggestions for existing users
  */
-function user_reference_autocomplete($field_name, $string = '') {
+function user_reference_autocomplete($entity_type, $bundle, $field_name, $string = '') {
   $field = field_info_field($field_name);
-
-  $match = isset($field['widget']['autocomplete_match']) ? $field['widget']['autocomplete_match'] : 'contains';
+  $instance = field_info_instance($entity_type, $field_name, $bundle);
+  $match = $instance['widget']['settings']['autocomplete_match'];
   $matches = array();
-
   $references = _user_reference_potential_references($field, $string, $match, array(), 10);
   foreach ($references as $id => $row) {
     // Add a class wrapper for a few required CSS overrides.
