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..021f61e
--- /dev/null
+++ b/lib/Drupal/views/Plugin/config/listing/ViewListing.php
@@ -0,0 +1,73 @@
+<?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")
+ * )
+ */
+class ViewListing extends ConfigEntityListingBase {
+
+  /**
+   * Implements Drupal\config\Plugin\ConfigEntityListingInterface::actionLinkMappings();
+   */
+  public function actionLinkMappings(EntityInterface $entity) {
+    $path = $this->definition['path'] . '/view/' . $entity->id();
+
+    $mappings['edit'] = array(
+      'title' => t('Edit'),
+      'path' => "$path/edit",
+    );
+    if ($entity->isEnabled()) {
+      $mappings['disable'] = array(
+        'title' => t('Disable'),
+        'ajax' => TRUE,
+        'token' => TRUE,
+        'path' => "$path/disable",
+      );
+    }
+    else {
+      $mappings['enable'] = array(
+        'title' => t('Enable'),
+        'ajax' => TRUE,
+        'token' => TRUE,
+        'path' => "$path/enable",
+      );
+    }
+    // This property doesn't exist yet.
+    if (!empty($entity->overridden)) {
+      $mappings['revert'] = array(
+        'title' => t('Revert'),
+        'path' => "$path/revert",
+      );
+    }
+    else {
+      $mappings['delete'] = array(
+        'title' => t('Delete'),
+        'path' => "$path/delete",
+      );
+    }
+    $mappings['clone'] = array(
+      'title' => t('Clone'),
+      'path' => "$path/clone",
+    );
+    return $mappings;
+  }
+
+}
