diff --git a/modules/crm_core_activity/src/ActivityViewsData.php b/modules/crm_core_activity/src/ActivityViewsData.php
new file mode 100644
index 0000000..1c99f9d
--- /dev/null
+++ b/modules/crm_core_activity/src/ActivityViewsData.php
@@ -0,0 +1,109 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\crm_core_activity\ActivityTypeListBuilder.
+ */
+
+namespace Drupal\crm_core_activity;
+
+use Drupal\views\EntityViewsData;
+
+/**
+ * Provides the views data for activity entity type..
+ */
+class ActivityViewsData extends EntityViewsData {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getViewsData() {
+    $data = parent::getViewsData();
+
+    $data['crm_core_activity']['table']['group'] = t('CRM Core Activity');
+
+    // View, Edit and Delete links of activity.
+    $data['crm_core_activity']['view_crm_activity'] = array(
+      'field' => array(
+        'title' => t('Link'),
+        'help' => t('Provide a simple link to the activity.'),
+      ),
+    );
+
+    $data['crm_core_activity']['edit_crm_activity'] = array(
+      'field' => array(
+        'title' => t('Edit link'),
+        'help' => t('Provide a simple link to edit the activity.'),
+      ),
+    );
+    $data['crm_core_activity']['delete_crm_activity'] = array(
+      'field' => array(
+        'title' => t('Delete link'),
+        'help' => t('Provide a simple link to delete the activity.'),
+      ),
+    );
+
+    // Expose the creator uid.
+    $data['crm_core_activity']['uid'] = array(
+      'title' => t('Author'),
+      'help' => t('Relate CRM Core Activities to the user who created it.'),
+      'field' => array(
+        'id' => 'numeric',
+        'click sortable' => TRUE,
+      ),
+      'argument' => array(
+        'id' => 'numeric',
+      ),
+      'filter' => array(
+        'id' => 'numeric',
+      ),
+      'sort' => array(
+        'id' => 'standard',
+      ),
+      'relationship' => array(
+        'id' => 'standard',
+        'label' => t('Author'),
+        'base' => 'users',
+        'base field' => 'uid',
+      ),
+    );
+
+    // Integration with Drupal search index.
+    $data['search_index']['table']['join']['crm_core_activity'] = array(
+      'left_field' => 'activity_id ',
+      'field' => 'sid',
+    );
+
+    $data['search_total']['table']['join']['crm_core_activity'] = array(
+      'left_table' => 'search_index',
+      'left_field' => 'word',
+      'field' => 'word',
+    );
+
+    $data['search_dataset']['table']['join']['crm_core_activity'] = array(
+      'left_table' => 'search_index',
+      'left_field' => 'sid',
+      'field' => 'sid',
+      'extra' => 'search_index.type = search_dataset.type',
+      'type' => 'INNER',
+    );
+
+    $data['crm_core_activity_type']['table']['join'] = array(
+      'crm_core_activity' => array(
+        'left_field' => 'type',
+        'field' => 'type',
+      ),
+    );
+
+    $data['crm_core_activity_type']['activity_string'] = array(
+      'field' => array(
+        'title' => t('Activity string'),
+        'help' => t('Text describing the relationship between the contact and this activity.'),
+        'id' => 'standard',
+      ),
+    );
+
+    return $data;
+  }
+
+}
diff --git a/modules/crm_core_activity/src/Entity/Activity.php b/modules/crm_core_activity/src/Entity/Activity.php
index 8a271a6..5ad896e 100644
--- a/modules/crm_core_activity/src/Entity/Activity.php
+++ b/modules/crm_core_activity/src/Entity/Activity.php
@@ -29,6 +29,7 @@ use Drupal\crm_core_contact\ContactInterface;
  *       "delete" = "Drupal\crm_core_activity\Form\ActivityDeleteForm",
  *     },
  *     "list_builder" = "Drupal\crm_core_activity\ActivityListBuilder",
+ *     "views_data" = "Drupal\crm_core_activity\ActivityViewsData",
  *     "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
  *   },
  *   base_table = "crm_core_activity",
diff --git a/modules/crm_core_activity/views/crm_core_activity.views.inc b/modules/crm_core_activity/views/crm_core_activity.views.inc
deleted file mode 100644
index 813714a..0000000
--- a/modules/crm_core_activity/views/crm_core_activity.views.inc
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-
-/**
- * @file
- * Creates views used by default for displaying activities with contact records.
- */
-
-/**
- * Implements hook_views_data_alter().
- */
-function crm_core_activity_views_data_alter(&$data) {
-  $data['crm_core_activity']['table']['group'] = t('CRM Core Activity');
-  $data['crm_core_activity_type']['type']['field']['handler'] = 'views_handler_field_activity_type';
-  $data['crm_core_activity']['type']['filter']['handler'] = 'views_handler_filter_activity_type';
-
-  // View, Edit and Delete links of activity.
-  $data['crm_core_activity']['view_crm_activity'] = array(
-    'field' => array(
-      'title' => t('Link'),
-      'help' => t('Provide a simple link to the activity.'),
-      'handler' => 'crm_core_activity_handler_field_link',
-    ),
-  );
-
-  $data['crm_core_activity']['edit_crm_activity'] = array(
-    'field' => array(
-      'title' => t('Edit link'),
-      'help' => t('Provide a simple link to edit the activity.'),
-      'handler' => 'crm_core_activity_handler_field_link_edit',
-    ),
-  );
-  $data['crm_core_activity']['delete_crm_activity'] = array(
-    'field' => array(
-      'title' => t('Delete link'),
-      'help' => t('Provide a simple link to delete the activity.'),
-      'handler' => 'crm_core_activity_handler_field_link_delete',
-    ),
-  );
-
-  // Expose the creator uid.
-  $data['crm_core_activity']['uid'] = array(
-    'title' => t('Author'),
-    'help' => t('Relate CRM Core Activities to the user who created it.'),
-    'field' => array(
-      'handler' => 'views_handler_field_numeric',
-      'click sortable' => TRUE,
-    ),
-    'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
-      'numeric' => TRUE,
-    ),
-    'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
-    ),
-    'sort' => array(
-      'handler' => 'views_handler_sort',
-    ),
-    'relationship' => array(
-      'label' => 'crm_core_activity author',
-      'title' => t('Author'),
-      'base' => 'users',
-      'base field' => 'uid',
-    ),
-  );
-
-  // Integration with Drupal search index.
-  $data['search_index']['table']['join']['crm_core_activity'] = array(
-    'left_field' => 'activity_id ',
-    'field' => 'sid',
-  );
-
-  $data['search_total']['table']['join']['crm_core_activity'] = array(
-    'left_table' => 'search_index',
-    'left_field' => 'word',
-    'field' => 'word',
-  );
-
-  $data['search_dataset']['table']['join']['crm_core_activity'] = array(
-    'left_table' => 'search_index',
-    'left_field' => 'sid',
-    'field' => 'sid',
-    'extra' => 'search_index.type = search_dataset.type',
-    'type' => 'INNER',
-  );
-
-  $data['crm_core_activity_type']['table']['join'] = array(
-    'crm_core_activity' => array(
-      'left_field' => 'type',
-      'field' => 'type',
-    ),
-  );
-
-  $data['crm_core_activity_type']['activity_string'] = array(
-    'field' => array(
-      'title' => t('Activity string'),
-      'help' => t('Text describing the relationship between the contact and this activity.'),
-      'handler' => 'views_handler_field',
-    ),
-  );
-}
diff --git a/modules/crm_core_activity/views/handlers/crm_core_activity_handler_field_links.inc b/modules/crm_core_activity/views/handlers/crm_core_activity_handler_field_links.inc
deleted file mode 100755
index 771f137..0000000
--- a/modules/crm_core_activity/views/handlers/crm_core_activity_handler_field_links.inc
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-
-/**
- * @file
- * Provides views handlers for View, Edit, Delete links.
- */
-
-class crm_core_activity_handler_field_link extends views_handler_field {
-  function construct() {
-    parent::construct();
-
-    $this->additional_fields['activity_id'] = 'activity_id';
-  }
-
-  function option_definition() {
-    $options = parent::option_definition();
-
-    $options['text'] = array('default' => '', 'translatable' => TRUE);
-
-    return $options;
-  }
-
-  function options_form(&$form, &$form_state) {
-    parent::options_form($form, $form_state);
-
-    $form['text'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Text to display'),
-      '#default_value' => $this->options['text'],
-    );
-  }
-
-  function query() {
-    $this->ensure_my_table();
-    $this->add_additional_fields();
-  }
-
-  function render($values) {
-    $text = !empty($this->options['text']) ? $this->options['text'] : t('view');
-    $activity_id = $this->get_value($values, 'activity_id');
-
-    return l($text, 'crm-core/activity/' . $activity_id);
-  }
-}
-
-class crm_core_activity_handler_field_link_edit extends crm_core_activity_handler_field_link {
-  function option_definition() {
-    $options = parent::option_definition();
-
-    $options['redirect'] = array('default' => FALSE);
-
-    return $options;
-  }
-
-  function options_form(&$form, &$form_state) {
-    parent::options_form($form, $form_state);
-
-    $form['redirect'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Redirect user'),
-      '#description' => t('Add "destination" key to the link so user will be redirected on the page where he clicked on the link'),
-      '#default_value' => $this->options['redirect'],
-    );
-  }
-
-  function render($values) {
-    $text = !empty($this->options['text']) ? $this->options['text'] : t('view');
-    $activity_id = $this->get_value($values, 'activity_id');
-
-    if ($this->options['redirect']) {
-      return l($text, 'crm-core/activity/' . $activity_id . '/edit', array('query' => array('destination' => $_GET['q'])));
-    }
-    else {
-      return l($text, 'crm-core/activity/' . $activity_id . '/edit');
-    }
-  }
-}
-
-class crm_core_activity_handler_field_link_delete extends crm_core_activity_handler_field_link_edit {
-  function render($values) {
-    $text = !empty($this->options['text']) ? $this->options['text'] : t('view');
-    $activity_id = $this->get_value($values, 'activity_id');
-
-    if ($this->options['redirect']) {
-      return l($text, 'crm-core/activity/' . $activity_id . '/delete', array('query' => array('destination' => $_GET['q'])));
-    }
-    else {
-      return l($text, 'crm-core/activity/' . $activity_id . '/delete');
-    }
-  }
-}
diff --git a/modules/crm_core_activity/views/handlers/views_handler_field_activity_type.inc b/modules/crm_core_activity/views/handlers/views_handler_field_activity_type.inc
deleted file mode 100644
index 79d6fdc..0000000
--- a/modules/crm_core_activity/views/handlers/views_handler_field_activity_type.inc
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-/**
- * @file
- * Views support.
- */
-
-/**
- * Provides a field handler for activity_type.
- *
- * Used in views that provide the ability to add an activity for a contact.
- *
- * The link is strucuted like so:
- * 'crm-core/contact/' . [node nid] . '/activity/add/' . [activity machine name]
- */
-class views_handler_field_activity_type extends views_handler_field {
-  function option_definition() {
-    $options = parent::option_definition();
-    $options['alter']['contains']['activity_create_link'] = array('default' => FALSE);
-    return $options;
-  }
-
-  function options_form(&$form, &$form_state) {
-    parent::options_form($form, $form_state);
-    $form['alter']['activity_create_link'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('New Activity create link'),
-      '#default_value' => $this->options['alter']['activity_create_link'],
-      '#description' => t('Show type as link to create Activity of this type.'),
-      '#weight' => -200,
-    );
-  }
-
-  function render_text($alter) {
-    if ($this->options['alter']['activity_create_link']) {
-      $value = $this->last_render;
-      if (isset($this->view->args[0])) {
-        return 'crm-core/contact/' . $this->view->args[0] . '/activity/add/' . $value;
-      }
-    }
-    return parent::render_text($alter);
-  }
-}
diff --git a/modules/crm_core_activity/views/handlers/views_handler_filter_activity_type.inc b/modules/crm_core_activity/views/handlers/views_handler_filter_activity_type.inc
deleted file mode 100644
index 7b44a9d..0000000
--- a/modules/crm_core_activity/views/handlers/views_handler_filter_activity_type.inc
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-use Drupal\crm_core_activity\Entity\ActivityType;
-
-/**
- * @file
- * Views support. Allows users to filter by activity type
- */
-
-class views_handler_filter_activity_type extends views_handler_filter_in_operator {
-  function get_value_options() {
-    if (!isset($this->value_options)) {
-      $this->value_title = t('Activity types');
-      $types = ActivityType::loadMultiple();
-      foreach ($types as $type => $info) {
-        $options[$type] = $info->label();
-      }
-      asort($options);
-      $this->value_options = $options;
-    }
-  }
-}
diff --git a/modules/crm_core_activity_ui/src/Tests/ActivityUiTest.php b/modules/crm_core_activity_ui/src/Tests/ActivityUiTest.php
index 3fe6b96..529a768 100644
--- a/modules/crm_core_activity_ui/src/Tests/ActivityUiTest.php
+++ b/modules/crm_core_activity_ui/src/Tests/ActivityUiTest.php
@@ -24,6 +24,7 @@ class ActivityUiTest extends WebTestBase {
    */
   public static $modules = array(
     'crm_core_activity_ui',
+    'crm_core_tests',
   );
 
   /**
@@ -95,12 +96,18 @@ class ActivityUiTest extends WebTestBase {
     // Update activity and assert its title changed on the list.
     $meeting_activity = array(
       'title[0][value]' => 'Vestibulum',
+      'activity_notes[0][value]' => 'Pellentesque egestas neque sit',
     );
     $this->drupalPostForm('crm-core/activity/1/edit', $meeting_activity, 'Save Activity');
     $this->assertText('Vestibulum', 'Activity updated.');
     $this->drupalGet('crm-core/activity');
     $this->assertLink('Vestibulum', 0, 'Updated activity listed properly.');
 
+    // Get test view page and check fields data.
+    $this->drupalGet('activity-view-data');
+    $this->assertText('Vestibulum');
+    $this->assertText('Pellentesque egestas neque sit');
+
     // Test that empty activity_participants field is not allowed.
     $empty_participant = array(
       'activity_participants[0][target_id]' => '',
diff --git a/tests/modules/crm_core_tests/config/install/views.view.activity_view_data.yml b/tests/modules/crm_core_tests/config/install/views.view.activity_view_data.yml
new file mode 100644
index 0000000..095a959
--- /dev/null
+++ b/tests/modules/crm_core_tests/config/install/views.view.activity_view_data.yml
@@ -0,0 +1,181 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - crm_core_activity.type.meeting
+  module:
+    - crm_core_activity
+    - text
+id: activity_view_data
+label: 'Activity View Data'
+module: views
+description: ''
+tag: ''
+base_table: crm_core_activity
+base_field: activity_id
+core: 8.x
+display:
+  default:
+    display_plugin: default
+    id: default
+    display_title: Master
+    position: 0
+    display_options:
+      access:
+        type: none
+        options: {  }
+      cache:
+        type: tag
+        options: {  }
+      query:
+        type: views_query
+        options:
+          disable_sql_rewrite: false
+          distinct: false
+          replica: false
+          query_comment: ''
+          query_tags: {  }
+      exposed_form:
+        type: basic
+        options:
+          submit_button: Apply
+          reset_button: false
+          reset_button_label: Reset
+          exposed_sorts_label: 'Sort by'
+          expose_sort_order: true
+          sort_asc_label: Asc
+          sort_desc_label: Desc
+      pager:
+        type: mini
+        options:
+          items_per_page: 10
+          offset: 0
+          id: 0
+          total_pages: null
+          expose:
+            items_per_page: false
+            items_per_page_label: 'Items per page'
+            items_per_page_options: '5, 10, 25, 50'
+            items_per_page_options_all: false
+            items_per_page_options_all_label: '- All -'
+            offset: false
+            offset_label: Offset
+          tags:
+            previous: ‹‹
+            next: ››
+      style:
+        type: table
+      row:
+        type: fields
+      fields:
+        title:
+          table: crm_core_activity
+          field: title
+          id: title
+          entity_type: null
+          entity_field: title
+          plugin_id: field
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: Title
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          click_sort_column: value
+          type: string
+          settings: {  }
+          group_column: value
+          group_columns: {  }
+          group_rows: true
+          delta_limit: 0
+          delta_offset: 0
+          delta_reversed: false
+          delta_first_last: false
+          multi_type: separator
+          separator: ', '
+          field_api_classes: false
+        activity_notes__value:
+          id: activity_notes__value
+          table: crm_core_activity
+          field: activity_notes__value
+          entity_type: crm_core_activity
+          entity_field: activity_notes
+          plugin_id: field
+      filters:
+        type:
+          id: type
+          table: crm_core_activity
+          field: type
+          value:
+            meeting: meeting
+          entity_type: crm_core_activity
+          entity_field: type
+          plugin_id: bundle
+      sorts: {  }
+      title: 'Activity View Data'
+      header: {  }
+      footer: {  }
+      empty: {  }
+      relationships: {  }
+      arguments: {  }
+      display_extenders: {  }
+    cache_metadata:
+      max-age: 0
+      contexts:
+        - 'languages:language_content'
+        - 'languages:language_interface'
+        - url.query_args
+      tags: {  }
+  page_1:
+    display_plugin: page
+    id: page_1
+    display_title: Page
+    position: 1
+    display_options:
+      display_extenders: {  }
+      path: activity-view-data
+    cache_metadata:
+      max-age: 0
+      contexts:
+        - 'languages:language_content'
+        - 'languages:language_interface'
+        - url.query_args
+      tags: {  }
diff --git a/tests/modules/crm_core_tests/crm_core_tests.info.yml b/tests/modules/crm_core_tests/crm_core_tests.info.yml
new file mode 100644
index 0000000..b9fb692
--- /dev/null
+++ b/tests/modules/crm_core_tests/crm_core_tests.info.yml
@@ -0,0 +1,9 @@
+name: 'CRM core tests'
+type: module
+description: 'Provides default views for views data tests.'
+package: Testing
+version: VERSION
+core: 8.x
+dependencies:
+  - views
+  - crm_core
