diff --git commitlog/commitlog.module commitlog/commitlog.module
index 63fb167..0782042 100644
--- commitlog/commitlog.module
+++ commitlog/commitlog.module
@@ -71,6 +71,15 @@ function commitlog_views_api() {
 }
 
 /**
+ * Implementation of ctools hook_ctools_plugin_directory().
+ */
+function commitlog_ctools_plugin_directory($module, $plugin) {
+  if ($module == 'versioncontrol') {
+    return "includes/plugins/$plugin";
+  }
+}
+
+/**
  * Page callback for the 'commitlog' family of menu paths.
  *
  * @param $type
diff --git commitlog/includes/plugins/views_sets/VersioncontrolViewsSetGlobalCommitView.class.php commitlog/includes/plugins/views_sets/VersioncontrolViewsSetGlobalCommitView.class.php
new file mode 100644
index 0000000..02081ff
--- /dev/null
+++ commitlog/includes/plugins/views_sets/VersioncontrolViewsSetGlobalCommitView.class.php
@@ -0,0 +1,7 @@
+<?php
+
+class VersioncontrolViewsSetGlobalCommitView extends VersioncontrolViewsSetGlobalBase {
+  protected $setName = 'global_commit_view';
+
+  protected $baseView = 'commitlog_global_commits';
+}
\ No newline at end of file
diff --git commitlog/includes/plugins/views_sets/VersioncontrolViewsSetRepositoryCommitView.class.php commitlog/includes/plugins/views_sets/VersioncontrolViewsSetRepositoryCommitView.class.php
new file mode 100644
index 0000000..8011e64
--- /dev/null
+++ commitlog/includes/plugins/views_sets/VersioncontrolViewsSetRepositoryCommitView.class.php
@@ -0,0 +1,8 @@
+<?php
+
+class VersioncontrolViewsSetRepositoryCommitView extends VersioncontrolViewsSetBase {
+
+  protected $setName = 'repository_commit_view';
+
+  protected $baseView = 'commitlog_repository_commits';
+}
\ No newline at end of file
diff --git commitlog/includes/plugins/views_sets/VersioncontrolViewsSetUserCommitView.class.php commitlog/includes/plugins/views_sets/VersioncontrolViewsSetUserCommitView.class.php
new file mode 100644
index 0000000..0b7842e
--- /dev/null
+++ commitlog/includes/plugins/views_sets/VersioncontrolViewsSetUserCommitView.class.php
@@ -0,0 +1,8 @@
+<?php
+
+class VersioncontrolViewsSetUserCommitView extends VersioncontrolViewsSetGlobalBase {
+
+  protected $setName = 'user_commit_view';
+
+  protected $baseView = 'commitlog_user_commits';
+}
\ No newline at end of file
diff --git commitlog/includes/plugins/views_sets/global_commit_view.inc commitlog/includes/plugins/views_sets/global_commit_view.inc
new file mode 100644
index 0000000..ebc81ca
--- /dev/null
+++ commitlog/includes/plugins/views_sets/global_commit_view.inc
@@ -0,0 +1,9 @@
+<?php
+
+$plugin = array (
+  'title' => t('Global commit log'),
+  'description' => t('A log of all commits made in all repositories known to the system. Note that the backend-specific versions of this view will be used only if a single backend is enabled.'),
+  'handler' => array(
+    'class' => 'VersioncontrolViewsSetGlobalCommitView',
+  ),
+);
\ No newline at end of file
diff --git commitlog/includes/plugins/views_sets/repository_commit_view.inc commitlog/includes/plugins/views_sets/repository_commit_view.inc
new file mode 100644
index 0000000..aaec4fd
--- /dev/null
+++ commitlog/includes/plugins/views_sets/repository_commit_view.inc
@@ -0,0 +1,9 @@
+<?php
+
+$plugin = array (
+  'title' => t('Single repository commit log'),
+  'description' => t('A log of all commits made to a single repository.'),
+  'handler' => array(
+    'class' => 'VersioncontrolViewsSetRepositoryCommitView',
+  ),
+);
\ No newline at end of file
diff --git commitlog/includes/plugins/views_sets/user_commit_view.inc commitlog/includes/plugins/views_sets/user_commit_view.inc
new file mode 100644
index 0000000..61d0d30
--- /dev/null
+++ commitlog/includes/plugins/views_sets/user_commit_view.inc
@@ -0,0 +1,9 @@
+<?php
+
+$plugin = array (
+  'title' => t('Per-user commit log'),
+  'description' => t('A log of all commits made by a specific user in all repositories known to the system. As with the global commit view, note that the backend-specific version will only be used if operating in single-backend mode.'),
+  'handler' => array(
+    'class' => 'VersioncontrolViewsSetUserCommitView',
+  ),
+);
\ No newline at end of file
diff --git includes/VersioncontrolBackend.php includes/VersioncontrolBackend.php
index 2e51afe..f3e89b8 100644
--- includes/VersioncontrolBackend.php
+++ includes/VersioncontrolBackend.php
@@ -19,6 +19,15 @@ abstract class VersioncontrolBackend {
   public $name;
 
   /**
+   * The machine name of the backend. This value is used in
+   * {versioncontrol_repositories}.vcs, and ubiquitously elsewhere in the code
+   * to refer to the backend.
+   *
+   * @var string
+   */
+  public $type = '';
+
+  /**
    * A short description of the backend, if possible not longer than
    * one or two sentences.
    *
@@ -47,7 +56,7 @@ abstract class VersioncontrolBackend {
   /**
    * An array of the default views for use in the Versioncontorl API interfaces.
    */
-  public $views = array();
+  public $defaultViews = array();
 
   /**
    * An array of the update methods available for this backend.
@@ -79,12 +88,7 @@ abstract class VersioncontrolBackend {
       'branch'    => 'VersioncontrolBranch',
       'tag'       => 'VersioncontrolTag',
     );
-    $this->views += array(
-      'repositories' => 'versioncontrol_repositories',
-      'global commit view' => 'versioncontrol_global_commits',
-      'repository commits' => 'versioncontrol_repository_commits',
-      'user commit view' => 'versioncontrol_user_commits',
-    );
+
     $this->update_methods += array(
       0 => t('Automatic log retrieval.'),
       1 => t('Use external script to insert data.'),
@@ -182,25 +186,6 @@ abstract class VersioncontrolBackend {
   public function augmentEntitySelectQuery($query, $entity_type) {}
 
   /**
-   * Retrieves the appropriate views module view for this backend.
-   *
-   * Versioncontrol allows backends to customize the views used for the admin
-   * interface.  This method gets the appopriate one for this backend.
-   *
-   * @param $type
-   *   The type of view we are returning (eg. Repositories) 
-   *
-   * @return
-   *   The name of the view to be used.
-   */
-  public function getViewName($type) {
-    if (isset($this->views[$type])) {
-      return $this->views[$type];
-    }
-    return FALSE;
-  }
-
-  /**
    * Get the user-visible version of a commit identifier a.k.a.
    * 'revision', as plaintext. By default, this function returns the
    * operation's revision if that property exists, or its vc_op_id
diff --git includes/controllers.inc includes/controllers.inc
index 6ba705e..d08b6f3 100644
--- includes/controllers.inc
+++ includes/controllers.inc
@@ -559,6 +559,8 @@ interface VersioncontrolEntityInterface extends ArrayAccess {
   public function build($args = array());
   public function save($options = array());
 
+  public function getBackend();
+
   /**
    * Insert a new entity into the database, then invoke relevant hooks, if any.
    */
diff --git includes/plugins/views_sets/VersioncontrolViewsSetRepositoriesAdmin.class.php includes/plugins/views_sets/VersioncontrolViewsSetRepositoriesAdmin.class.php
new file mode 100644
index 0000000..f59b67b
--- /dev/null
+++ includes/plugins/views_sets/VersioncontrolViewsSetRepositoriesAdmin.class.php
@@ -0,0 +1,8 @@
+<?php
+
+class VersioncontrolViewsSetRepositoriesAdmin extends VersioncontrolViewsSetBase {
+
+  protected $setName = 'repositories_admin';
+
+  protected $baseView = 'versioncontrol_repositories';
+}
diff --git includes/plugins/views_sets/repositories_admin.inc includes/plugins/views_sets/repositories_admin.inc
new file mode 100644
index 0000000..4a99017
--- /dev/null
+++ includes/plugins/views_sets/repositories_admin.inc
@@ -0,0 +1,9 @@
+<?php
+
+$plugin = array (
+  'title' => t('Administrative repository listing'),
+  'description' => t('An administrative list of repositories, used in the VCAPI-provided repository management UI at !link', array('!link' => l('repository management UI', 'admin/content/versioncontrol-repositories'))),
+  'handler' => array(
+    'class' => 'VersioncontrolViewsSetRepositoriesAdmin',
+  ),
+);
\ No newline at end of file
diff --git includes/views_sets.inc includes/views_sets.inc
new file mode 100644
index 0000000..f76c697
--- /dev/null
+++ includes/views_sets.inc
@@ -0,0 +1,142 @@
+<?php
+
+/**
+ * @file
+ *
+ * Interfaces and base classes that define VCAPI's views set system.
+ */
+
+/**
+ * Interface defining the behavior for the classes used by views set plugins.
+ *
+ * Views sets are wrappers around groups of views that VCAPI uses to ease the
+ * process of determining the most appropriate view (either generic or
+ * backend-specific) to use in a given situation.  A views set plugin represents
+ * something that would, under most circumstances, be a single view, but because
+ * vcapi has its various backends, it needs the group. Plugins implementing this
+ * interface are responsible for the logic of that multiplexing.
+ */
+interface VersioncontrolViewsSetInterface {
+  /**
+   * Derive the appropriate view for this set based on the data in a
+   * VersioncontrolEntity object.
+   *
+   * @param VersioncontrolEntity $entity
+   *   The entity from which a view should be derived.
+   */
+  public function getViewNameByEntity(VersioncontrolEntityInterface $entity);
+
+  /**
+   * Retrieve the appropriate view based on an explicitly known backend.
+   *
+   * @param mixed $backend
+   *   Either a VersioncontrolBackend object, or the short name that uniquely
+   *   refers to a backend.
+   */
+  public function getViewNameByBackend($backend);
+
+  public function getSetName();
+
+  public function getDefaultViews($vcs = '');
+
+  public function getBaseView();
+
+  /**
+   * \o/
+   */
+  public function setSet($data);
+}
+
+interface VersioncontrolViewsGlobalSetInterface extends VersioncontrolViewsSetInterface {
+  /**
+   * Retrieve the appropriate view, typically based on some environment data.
+   *
+   * Global views sets are, under most circumstances, sensitive only to whether
+   * or not VCAPI is operating in single backend mode (as defined by the
+   * global $conf variable). Thus, they tend not to need an argument to derive
+   * the appropriate view.
+   */
+  public function getViewName();
+}
+
+/**
+ * Base class for views sets; reduce a little code duplication.
+ *
+ */
+abstract class VersioncontrolViewsSetBase implements VersioncontrolViewsSetInterface {
+  protected $setName = '';
+
+  protected $baseView = '';
+
+  protected $setData = array();
+
+  protected $defaultViews = array();
+
+  /**
+   * Grab stored set data and attach it as a property.
+   */
+  public function __construct() {
+    // $this->setData = versioncontrol_get_views_set($this->setName);
+  }
+
+  public function getViewNameByEntity(VersioncontrolEntityInterface $entity) {
+    return $this->getViewNameByBackend($entity->getBackend());
+  }
+
+  public function getViewNameByBackend($backend) {
+    if ($backend instanceof VersioncontrolBackend) {
+      $backend = $backend->type;
+    }
+    return empty($this->setData[$backend]) ? $this->baseView : $this->setData[$backend];
+  }
+
+  public function getBaseView() {
+    return $this->baseView;
+  }
+
+  public function getDefaultViews($vcs = '') {
+    if (empty($vcs)) {
+      return $this->defaultViews;
+    }
+
+    return empty($this->defaultViews[$vcs]) ? FALSE : $this->defaultViews[$vcs];
+  }
+
+  public function getSetName() {
+    return $this->setName;
+  }
+
+  public function setSet($data) {
+    $this->setData = $data;
+  }
+}
+
+/**
+ * Helper abstract parent for global views sets. For most of them, the logic
+ * defined here will be perfectly adequate. If the logic doesn't work, others
+ * can still just implement the interface directly.
+ */
+abstract class VersioncontrolViewsSetGlobalBase extends VersioncontrolViewsSetBase implements VersioncontrolViewsGlobalSetInterface {
+
+  protected $view;
+
+  public function __construct() {
+    parent::__construct();
+
+    if (variable_get('versioncontrol_single_backend_mode', FALSE)) {
+      $backends = versioncontrol_get_backends();
+      $this->view = $this->getViewNameByBackend(reset($backends));
+    }
+    else {
+      $this->view = $this->baseView;
+    }
+  }
+
+  public function getViewNameByEntity(VersioncontrolEntityInterface $entity) {
+    return $this->view;
+  }
+
+  public function getViewName() {
+    $this->view;
+  }
+}
\ No newline at end of file
diff --git tests/versioncontrol_test.inc tests/versioncontrol_test.inc
index d79f985..c825f38 100644
--- tests/versioncontrol_test.inc
+++ tests/versioncontrol_test.inc
@@ -7,6 +7,8 @@
  */
 
 class VersioncontrolTestBackend extends VersioncontrolBackend {
+  public $type = 'test';
+  
   public function __construct() {
     $this->name = 'API Test';
     $this->description = t('TestVCS backend for Version Control API.');
diff --git versioncontrol.admin.inc versioncontrol.admin.inc
index 0c3a2ac..e431533 100644
--- versioncontrol.admin.inc
+++ versioncontrol.admin.inc
@@ -82,6 +82,155 @@ function versioncontrol_admin_settings_submit($form, &$form_state) {
   }
 }
 
+function versioncontrol_admin_views_sets_edit(&$form_state) {
+  ctools_include('dependent');
+  $form = array();
+
+  $form['info'] = array(
+    '#type' => 'markup',
+    '#value' => t("This form allows you to manage Version Control API's Views sets. When a user requests a page with Views-driven VCAPI data, VCAPI uses this system to pick a backend-specific view (if appropriate). Backend-specific views always contain richer data than their generic cross-backend counterparts."),
+  );
+
+  // get the assembled set plugin objects & ensure other statics are populated
+  $sets = versioncontrol_get_views_sets();
+  // get the statics, but only copies, no need to write to them now
+  $set_infos = ctools_get_plugins('versioncontrol', 'views_sets');
+  $db_set_data = ctools_static('versioncontrol_views_sets_db_data', array());
+  $all_views = drupal_map_assoc(array_keys(views_get_all_views()));
+  $base_options = array('' => t('Select a view')) + $all_views;
+  $backends = versioncontrol_get_backends();
+
+  foreach ($set_infos as $set_name => $info) {
+    $set = $sets[$set_name];
+    $form['set_infos'] = array(
+      '#type' => 'value',
+      '#value' => $set_infos,
+    );
+    // Create a fieldset for each set.
+    $form[$set_name] = array(
+      '#type' => 'fieldset',
+      '#title' => $info['title'],
+      '#description' => $info['description'],
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+      '#tree' => TRUE,
+    );
+
+    $form[$set_name]['base'] = array(
+      '#type' => 'textfield',
+      '#disabled' => TRUE,
+      '#title' => t('Base view'),
+      '#description' => t('The base view is a fallback. It is only used if no other view is appropriate.'),
+      '#default_value' => $set->getBaseView(),
+    );
+
+    foreach ($backends as $vcs => $backend) {
+      $current_view = $from_db = $from_backend = $from_owner = $from_base = FALSE;
+      if (!empty($db_set_data[$set_name][$vcs])) {
+        $current_view = $default_selected_view = $db_set_data[$set_name][$vcs];
+        $from_db = TRUE;
+      }
+      else {
+        $default_selected_view = '';
+      }
+
+      // Init the from description to the base view.
+      $from_description = t("No other default was specified, so the base view, <em>'!view_name'</em>, will act as the default.", array('!view_name' => $set->getBaseView()));
+
+      if (!empty($backend->defaultViews[$set_name])) {
+        $current_view = $from_db ? $current_view : $backend->defaultViews[$set_name];
+        $from_description = t("The view <em>'!view_name'</em> has been specified by the backend as the default view for this set.", array('!view_name' => $current_view));
+      }
+
+      $set_default_views = $set->getDefaultViews();
+      if (!empty($set_default_views[$vcs])) {
+        $current_view = $from_db ? $current_view : $set_default_views[$vcs];
+        $from_description = t("The view <em>'!view_name'</em> has been specified by the module implementing the set as the default view for this set.", array('!view_name' => $current_view));
+      }
+
+      if (empty($current_view)) {
+        // if $current_view still isn't set, the base view is king
+        $current_view = $set->getBaseView();
+      }
+
+      if (empty($base_options[$current_view])) {
+        drupal_set_message("Unknown view '$current_view' currently assigned for backend '$vcs' on set '$set_name'. Attempting to use this set will cause nasty errors.", 'error');
+      }
+
+      $form[$set_name][$vcs] = array(
+        '#type' => 'fieldset',
+        '#title' => $backend->name,
+        '#collapsible' => FALSE,
+        '#collapsed' => FALSE,
+        '#tree' => TRUE,
+      );
+
+      $form[$set_name][$vcs]['default'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Use the default view for this backend.'),
+        '#description' => $from_description,
+        '#default_value' => !$from_db,
+        '#id' => "$set_name-$vcs-default",
+      );
+
+      $form[$set_name][$vcs]['override'] = array(
+        '#type' => 'select',
+        '#title' => t('Select a view'),
+        '#options' => $base_options,
+        '#default_value' => $default_selected_view,
+        '#process' => array('ctools_dependent_process'),
+        '#dependency' => array("$set_name-$vcs-default" => array(0)),
+      );
+    }
+  }
+
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save views sets'),
+  );
+
+  return $form;
+}
+
+function versioncontrol_admin_views_sets_edit_validate($form, &$form_state) {
+  $backends = versioncontrol_get_backends();
+  foreach ($form_state['values']['set_infos'] as $set_name => $info) {
+    foreach ($backends as $vcs => $backend) {
+      $values = $form_state['values'][$set_name][$vcs];
+      if (empty($values['default']) && empty($values['override'])) {
+        // If bypassing the default, a view must be selected.
+        form_error($form[$set_name][$vcs]['override'], 'If not using the default view, a view must be selected.');
+      }
+    }
+  }
+}
+
+function versioncontrol_admin_views_sets_edit_submit($form, &$form_state) {
+  // Clear the table.
+  db_delete('versioncontrol_views_sets')->execute();
+  $backends = versioncontrol_get_backends();
+
+  $query = db_insert('versioncontrol_views_sets')->fields(array('views_set', 'vcs', 'view_name'));
+  $do_insert = FALSE;
+  // $backends = versioncontrol_get_backends();
+  foreach ($form_state['values']['set_infos'] as $set_name => $info) {
+    foreach ($backends as $vcs => $backend) {
+      $values = $form_state['values'][$set_name][$vcs];
+      if (empty($values['default'])) {
+        $do_insert = TRUE;
+        $query->values(array($set_name, $vcs, $values['override']));
+      }
+    }
+  }
+
+  if ($do_insert) {
+    // Only do the insert if we actually have some values to save.
+    $query->execute();
+  }
+
+  ctools_static_reset('versioncontrol_views_sets_assembled');
+  ctools_static_reset('versioncontrol_views_sets_db_data');
+}
 
 /**
  * Form callback for "admin/content/versioncontrol-accounts":
@@ -341,13 +490,14 @@ function versioncontrol_versioncontrol_filter_accounts(&$accounts) {
 function versioncontrol_admin_repository_list(&$form_state) {
   $form = array();
   $backends = versioncontrol_get_backends();
+  $set = versioncontrol_get_views_set('repositories_admin');
   foreach ($backends as $vcs => $backend) {
     $title = t('@vcs repositories', array('@vcs' => $backend->name));
     $form[$vcs] = array(
       '#value' => '<h4>'. $title .'</h4>',
     );
     $form[$vcs . '_repositories'] = array(
-      '#value' => views_embed_view($backend->getViewName('repositories'), 'default', $vcs),
+      '#value' => views_embed_view($set->getViewNameByBackend($backend), 'default', $vcs),
     );
   }
   return $form;
diff --git versioncontrol.info versioncontrol.info
index cb18a39..52f34fa 100644
--- versioncontrol.info
+++ versioncontrol.info
@@ -15,6 +15,7 @@ files[] = includes/VersioncontrolTag.php
 files[] = includes/interfaces.inc
 files[] = includes/controllers.inc
 files[] = includes/VersioncontrolRepository.php
+files[] = includes/views_sets.inc
 package = Version Control
 core = 6.x
 php = 5.2
diff --git versioncontrol.install versioncontrol.install
index 7004831..32a87de 100644
--- versioncontrol.install
+++ versioncontrol.install
@@ -511,6 +511,32 @@ function versioncontrol_schema() {
     ),
   );
 
+  $schema['versioncontrol_views_sets'] = array(
+    'description' => 'System names of views to be used for particular views sets, per-backend, as configured in the UI. Settings stored here will override those specified by backends, if any.',
+    'fields' => array(
+      'views_set' => array(
+        'description' => 'The string identifying this view set, as defined in implementations of hook_versioncontrol_views_sets().',
+        'type' => 'varchar',
+        'length' => 64,
+        'not null' => TRUE,
+      ),
+      'vcs' => array(
+        'description' => 'Unique string identifier of the backend, e.g. "cvs", "svn" or "git".',
+        'type' => 'varchar',
+        'length' => 8,
+        'not null' => TRUE,
+      ),
+      'view_name' => array(
+        'description' => 'The system name of the view to be used for this set/backend combination.',
+        'type' => 'varchar',
+        'length' => 64,
+        'not null' => TRUE,
+        'default' => '',
+      ),
+    ),
+    'primary key' => array('views_set', 'vcs'),
+  );
+
   return $schema;
 }
 
@@ -1091,3 +1117,37 @@ function versioncontrol_update_6309() {
 
   return $ret;
 }
+
+function versioncontrol_update_6310() {
+  $ret = array();
+
+  $schema = array(
+    'description' => 'System names of views to be used for particular views sets, per-backend, as configured in the UI. Settings stored here will override those specified by backends, if any.',
+    'fields' => array(
+      'views_set' => array(
+        'description' => 'The string identifying this view set, as defined in implementations of hook_versioncontrol_views_sets().',
+        'type' => 'varchar',
+        'length' => 64,
+        'not null' => TRUE,
+      ),
+      'vcs' => array(
+        'description' => 'Unique string identifier of the backend, e.g. "cvs", "svn" or "git".',
+        'type' => 'varchar',
+        'length' => 8,
+        'not null' => TRUE,
+      ),
+      'view_name' => array(
+        'description' => 'The system name of the view to be used for this set/backend combination.',
+        'type' => 'varchar',
+        'length' => 64,
+        'not null' => TRUE,
+        'default' => '',
+      ),
+    ),
+    'primary key' => array('views_set', 'vcs'),
+  );
+
+  db_create_table($ret, 'versioncontrol_views_sets', $schema);
+  
+  return $ret;
+}
\ No newline at end of file
diff --git versioncontrol.module versioncontrol.module
index cb261f0..226b3da 100644
--- versioncontrol.module
+++ versioncontrol.module
@@ -180,13 +180,19 @@ function versioncontrol_menu() {
     'page arguments' => array('versioncontrol_admin_settings'),
     'type' => MENU_NORMAL_ITEM,
   ) + $admin;
-  
+
   $items['admin/settings/versioncontrol-settings/general'] = array(
     'title' => 'General',
     'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -1,
   );
 
+  $items['admin/settings/versioncontrol-settings/views-sets'] = array(
+    'title' => 'Views sets',
+    'description' => 'Configure the sets of Views used by Version Control API and related modules.',
+    'page arguments' => array('versioncontrol_admin_views_sets_edit'),
+    'type' => MENU_LOCAL_TASK,
+  ) + $admin;
+
   $items['admin/content/versioncontrol-repositories'] = array(
     'title' => 'VCS Repositories',
     'description' => 'Define and manage the Version Control repositories known to your site.',
@@ -1036,6 +1042,70 @@ function versioncontrol_user_autocomplete($repo_id, $string = '') {
   drupal_json($matches);
 }
 
+function versioncontrol_get_views_sets() {
+  $sets = &ctools_static('versioncontrol_views_sets_assembled', array());
+  $db_set_data = &ctools_static('versioncontrol_views_sets_db_data', array());
+
+  // Only build the set list if it's empty.
+  if (empty($sets)) {
+    ctools_include('plugins');
+    // get all the site-specific settings stored in the db
+    $result = db_select('versioncontrol_views_sets', 'base')
+      ->fields('base')
+      ->execute();
+
+    // Store the db-retrieved data in a static var; we need to source it later.
+    foreach ($result as $row) {
+      if (empty($db_set_data[$row->views_set])) {
+        $db_set_data[$row->views_set] = array();
+      }
+      $db_set_data[$row->views_set][$row->vcs] = $row->view_name;
+    }
+
+    // Grab all available views set plugins.
+    $plugins = ctools_get_plugins('versioncontrol', 'views_sets');
+    foreach ($plugins as $plugin_name => $plugin_definition) {
+      $class = ctools_plugin_get_class($plugin_definition, 'handler');
+      $sets[$plugin_name] = new $class();
+    }
+
+    $backends = versioncontrol_get_backends();
+
+    // Process each set.
+    foreach ($sets as $set_name => $handler) {
+      $set = array();
+
+      // Process each backend.
+      foreach ($backends as $vcs => $backend) {
+        // Attach defaults set by the backends themselves, if they exist.
+        if (!empty($backend->defaultViews[$set_name])) {
+          $set[$vcs] = $backend->defaultViews[$set_name];
+        }
+        // Allow hook implementors to specify defaults, too.
+        if (!empty($set_info['default views'][$vcs])) {
+          $set[$vcs] = $set_info['default views'][$vcs];
+        }
+      }
+
+      // Merge the db values overtop of all defaults
+      if (!empty($db_set_data[$set_name])) {
+        $set = array_merge($set, $db_set_data[$set_name]);
+      }
+
+      $handler->setSet($set);
+    }
+  }
+
+  return $sets;
+}
+
+function versioncontrol_get_views_set($set) {
+  $sets = versioncontrol_get_views_sets();
+  if (!empty($sets[$set])) {
+    return $sets[$set];
+  }
+  return FALSE;
+}
 
 /**
  * Return preset values for strings that are used in the user interface.
