diff --git a/modules/services_entityreference/services_entityreference.module b/modules/services_entityreference/services_entityreference.module
index 606d0ef..d23ba18 100644
--- a/modules/services_entityreference/services_entityreference.module
+++ b/modules/services_entityreference/services_entityreference.module
@@ -15,20 +15,141 @@ function services_entityreference_services_resources() {
     foreach ($type_bundles as $bundle => $bundle_instances) {
       foreach ($bundle_instances as $field_name => $instance) {
         $field = field_info_field($field_name);
-        if ($field['type'] == 'entityreference' && in_array($field['settings']['handler'], array('base', 'og'))) {
+        if ($field['type'] == 'entityreference') {
           $target_entity = $field['settings']['target_type'];
-          $name = services_entityreference_format_plural($entity_type);
-          $resources["entity_$target_entity"]['relationships'][$name . '_' . $field_name] = array(
-            'help' => t("Display an index of @referencing entities that have a reference to a @target via field @fieldname.", array(
-              '@referencing'  => $entity_type,
-              '@target'       => $target_entity,
+
+          // Provide a reverse relationship for entityrefence fields: on the
+          // target entity type, list the entities that point here via the given
+          // field.
+          if (in_array($field['settings']['handler'], array('base', 'og'))) {
+            $name = services_entityreference_format_plural($entity_type);
+            $resources["entity_$target_entity"]['relationships'][$name . '_' . $field_name] = array(
+              'help' => t("Display an index of @referencing entities that have a reference to a @target via field @fieldname.", array(
+                '@referencing'  => $entity_type,
+                '@target'       => $target_entity,
+                '@fieldname'    => $field_name,
+              )),
+              'access callback' => '_services_entity_resource_access',
+              'access callback file' => array('type' => 'inc', 'module' => 'services_entity', 'name' => 'services_entity.resources'),
+              'access arguments' => array('index'),
+              'access arguments append' => TRUE,
+              'callback'                => '_services_entityreference_relationship_query',
+              'args'                    => array(
+                array(
+                  'name' => 'entity_type',
+                  'optional' => TRUE,  // Otherwise throws an error
+                  'default value' => $entity_type,
+                  'type' => 'string',
+                  'description' => 'The type of the entity to get',
+                ),
+                array(
+                  'name' => 'field_name',
+                  'optional' => TRUE,  // Otherwise throws an error
+                  'default value' => $field_name,
+                  'type' => 'string',
+                  'description' => 'The type of the entity to get',
+                ),
+                array(
+                  'name' => $target_entity . '_id',
+                  'optional' => FALSE,
+                  'source' => array('path' => 0),
+                  'type' => 'int',
+                  'description' => 'The ID of the entity to get',
+                ),
+                /**
+                 * Fields to return
+                 *
+                 * these should be specified in a comma separated list like ?fields=title,created,uid
+                 */
+                array(
+                  'name' => 'fields',
+                  'optional' => TRUE,
+                  'type' => 'string',
+                  'description' => 'A comma separated list of fields to get.',
+                  'default value' => '*',
+                  'source' => array('param' => 'fields'),
+                ),
+                /**
+                 * Filter parameters
+                 *
+                 * these should be specified by ?param[title]=My Title&param[created]=4403305
+                 */
+                array(
+                  'name' => 'parameters',
+                  'optional' => TRUE,
+                  'type' => 'array',
+                  'description' => 'Filter parameters array such as param[title]="test"',
+                  'default value' => array(),
+                  'source' => array('param' => 'param'),
+                ),
+                /**
+                 * Page number
+                 *
+                 * A zero based page number like ?page=3 (returns the fourth page)
+                 */
+                array(
+                  'name' => 'page',
+                  'optional' => TRUE,
+                  'type' => 'int',
+                  'description' => 'The zero-based index of the page to get, defaults to 0.',
+                  'default value' => 0,
+                  'source' => array('param' => 'page'),
+                ),
+                /**
+                 * Page Size
+                 *
+                 * How many records per page to return. ?pagesize=20
+                 */
+                array(
+                  'name' => 'pagesize',
+                  'optional' => TRUE,
+                  'type' => 'int',
+                  'description' => 'Number of records to get per page.',
+                  'default value' => variable_get('services_entity_' . $entity_type . '_index_page_size', 20),
+                  'source' => array('param' => 'pagesize'),
+                ),
+                /**
+                 * Sort field
+                 *
+                 * Which field to sort on. ?sort=created
+                 */
+                array(
+                  'name' => 'sort',
+                  'optional' => TRUE,
+                  'type' => 'string',
+                  'description' => 'Field to sort by.',
+                  'default value' => '',
+                  'source' => array('param' => 'sort'),
+                ),
+                /**
+                 * Sort Direction
+                 *
+                 * Which direction to sort. Possible Values = "ASC|DESC" ?direction=DESC
+                 */
+                array(
+                  'name' => 'direction',
+                  'optional' => TRUE,
+                  'type' => 'string',
+                  'description' => 'Direction of the sort. ASC or DESC.',
+                  'default value' => 'ASC',
+                  'source' => array('param' => 'direction'),
+                ),
+              ),
+            );
+          } // settings handler
+
+          // Provide a forward relationship for entityrefence fields: on the host
+          // entity type, list the entities that are pointed to in the given field.
+          $resources["entity_$entity_type"]['relationships']['entityreference_' . $field_name] = array(
+            'help' => t("Display an index of @referenced entities referenced via field @fieldname.", array(
+              '@referenced'   => $target_entity,
               '@fieldname'    => $field_name,
             )),
             'access callback' => '_services_entity_resource_access',
             'access callback file' => array('type' => 'inc', 'module' => 'services_entity', 'name' => 'services_entity.resources'),
             'access arguments' => array('index'),
             'access arguments append' => TRUE,
-            'callback'                => '_services_entityreference_relationship_query',
+            'callback'                => '_services_entityreference_relationship_query_forward',
             'args'                    => array(
               array(
                 'name' => 'entity_type',
@@ -38,19 +159,19 @@ function services_entityreference_services_resources() {
                 'description' => 'The type of the entity to get',
               ),
               array(
-                'name' => 'field_name',
-                'optional' => TRUE,  // Otherwise throws an error
-                'default value' => $field_name,
-                'type' => 'string',
-                'description' => 'The type of the entity to get',
-              ),
-              array(
                 'name' => $target_entity . '_id',
                 'optional' => FALSE,
                 'source' => array('path' => 0),
                 'type' => 'int',
                 'description' => 'The ID of the entity to get',
               ),
+              array(
+                'name' => 'field_name',
+                'optional' => TRUE,  // Otherwise throws an error
+                'default value' => $field_name,
+                'type' => 'string',
+                'description' => 'The type of the entity to get',
+              ),
               /**
                * Fields to return
                *
@@ -64,71 +185,6 @@ function services_entityreference_services_resources() {
                 'default value' => '*',
                 'source' => array('param' => 'fields'),
               ),
-              /**
-               * Filter parameters
-               *
-               * these should be specified by ?param[title]=My Title&param[created]=4403305
-               */
-              array(
-                'name' => 'parameters',
-                'optional' => TRUE,
-                'type' => 'array',
-                'description' => 'Filter parameters array such as param[title]="test"',
-                'default value' => array(),
-                'source' => array('param' => 'param'),
-              ),
-              /**
-               * Page number
-               *
-               * A zero based page number like ?page=3 (returns the fourth page)
-               */
-              array(
-                'name' => 'page',
-                'optional' => TRUE,
-                'type' => 'int',
-                'description' => 'The zero-based index of the page to get, defaults to 0.',
-                'default value' => 0,
-                'source' => array('param' => 'page'),
-              ),
-              /**
-               * Page Size
-               *
-               * How many records per page to return. ?pagesize=20
-               */
-              array(
-                'name' => 'pagesize',
-                'optional' => TRUE,
-                'type' => 'int',
-                'description' => 'Number of records to get per page.',
-                'default value' => variable_get('services_entity_' . $entity_type . '_index_page_size', 20),
-                'source' => array('param' => 'pagesize'),
-              ),
-              /**
-               * Sort field
-               *
-               * Which field to sort on. ?sort=created
-               */
-              array(
-                'name' => 'sort',
-                'optional' => TRUE,
-                'type' => 'string',
-                'description' => 'Field to sort by.',
-                'default value' => '',
-                'source' => array('param' => 'sort'),
-              ),
-              /**
-               * Sort Direction
-               *
-               * Which direction to sort. Possible Values = "ASC|DESC" ?direction=DESC
-               */
-              array(
-                'name' => 'direction',
-                'optional' => TRUE,
-                'type' => 'string',
-                'description' => 'Direction of the sort. ASC or DESC.',
-                'default value' => 'ASC',
-                'source' => array('param' => 'direction'),
-              ),
             ),
           );
         }
@@ -150,6 +206,28 @@ function _services_entityreference_relationship_query($entity_type, $field_name,
 }
 
 /**
+ * Retrieve entities in an entityreference field.
+ *
+ * @param $entity_type
+ *  The entity type.
+ * @param $entity_id
+ *  The id of the entity on which the field values are present.
+ * @param $field_name
+ *  The name of the entityreference field.
+ * @param $fields
+ *  A comma-separated list of the fields to return on the returned entities, or
+ *  '*' to return all fields.
+ *
+ * @return
+ *  An array of entity data.
+ */
+function _services_entityreference_relationship_query_forward($entity_type, $entity_id, $field_name, $fields) {
+  $resourceclass = variable_get('services_entity_resource_class', 'ServicesEntityResourceController');
+  $resource = new $resourceclass;
+  return $resource->field($entity_type, $entity_id, $field_name, $fields);
+}
+
+/**
  * Format an entity type as plural
  */
 function services_entityreference_format_plural($name) {
diff --git a/plugins/services_entity_interface.inc b/plugins/services_entity_interface.inc
index 46b358f..99d7654 100644
--- a/plugins/services_entity_interface.inc
+++ b/plugins/services_entity_interface.inc
@@ -86,5 +86,27 @@ interface ServicesResourceControllerInterface {
    *   The number of items on that pages to be returned.
    */
   public function index($entity_type, $fields, $parameters, $page, $pagesize, $sort, $direction);
+
+  /**
+   * Get the value of a single field.
+   *
+   * @param $entity_type
+   *  The entity type.
+   * @param $entity_id
+   *  The id of the entity on which the field values are present.
+   * @param $field_name
+   *  The name of the field to retrieve the value of.
+   * @param $fields
+   *  A comma-separated list of the fields to return on the returned entities, or
+   *  '*' to return all fields.
+   * @param $raw
+   *  (optional) Whether to return the raw value of the field, or the processed
+   *  value. Defaults to FALSE.
+   *
+   * @return
+   *  Entity data for the field.
+   */
+  public function field($entity_type, $entity_id, $field_name, $fields = '*', $raw = FALSE);
+
 }
 
diff --git a/plugins/services_entity_resource.inc b/plugins/services_entity_resource.inc
index e854d53..eeb9845 100644
--- a/plugins/services_entity_resource.inc
+++ b/plugins/services_entity_resource.inc
@@ -109,7 +109,40 @@ class ServicesEntityResourceController implements ServicesResourceControllerInte
 
     return $return;
   }
-  
+
+  /**
+   * Implements ServicesResourceControllerInterface::field().
+   */
+  public function field($entity_type, $entity_id, $field_name, $fields = '*', $raw = FALSE) {
+    $entity = entity_load_single($entity_type, $entity_id);
+    if (!$entity) {
+      services_error('Entity not found', 404);
+    }
+
+    $wrapper = entity_metadata_wrapper($entity_type, $entity_id);
+    if ($raw) {
+      $return = $wrapper->{$field_name}->raw();
+    }
+    else {
+      $return = $wrapper->{$field_name}->value();
+    }
+
+    $field = field_info_field($field_name);
+
+    // Special handling for entityreference fields: run the new entities through
+    // limit fields.
+    if ($field['type'] == 'entityreference' && !$raw) {
+      $entities = $return;
+      $return = array();
+
+      foreach($entities as $id => $entity) {
+        $return[] = $this->limit_fields($entity, $fields);
+      }
+    }
+
+    return $return;
+  }
+
   // Limit fields to the list provided.
   protected function limit_fields($entity, $fields) {
     if ($fields == '*') {
diff --git a/plugins/services_entity_resource_clean.inc b/plugins/services_entity_resource_clean.inc
index 1e34c53..ffad86c 100644
--- a/plugins/services_entity_resource_clean.inc
+++ b/plugins/services_entity_resource_clean.inc
@@ -72,6 +72,22 @@ class ServicesEntityResourceControllerClean extends ServicesEntityResourceContro
     }
     return $return;
   }
+
+  /**
+   * Implements ServicesResourceControllerInterface::field().
+   */
+  public function field($entity_type, $entity_id, $field_name, $fields = '*', $raw = FALSE) {
+    $entity = entity_load_single($entity_type, $entity_id);
+    if (!$entity) {
+      services_error('Entity not found', 404);
+    }
+
+    $field_name = preg_replace('/^field_/', '', $field_name);
+
+    $return = $this->get_data(entity_metadata_wrapper($entity_type, $entity), $field_name);
+    return $return;
+  }
+
   /**
    * Return the data structure for an entity stripped of all "drupalisms" such as
    * field_ and complex data arrays.
