diff --git a/views/relation.views.inc b/views/relation.views.inc
index cf2d1c1..92f77a7 100644
--- a/views/relation.views.inc
+++ b/views/relation.views.inc
@@ -68,6 +68,24 @@ function relation_views_data_alter(&$data) {
           'join_handler' => 'relation_handler_base_join',
         ),
       );
+      // @todo: Shouldn't @left be named as @right to avoid confusion?
+      $data['relation']['relation_base_' . $type . '_' . $base_table_left] = array(
+        'title' => t('Relation: @relation_type_label (relation <-> @left)', $t_arguments),
+        'help' => t('Provides a relationship from the relation table to @left via the relation @relation_type_label', $t_arguments),
+        'relationship' => array(
+          // relation_handler_relationship::options_form() relies on this check_plain().
+          'label' => check_plain($relation_type->label),
+          'base' => $base_table_left,
+          'base field' => $relationship_field,
+          'relationship field' => 'rid',
+          'handler' => 'views_handler_relationship',
+          'relation_type' => $type,
+          'entity_type_left' => 'relation',
+          'entity_type_right' => $entity_type_left,
+          'directional' => $relation_type->directional,
+          'join_handler' => 'relation_handler_base_reverse_join',
+        ),
+      );
       foreach ($relation_type->$target_index as $target_bundle) {
         $target_bundle = explode(':', $target_bundle, 2);
         $entity_type_right = $target_bundle[0];
diff --git a/views/relation_handler_relationship.inc b/views/relation_handler_relationship.inc
index 69b5643..74e67e0 100644
--- a/views/relation_handler_relationship.inc
+++ b/views/relation_handler_relationship.inc
@@ -103,3 +103,27 @@ class relation_handler_base_join extends views_join {
     $select_query->addJoin($this->type, 'relation', $table['alias'], $conditions);
   }
 }
+
+class relation_handler_base_reverse_join extends views_join {
+  /**
+   * Build the SQL for the join this objects represents.
+   */
+  function build_join($select_query, $table, $view_query) {
+    $field = field_info_field('endpoints');
+    $relation_data_table_name = _field_sql_storage_tablename($field);
+    $entity_id_field_name = _field_sql_storage_columnname('endpoints', 'entity_id');
+    $entity_type_field_name = _field_sql_storage_columnname('endpoints', 'entity_type');
+    $r_index_field_name = _field_sql_storage_columnname('endpoints', 'r_index');
+    // Join the left table with the entity type to the relation table.
+    $left = $view_query->get_table_info($this->left_table);
+    $entity_type_left = $this->definition['entity_type_left'];
+    $conditions = "$left[alias].$this->left_field = %alias.$entity_id_field_name AND %alias.$entity_type_field_name = '$entity_type_left'";
+    // Left join alias.
+    $l = $select_query->addJoin($this->type, $relation_data_table_name, NULL, $conditions);
+    // Execute a self-join.
+    // entity_id here is the ID of the relation entity.
+    $relation_type = $this->definition['relation_type'];
+    $conditions = "%alias.rid = $l.entity_id AND %alias.relation_type = '$relation_type'";
+    $select_query->addJoin($this->type, 'relation', $table['alias'], $conditions);
+  }
+}
