diff --git a/src/Plugin/views/access/ViewsAccessCallback.php b/src/Plugin/views/access/ViewsAccessCallback.php
new file mode 100644
index 0000000..c1312ac
--- /dev/null
+++ b/src/Plugin/views/access/ViewsAccessCallback.php
@@ -0,0 +1,117 @@
+<?php
+
+namespace Drupal\views_access_callback\Plugin\views\access;
+
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\Component\Utility\Html;
+use Drupal\views\Plugin\views\access\AccessPluginBase;
+use Drupal\user\PermissionHandlerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\Routing\Route;
+
+/**
+ * Access plugin that provides permission-based access control.
+ *
+ * @ingroup views_access_plugins
+ *
+ * @ViewsAccess(
+ *   id = "views_access_callback",
+ *   title = @Translation("Callback function"),
+ *   help = @Translation("Access will be granted to users based on result returned by callback function.")
+ * )
+ */
+class ViewsAccessCallback extends AccessPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $usesOptions = TRUE;
+
+  /**
+   * The module handler.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * Constructs a Permission 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.
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, ModuleHandlerInterface $module_handler) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->moduleHandler = $module_handler;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('module_handler')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function access(AccountInterface $account) {
+    return views_access_callback_access_callback($this->view->storage->id(), $this->view->current_display, $this->options['views_access_callback']);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function alterRouteDefinition(Route $route) {
+    $bool = (views_access_callback_access_callback($this->view->storage->id(), $this->view->current_display, $this->options['views_access_callback'])) ? 'TRUE' : 'FALSE';
+    $route->setRequirement('_access', $bool);
+  }
+
+  public function summaryTitle() {
+    return $this->t('Callback function') . ': ' . $this->options['views_access_callback'];
+  }
+
+
+  protected function defineOptions() {
+    $options = parent::defineOptions();
+    $options['views_access_callback'] = array('default' => 'TRUE');
+    return $options;
+  }
+
+  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
+    parent::buildOptionsForm($form, $form_state);
+    $callbacks = array();
+    $module_info = system_get_info('module');
+    
+    foreach ($this->moduleHandler->getImplementations('views_access_callbacks') as $module) {
+      $functions = $this->moduleHandler->invoke($module, 'views_access_callbacks');
+      foreach ($functions as $function => $name) {
+        $callbacks[$module_info[$module]['name']][$function] = Html::escape($name);
+      }
+    }
+    
+    ksort($callbacks);
+    
+    $form['views_access_callback'] = array(
+      '#type' => 'select',
+      '#options' => $callbacks,
+      '#title' => $this->t('Callbacks'),
+      '#default_value' => $this->options['views_access_callback'],
+      '#description' => $this->t('Only users for which selected callback function returns TRUE will be able to access this display.'),
+    );
+
+  }
+}
diff --git a/views_access_callback.info b/views_access_callback.info
deleted file mode 100644
index 4269793..0000000
--- a/views_access_callback.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Views Access Callback
-description = "Provides callback-based access control for Views."
-core = 7.x
-dependencies[] = views
-package = Views
-
-files[] = views_access_callback_plugin_access_callback.inc
diff --git a/views_access_callback.info.yml b/views_access_callback.info.yml
new file mode 100644
index 0000000..0d55ec5
--- /dev/null
+++ b/views_access_callback.info.yml
@@ -0,0 +1,7 @@
+name: 'Views Access Callback'
+type: module
+description: "Provides callback-based access control for Views."
+core: 8.x
+dependencies: 
+  - views
+package: Views
\ No newline at end of file
diff --git a/views_access_callback.module b/views_access_callback.module
index 27448e1..303679b 100644
--- a/views_access_callback.module
+++ b/views_access_callback.module
@@ -3,29 +3,21 @@
  * @file
  */
 
-/**
- * Implements hook_views_api().
- */
-function views_access_callback_views_api() {
-  return array(
-    'api' => 3,
-  );
-}
+use Drupal\views\Views;
 
 /**
  * Intermediary access callback function getting view arguments
  * and calling real function specified in view definition.
  */
 function views_access_callback_access_callback($view_name, $display_id, $access_callback) {
-
   // Init view.
-  $view = views_get_view($view_name);
-  $view->set_display($display_id);
-  $view->init_handlers();
+  $view = Views::getView($view_name);
+  $view->setDisplay($display_id);
+  $view->initHandlers();
 
   // Find the values for any arguments embedded in the path via '%'.
   $i = 0;
-  foreach (explode('/', $view->display_handler->get_option('path')) as $element) {
+  foreach (explode('/', $view->display_handler->getOption('path')) as $element) {
     if ($element == '%') {
       $view->args[] = arg($i);
     }
diff --git a/views_access_callback.views.inc b/views_access_callback.views.inc
deleted file mode 100644
index fc65031..0000000
--- a/views_access_callback.views.inc
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/**
- * Implementation of hook_views_plugins().
- */
-function views_access_callback_views_plugins() {
-  return array(
-    'access' => array(
-      'parent' => array(
-        'no ui' => TRUE,
-        'handler' => 'views_plugin_access',
-        'parent' => '',
-      ),
-      'views_access_callback' => array(
-        'title' => t('Callback function'),
-        'help' => t('Access will be granted to users based on result returned by callback function.'),
-        'handler' => 'views_access_callback_plugin_access_callback',
-        'uses options' => TRUE,
-        'path' => drupal_get_path('module', 'views_access_callback'),
-      ),
-    ),
-  );
-}
diff --git a/views_access_callback_plugin_access_callback.inc b/views_access_callback_plugin_access_callback.inc
deleted file mode 100644
index b9aef7f..0000000
--- a/views_access_callback_plugin_access_callback.inc
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-/**
- * Access plugin that provides callback-function-based access control.
- */
-class views_access_callback_plugin_access_callback extends views_plugin_access {
-
-  function access($account) {
-    return views_access_callback_access_callback($this->view->name, $this->display->id, $this->options['views_access_callback']);
-  }
-
-  function get_access_callback() {
-    return array('views_access_callback_access_callback', array($this->view->name, $this->display->id, $this->options['views_access_callback']));
-  }
-
-  function summary_title() {
-    return t('Callback function') . ': ' . $this->options['views_access_callback'];
-  }
-
-  function option_definition() {
-    $options = parent::option_definition();
-    $options['views_access_callback'] = array('default' => 'TRUE');
-
-    return $options;
-  }
-
-
-  function options_form(&$form, &$form_state) {
-    parent::options_form($form, $form_state);
-    $callbacks = array();
-    $module_info = system_get_info('module');
-
-    // Get list of permissions
-    foreach (module_implements('views_access_callbacks') as $module) {
-      $functions = module_invoke($module, 'views_access_callbacks');
-      foreach ($functions as $function => $name) {
-        $callbacks[$module_info[$module]['name']][$function] = check_plain($name);
-      }
-    }
-
-    ksort($callbacks);
-
-    $form['views_access_callback'] = array(
-      '#type' => 'select',
-      '#options' => $callbacks,
-      '#title' => t('Callbacks'),
-      '#default_value' => $this->options['views_access_callback'],
-      '#description' => t('Only users for which selected callback function returns TRUE will be able to access this display.'),
-    );
-  }
-}
