diff --git a/draggableviews.module b/draggableviews.module
index 7859a73..b3cdc3b 100644
--- a/draggableviews.module
+++ b/draggableviews.module
@@ -11,9 +11,14 @@ use Drupal\Core\Database\Database;
 use Drupal\Core\Cache\Cache;
 
 /**
- * Implements hook_views_data_alter().
+ * Implements hook_views_data().
  */
-function draggableviews_views_data_alter(&$data) {
+function draggableviews_views_data() {
+  $data = [];
+  $data['draggableviews_structure'] = [];
+  $data['draggableviews_structure']['table'] = [];
+  $data['draggableviews_structure']['table']['group'] = t('Draggableviews');
+
   $data['draggableviews_structure']['weight'] = [
     'title' => t('DraggableViews Weight'),
     'group' => t('Global'),
@@ -41,29 +46,40 @@ function draggableviews_views_data_alter(&$data) {
       'id' => 'numeric',
     ],
   ];
+  return $data;
+}
 
+/**
+ * Implements hook_views_data_alter().
+ */
+function draggableviews_views_data_alter(&$data) {
   foreach (\Drupal::entityTypeManager()->getDefinitions() as $entity_type) {
     $base_table = $entity_type->getDataTable() ?: $entity_type->getBaseTable();
     $entity_keys = $entity_type->getKeys();
+    $args = ['@label' => $entity_type->getLabel()];
+
     if ($base_table && isset($data[$base_table]['table'])) {
       $data[$base_table]['draggableviews'] = [
         'title' => $data[$base_table]['table']['group'],
         'group' => t('Draggableviews'),
+        'label' => t('Draggableviews'),
         'help' => t('Provide a draggable functionality.'),
         'entity field' => $entity_keys['id'],
         'field' => [
           'id' => 'draggable_views_field',
           'click sortable' => FALSE,
         ],
-      ];
-      // Explain to every entity how to join with draggableviews_structure
-      // table.
-      $data['draggableviews_structure']['table']['join'][$base_table] = [
-        'handler' => 'draggableviews_join_handler',
-        // Because this is a direct link it could be left out.
-        'left_table' => $base_table,
-        'left_field' => $entity_keys['id'],
-        'field' => 'entity_id',
+        'relationship' => [
+          'title' => t('Draggableviews information related to @label', $args),
+          'label' => t('Draggableviews: @label', $args),
+          'group' => $entity_type->getLabel(),
+          'help' => t('Allows you to set different sorting for @label', $args),
+          'id' => 'draggableviews',
+          'base' => 'draggableviews_structure',
+          'entity type' => $entity_type->id(),
+          'base field' => 'entity_id',
+          'relationship field' => $entity_type->getKey('id'),
+        ],
       ];
     }
   }
diff --git a/modules/draggableviews_demo/config/install/views.view.draggableviews_demo.yml b/modules/draggableviews_demo/config/install/views.view.draggableviews_demo.yml
index 4bb7c4d..c8f2c4a 100644
--- a/modules/draggableviews_demo/config/install/views.view.draggableviews_demo.yml
+++ b/modules/draggableviews_demo/config/install/views.view.draggableviews_demo.yml
@@ -290,7 +290,7 @@ display:
           id: weight
           table: draggableviews_structure
           field: weight
-          relationship: none
+          relationship: draggableviews
           group_type: group
           admin_label: ''
           order: ASC
@@ -317,7 +317,19 @@ display:
       header: {  }
       footer: {  }
       empty: {  }
-      relationships: {  }
+      relationships:
+        draggableviews:
+          id: draggableviews
+          table: node_field_data
+          field: draggableviews
+          relationship: none
+          group_type: group
+          admin_label: 'Draggableviews: Content'
+          required: false
+          source: draggableviews_demo|draggableviews_demo_order
+          entity_type: node
+          entity_field: nid
+          plugin_id: draggableviews
       arguments: {  }
       display_extenders: {  }
     cache_metadata:
