diff --git a/includes/media.browser.inc b/includes/media.browser.inc
index 21e6017..cc977aa 100644
--- a/includes/media.browser.inc
+++ b/includes/media.browser.inc
@@ -49,7 +49,7 @@ function media_browser($selected = NULL) {
   }
 
   foreach ($plugins as $key => &$plugin) {
-    $plugin += module_invoke($plugin['#module'], 'media_browser_plugin_view', $key, $params);
+    $plugin += module_invoke($plugin['#module'], 'media_browser_plugin_view', $key, $plugin);
   }
 
   // Allow modules to change the tab names or whatever else they want to change
@@ -207,13 +207,33 @@ function media_media_browser_plugin_info() {
       '#weight' => -10,
     );
   }
+
+  // Get a list of views using the 'media_browser' display type and provide each
+  // as a media browser plugin.
+  foreach (views_get_all_views(TRUE) as $view) {
+    foreach ($view->display as $display) {
+      if ($display->display_plugin == 'media_browser') {
+        $title = $display->display_title;
+        if (!empty($display->display_options['title'])) {
+          $title = $display->display_options['title'];
+        }
+        $plugins["{$view->name}--{$display->id}"] = array(
+          '#title' => $title,
+          '#weight' => 11, // @TODO make this configurable.
+          '#views_view_name' => $view->name,
+          '#views_view_display_id' => $display->id,
+        );
+      }
+    }
+  }
+
   return $plugins;
 }
 
 /**
  * Implementaion of hook_media_browser_plugin_view().
  */
-function media_media_browser_plugin_view($plugin_name, $params) {
+function media_media_browser_plugin_view($plugin_name, $params = array()) {
   $path = drupal_get_path('module', 'media');
 
   module_load_include('inc', 'media', 'includes/media.admin');
@@ -270,6 +290,17 @@ function media_media_browser_plugin_view($plugin_name, $params) {
         '#markup' => '<div id="container"><div id="scrollbox"><ul id="media-browser-library-list" class="media-list-thumbnails"></ul><div id="status"></div></div></div>',
       );
     break;
+    default:
+      // Is this coming from our implemetnation of views?
+      if (! empty($params['#views_view_name'])) {
+        if (($view = views_get_view($params['#views_view_name']))) {
+          return array(
+            '#title' => t('View'),
+            '#markup' => $view->preview($params['#views_view_display_id']), // . '<div class="form-actions form-wrapper"></div>',
+          );
+        }
+      }
+    break;
   }
 
   return array();
diff --git a/includes/media.views.inc b/includes/media.views.inc
deleted file mode 100644
index 09db47e..0000000
--- a/includes/media.views.inc
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/**
- * @file
- * Provide Views data and handlers for media.module
- */
-
-/**
- * Implements hook_field_views_data().
- */
-function media_field_views_data($field) {
-  $data = field_views_field_default_views_data($field);
-  foreach ($data as $table_name => $table_data) {
-    // Add the relationship only on the fid field.
-    $data[$table_name][$field['field_name'] . '_fid']['relationship'] = array(
-      'handler' => 'views_handler_relationship',
-      'base' => 'file_managed',
-      'base field' => 'fid',
-      'field' => $field['field_name'] . '_fid',
-      'label' => t('file from !field_name', array('!field_name' => $field['field_name'])),
-    );
-  }
-
-  return $data;
-}
diff --git a/media.info b/media.info
index 89dce5c..b5125c4 100644
--- a/media.info
+++ b/media.info
@@ -4,8 +4,14 @@ package = Media
 core = 7.x
 dependencies[] = file_entity
 dependencies[] = image
+dependencies[] = views
 files[] = includes/MediaReadOnlyStreamWrapper.inc
 files[] = tests/media.test
 files[] = tests/media.types.test
 files[] = tests/media.entity.test
+files[] = media.views.inc
+files[] = media_views_plugin_display_media_browser.inc
+files[] = media_views_plugin_style_media_browser.inc
+files[] = includes/media.theme.inc
+
 testing_api = 2.x
diff --git a/media.module b/media.module
index 48e788f..04142f4 100644
--- a/media.module
+++ b/media.module
@@ -1045,6 +1045,47 @@ function media_get_hidden_stream_wrappers() {
 function media_views_api() {
   return array(
     'api' => 3,
-    'path' => drupal_get_path('module', 'media') . '/includes',
+    'path' => drupal_get_path('module', 'media'),
   );
 }
+
+/**
+ * Implementation of hook_views_default_views().
+ */
+function media_views_default_views() {
+  return media_load_all_exports('media', 'views', 'view.inc', 'view');
+}
+
+/**
+ * Fetches an array of exportables from files.
+ *
+ * @param $module
+ *   The module invoking this request. (Can be called by other modules.)
+ * @param $directory
+ *   The subdirectory in the custom module.
+ * @param $extension
+ *   The file extension.
+ * @param $name
+ *   The name of the variable found in each file. Defaults to the same as
+ *   $extension.
+ *
+ * @return
+ *   Array of $name objects.
+ */
+function media_load_all_exports($module, $directory, $extension, $name = NULL) {
+  if (!$name) {
+    $name = $extension;
+  }
+
+  $return = array();
+  // Find all the files in the directory with the correct extension.
+  $files = file_scan_directory(drupal_get_path('module', $module) . "/$directory", "/.$extension/");
+  foreach ($files as $path => $file) {
+    require $path;
+    if (isset($$name)) {
+      $return[$$name->name] = $$name;
+    }
+  }
+
+  return $return;
+}
