diff --git a/relation.module b/relation.module
index 9ff8151..5e5c602 100644
--- a/relation.module
+++ b/relation.module
@@ -95,7 +95,7 @@ function relation_entity_property_info_alter(&$info) {
   foreach (relation_get_types() as $relation_type => $relation) {
     foreach ($relation->source_bundles as $key => $bundles) {
       list($entity_type, $bundle) = explode(':', $bundles, 2);
-      $info['relation']['bundles'][$bundle]['properties']['endpoints_source_' . $entity_type] = array(
+      $info['relation']['bundles'][$relation_type]['properties']['endpoints_source_' . $entity_type] = array(
         'label' => t('@type (source endpoint)', array('@type' => $entity_type)),
         'type' => 'list<' . $entity_type . '>',
         'getter callback' => 'relation_rules_get_specific_endpoints',
@@ -106,7 +106,7 @@ function relation_entity_property_info_alter(&$info) {
 
     foreach ($relation->target_bundles as $key => $bundles) {
       list($entity_type, $bundle) = explode(':', $bundles, 2);
-      $info['relation']['bundles'][$bundle]['properties']['endpoints_target_' . $entity_type] = array(
+      $info['relation']['bundles'][$relation_type]['properties']['endpoints_target_' . $entity_type] = array(
         'label' => t('@type (target endpoint)', array('@type' => $entity_type)),
         'type' => 'list<' . $entity_type . '>',
         'getter callback' => 'relation_rules_get_specific_endpoints',
diff --git a/relation.rules.inc b/relation.rules.inc
index 5cc7093..45c0d78 100644
--- a/relation.rules.inc
+++ b/relation.rules.inc
@@ -122,13 +122,21 @@ function relation_rules_get_endpoints($relation, array $options, $property_name,
  * Entity-type specific property getter callback.
  */
 function relation_rules_get_specific_endpoints($relation, array $options, $property_name, $entity_type, $info) {
-  $endpoints = relation_get_endpoints_by_endpoint_type($relation, $info['endpoint_type']);
+  if ($info['endpoint_type'] == 'source' && $info['relation_directional']) {
+    $endpoints = array($relation->endpoints[LANGUAGE_NONE][0]);
+  }
+  else {
+    $endpoints = $relation->endpoints[LANGUAGE_NONE];
+  }
+
+  // Extract the entity_type from a property like "endpoints_target_node"
+  $specific_entity_type = substr($property_name, 17);
 
   $array = array();
   foreach ($endpoints as $endpoint) {
-    $entities = entity_load($endpoint['entity_type'], array($endpoint['entity_id']));
-    $entity_id = entity_extract_ids($endpoint['entity_type'], reset($entities));
-    $array[] = $entity_id[0];
+    if ($endpoint['entity_type'] == $specific_entity_type) {
+      $array[] = entity_metadata_wrapper($endpoint['entity_type'], $endpoint['entity_id']);
+    }
   }
   return $array;
 }
