diff --git a/css/views-admin.theme.css b/css/views-admin.theme.css
index 49dd805..be85d6a 100644
--- a/css/views-admin.theme.css
+++ b/css/views-admin.theme.css
@@ -235,6 +235,10 @@ input.form-radio {
   font-weight: bold;
 }
 
+tr.views-ui-list-disabled td {
+  color: #999;
+}
+
 /* @end */
 
 /* @group Messages */
diff --git a/lib/Drupal/views/Plugin/config/listing/ViewListing.php b/lib/Drupal/views/Plugin/config/listing/ViewListing.php
new file mode 100644
index 0000000..5c7ec4f
--- /dev/null
+++ b/lib/Drupal/views/Plugin/config/listing/ViewListing.php
@@ -0,0 +1,140 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\config\listing\ViewListing;
+ */
+
+namespace Drupal\views\Plugin\config\listing;
+
+use Drupal\config\Plugin\ConfigEntityListingBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\entity\EntityInterface;
+
+/**
+ * Provides a listing of Views.
+ *
+ * @Plugin(
+ *   id = "view",
+ *   entity_type = "view",
+ *   path = "admin/structure/views",
+ *   page_title = @Translation("Views"),
+ *   page_description = @Translation("Manage customized lists of content.")
+ * )
+ */
+class ViewListing extends ConfigEntityListingBase {
+
+  /**
+   * Overrides Drupal\config\Plugin\ConfigEntityListingBase::hookMenu();
+   */
+  public function hookMenu() {
+    $definition = $this->definition;
+
+    $item = parent::hookMenu();
+    // Override the access callback.
+    // @todo Probably wont need to specify user access.
+    $item[$definition['path']]['access callback'] = 'user_access';
+    $item[$definition['path']]['access arguments'] = array('administer views');
+    return $items;
+  }
+
+  /**
+   * Overrides Drupal\config\Plugin\ConfigEntityListingBase::getRowData();
+   */
+  public function getRowData(EntityInterface $entity) {
+    $operations = $this->buildActionLinks($entity);
+    $operations['#theme'] = 'links__ctools_dropbutton';
+    return array(
+      'data' => array(
+        'view_name' => theme('views_ui_view_info', array('view' => $entity)),
+        'description' => $entity->description,
+        'tag' => $entity->tag,
+        'path' => implode(', ', _views_ui_get_paths($entity)),
+        'operations' => drupal_render($operations),
+      ),
+      'title' => t('Machine name: ') . $entity->id(),
+      'class' => array($entity->isEnabled() ? 'views-ui-list-enabled' : 'views-ui-list-disabled'),
+    );
+  }
+
+  /**
+   * Overrides Drupal\config\Plugin\ConfigEntityListingBase::getRowData();
+   */
+  public function getHeaderData() {
+    return array(
+      'view_name' => array(
+        'data' => t('View name'),
+        'class' => array('views-ui-name'),
+      ),
+      'description' => array(
+        'data' => t('Description'),
+        'class' => array('views-ui-description'),
+      ),
+      'tag' => array(
+        'data' => t('Tag'),
+        'class' => array('views-ui-tag'),
+      ),
+      'path' => array(
+        'data' => t('Path'),
+        'class' => array('views-ui-path'),
+      ),
+      'actions' => array(
+        'data' => t('Operations'),
+        'class' => array('views-ui-operations'),
+      ),
+    );
+  }
+
+  /**
+   * Implements Drupal\config\Plugin\ConfigEntityListingInterface::defineActionLinks();
+   */
+  public function defineActionLinks(EntityInterface $entity) {
+    $path = $this->definition['path'] . '/view/' . $entity->id();
+
+    $definition['edit'] = array(
+      'title' => t('Edit'),
+      'href' => "$path/edit",
+    );
+    if ($entity->isEnabled()) {
+      $definition['disable'] = array(
+        'title' => t('Disable'),
+        'ajax' => TRUE,
+        'token' => TRUE,
+        'href' => "$path/disable",
+      );
+    }
+    else {
+      $definition['enable'] = array(
+        'title' => t('Enable'),
+        'ajax' => TRUE,
+        'token' => TRUE,
+        'href' => "$path/enable",
+      );
+    }
+    // This property doesn't exist yet.
+    if (!empty($entity->overridden)) {
+      $definition['revert'] = array(
+        'title' => t('Revert'),
+        'href' => "$path/revert",
+      );
+    }
+    else {
+      $definition['delete'] = array(
+        'title' => t('Delete'),
+        'href' => "$path/delete",
+      );
+    }
+    return $definition;
+  }
+
+  /**
+   * Overrides Drupal\config\Plugin\ConfigEntityListingBase::renderList();
+   */
+  public function renderList() {
+    $list = parent::renderList();
+    $list['#attached']['css'] = views_ui_get_admin_css();
+    return $list;
+  }
+
+}
diff --git a/lib/Drupal/views/ViewStorageController.php b/lib/Drupal/views/ViewStorageController.php
index 2bdb3a8..8c9a61b 100644
--- a/lib/Drupal/views/ViewStorageController.php
+++ b/lib/Drupal/views/ViewStorageController.php
@@ -36,8 +36,6 @@ class ViewStorageController extends ConfigStorageController {
         }
         $entity->{$this->uuidKey} = $this->uuidFactory->generate();
       }
-      // @todo This property is left in for CTools export UI.
-      $entity->type = t('Normal');
       $this->attachDisplays($entity);
     }
   }
diff --git a/views.install b/views.install
index 9f5355e..4a8dc9a 100644
--- a/views.install
+++ b/views.install
@@ -20,29 +20,12 @@ function views_install() {
 function views_schema() {
   $schema['views_view'] = array(
     'description' => 'Stores the general data for a view.',
-    'export' => array(
-      'identifier' => 'view',
-      'bulk export' => TRUE,
-      'primary key' => 'vid',
-      'admin_title' => 'human_name',
-      'admin_description' => 'description',
-      'object' => 'Drupal\views\View',
-      'load all callback' => 'views_get_all_views',
-      'load callback' => 'views_storage_load',
-      'save callback' => 'views_storage_save',
-      'status callback' => 'views_storage_status',
-      // CRUD callbacks
-      'create callback' => 'views_new_view',
-      'save callback' => 'views_save_view',
-      'delete callback' => 'views_delete_view',
-    ),
     'fields' => array(
       'vid' => array(
         'type' => 'serial',
         'unsigned' => TRUE,
         'not null' => TRUE,
         'description' => 'The view ID of the field, defined by the database.',
-        'no export' => TRUE,
       ),
       'name' => array(
         'type' => 'varchar',
@@ -95,7 +78,6 @@ function views_schema() {
         'not null' => TRUE,
         'default' => 0,
         'description' => 'The view this display is attached to.',
-        'no export' => TRUE,
       ),
       'id' => array(
         'type' => 'varchar',
diff --git a/views.module b/views.module
index 77ef90c..6bf5968 100644
--- a/views.module
+++ b/views.module
@@ -1097,7 +1097,6 @@ function views_check_perm($perm, $account = NULL) {
 
 /**
  * Access callback for the views_plugin_access_role access plugin.
-
  * Determine if the specified user has access to a view on the basis of any of
  * the requested roles. If the $account argument is omitted, the current user
  * is used.
diff --git a/views_ui.module b/views_ui.module
index f502e95..4f0117b 100644
--- a/views_ui.module
+++ b/views_ui.module
@@ -349,19 +349,6 @@ function views_ui_cache_set(&$view) {
 }
 
 /**
- * Specialized menu callback to load a view that is only a default
- * view.
- */
-function views_ui_default_load($name) {
-  $view = views_get_view($name);
-  if ($view->type == t('Default')) {
-    return $view;
-  }
-
-  return FALSE;
-}
-
-/**
  * Theme preprocess for views-view.tpl.php.
  */
 function views_ui_preprocess_views_view(&$vars) {
@@ -532,17 +519,6 @@ function views_ui_view_preview_section_rows_links($view) {
 }
 
 /**
- * Implments hook_ctools_plugin_directory().
- *
- * Views UI provides wizard plugins on behalf of core base tables.
- */
-function views_ui_ctools_plugin_directory($module, $plugin) {
-  if ($module == 'views_ui' || ($module == 'ctools' && $plugin == 'export_ui')) {
-    return 'plugins/' . $plugin;
-  }
-}
-
-/**
  * Fetch metadata on a specific views ui wizard plugin.
  *
  * @param $wizard_type
@@ -790,6 +766,7 @@ function _views_ui_get_paths($view) {
  */
 function _views_ui_get_displays_list($view) {
   $displays = array();
+  $view->initDisplay();
   foreach ($view->display as $display) {
     if (!empty($display->handler->definition['admin'])) {
       $displays[$display->handler->definition['admin']] = TRUE;
