diff --git a/core/modules/views/config/views.settings.yml b/core/modules/views/config/views.settings.yml
index 4b9c81c..7db8dc2 100644
--- a/core/modules/views/config/views.settings.yml
+++ b/core/modules/views/config/views.settings.yml
@@ -2,6 +2,7 @@ debug:
   output: '0'
   region: 'footer'
 display_extenders: { }
+fieldable: '0'
 no_javascript: '0'
 skip_cache: '0'
 sql_signature: '0'
diff --git a/core/modules/views/lib/Drupal/views/ViewStorageController.php b/core/modules/views/lib/Drupal/views/ViewStorageController.php
index 05268d2..dc55042 100644
--- a/core/modules/views/lib/Drupal/views/ViewStorageController.php
+++ b/core/modules/views/lib/Drupal/views/ViewStorageController.php
@@ -124,4 +124,12 @@ protected function getProperties(EntityInterface $entity) {
     return $properties;
   }
 
+  /**
+   * Overrides Drupal\config\ConfigStorageController::getQueryServicename();
+   */
+  public function getQueryServicename() {
+    // @todo This is a hack. Fix field_has_data().
+    return 'entity.query.field_sql_storage';
+  }
+
 }
diff --git a/core/modules/views/views.install b/core/modules/views/views.install
index 5d63efa..ab1d9b1 100644
--- a/core/modules/views/views.install
+++ b/core/modules/views/views.install
@@ -24,6 +24,24 @@ function views_schema() {
   $schema['cache_views_results']['description'] = 'Cache table for views to store pre-rendered queries, results, and display output.';
   $schema['cache_views_results']['fields']['serialized']['default'] = 1;
 
+  // @todo This is a hack. Fix field_has_data().
+  $schema['views_view'] = array(
+    'description' => 'Stores views data.',
+    'fields' => array(
+      'name' => array(
+        'type' => 'varchar',
+        'length' => 60,
+        'not null' => TRUE,
+        'default' => '',
+        'description' => 'Unique view name.',
+      ),
+    ),
+    'unique keys' => array(
+      'name' => array('name'),
+    ),
+    'primary key' => array('name'),
+  );
+
   return $schema;
 }
 
diff --git a/core/modules/views/views.module b/core/modules/views/views.module
index 3234b7e..ec8dcf7 100644
--- a/core/modules/views/views.module
+++ b/core/modules/views/views.module
@@ -569,6 +569,40 @@ function views_page($name, $display_id) {
 }
 
 /**
+ * Implements hook_entity_info_alter().
+ */
+function views_entity_info_alter(&$info) {
+  if (config('views.settings')->get('fieldable')) {
+    $info['view']['fieldable'] = TRUE;
+    $info['view']['base_table'] = 'views_view';
+    $info['view']['bundles']['view'] = array(
+      'label' => t('View'),
+      'admin' => array(
+        'path' => 'admin/structure/views',
+        'access arguments' => array('administer views'),
+      ),
+    );
+  }
+}
+
+/**
+ * Implements hook_field_extra_fields().
+ */
+function views_field_extra_fields() {
+  $extra['view']['view'] = array(
+    'form' => array(
+      'view' => array(
+        'label' => t('Edit form'),
+        'description' => t('Views UI edit form'),
+        'weight' => 0,
+      ),
+    ),
+  );
+
+  return $extra;
+}
+
+/**
  * Implements hook_page_alter().
  */
 function views_page_alter(&$page) {
diff --git a/core/modules/views/views_ui/admin.inc b/core/modules/views/views_ui/admin.inc
index 5b0ae41..eef5090 100644
--- a/core/modules/views/views_ui/admin.inc
+++ b/core/modules/views/views_ui/admin.inc
@@ -1824,6 +1824,12 @@ function views_ui_admin_settings_basic($form, &$form_state) {
     '#default_value' => $config->get('ui.show.listing_filters'),
   );
 
+  $form['basic']['fieldable'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Allow Views to be fieldable'),
+    '#description' => t('YES YOU CAN PUT FIELDS ON VIEWS. OMGWTFBBQ.'),
+    '#default_value' => $config->get('fieldable'),
+  );
   $form['basic']['ui_show_master_display'] = array(
     '#type' => 'checkbox',
     '#title' => t('Always show the master display'),
@@ -1922,8 +1928,17 @@ function views_ui_admin_settings_basic($form, &$form_state) {
  * @see system_settings_form()
  */
 function views_ui_admin_settings_basic_submit(&$form, &$form_state) {
-  config('views.settings')
+  $config = config('views.settings');
+
+  // If the fieldable setting has changed, reset the entity info cache.
+  if ($form_state['values']['ui_show_listing_filters'] != $config->get('fieldable')) {
+    entity_info_cache_clear();
+    state()->set('menu_rebuild_needed', TRUE);
+  }
+
+  $config
     ->set('ui.show.listing_filters', $form_state['values']['ui_show_listing_filters'])
+    ->set('fieldable', $form_state['values']['fieldable'])
     ->set('ui.show.master_display', $form_state['values']['ui_show_master_display'])
     ->set('ui.show.advanced_column', $form_state['values']['ui_show_advanced_column'])
     ->set('ui.show.display_embed', $form_state['values']['ui_show_display_embed'])
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php
index 853d5c9..176f552 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php
@@ -33,6 +33,7 @@ public function setEntity(EntityInterface $entity, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
   public function form(array $form, array &$form_state, EntityInterface $view) {
+    $form_wrapper = parent::form($form, $form_state, $view);
     $display_id = $view->displayID;
     // Do not allow the form to be cached, because $form_state['view'] can become
     // stale between page requests.
@@ -178,7 +179,8 @@ public function form(array $form, array &$form_state, EntityInterface $view) {
       );
     }
 
-    return $form;
+    $form_wrapper['view'] = $form;
+    return $form_wrapper;
   }
 
   /**
