diff --git a/profile.module b/profile.module
index b37f967..3e77cbc 100644
--- a/profile.module
+++ b/profile.module
@@ -351,6 +351,16 @@ function profile_views_data_alter(&$data) {
     'base field' => 'uid',
     'field' => 'uid',
   ];
+  $data['users_field_data']['profile_type']['relationship'] = [
+    'title' => t('Profile Type'),
+    'label' => t('Profile Type'),
+    'group' => 'User',
+    'help' => t('Reference to a specific profile type of a user.'),
+    'id' => 'profile_relationship',
+    'base' => 'profile',
+    'base field' => 'uid',
+    'field' => 'uid',
+  ];
 }
 
 /**
diff --git a/src/Plugin/views/relationship/ProfileViewsRelationship.php b/src/Plugin/views/relationship/ProfileViewsRelationship.php
new file mode 100644
index 0000000..fd28eee
--- /dev/null
+++ b/src/Plugin/views/relationship/ProfileViewsRelationship.php
@@ -0,0 +1,97 @@
+<?php
+
+namespace Drupal\profile\Plugin\views\relationship;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\profile\Entity\ProfileType;
+use Drupal\views\Plugin\views\relationship\RelationshipPluginBase;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides a views relationship to select profile content by a profile_type.
+ *
+ * @ViewsRelationship("profile_relationship")
+ */
+class ProfileViewsRelationship extends RelationshipPluginBase {
+
+  /**
+   * Constructs a ProfileViewsRelationship object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->definition = $plugin_definition + $configuration;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static($configuration, $plugin_id, $plugin_definition);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defineOptions() {
+    $options = parent::defineOptions();
+    $options['profile_type'] = ['default' => NULL];
+    $options['required'] = ['default' => 1];
+    return $options;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
+    parent::buildOptionsForm($form, $form_state);
+
+    $form['admin_label']['#description'] = $this->t('The name of the selected profile type makes a good label.');
+
+    $form['profile_type'] = [
+      '#type' => 'radios',
+      '#title' => $this->t('Profile Type'),
+      '#default_value' => $this->options['profile_type'],
+      '#required' => TRUE,
+    ];
+
+    foreach (ProfileType::loadMultiple() as $profile_id => $profile_type) {
+      $form['profile_type']['#options'][$profile_id] = $profile_type->label();
+    }
+
+    $form['required']['#description'] .= '<div class="color-warning"><strong>' . $this->t('You must require this relationship to use the Rendered Entity field type for this relationship') . '</strong></div>';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    $this->ensureMyTable();
+
+    $join_definition = array(
+      'table' => 'profile',
+      'field' => 'uid',
+      'left_table' => $this->tableAlias,
+      'left_field' => 'uid',
+      'type' => empty($this->options['required']) ? 'LEFT' : 'INNER',
+      'adjusted' => TRUE,
+      'extra' => [
+        [
+          'field' => 'type',
+          'value' => $this->options['profile_type']
+        ],
+      ],
+    );
+
+    $join = \Drupal::service('plugin.manager.views.join')->createInstance('standard', $join_definition);
+    $alias = $join_definition['table'] . '_' . $this->table;
+    $this->alias = $this->query->addRelationship($alias, $join, 'taxonomy_term_field_data', $this->relationship);
+  }
+
+}
