diff --git a/views_default_view_override.module b/views_default_view_override.module
index c9cd31e..5b5762a 100644
--- a/views_default_view_override.module
+++ b/views_default_view_override.module
@@ -1,102 +1,42 @@
 <?php
 
 /**
- * Get the list of commerce views to override.
+ * @file
+ * A module that allows overriding views with other views.
  */
-function views_default_view_override_get_views_to_override($reset = FALSE) {
-  $views_to_override = &drupal_static(__FUNCTION__, FALSE);
-  if (!$views_to_override) {
-    $views_to_override = module_invoke_all('views_default_view_override_views_to_override');
-    drupal_alter('views_default_view_override_views_to_override', $views_to_override);
-  }
-  return $views_to_override;
-}
 
 /**
- * Implements hook_form_[form_id]_alter().
+ * Implements hook_views_default_views_alter().
  */
-function views_default_view_override_form_views_ui_edit_form_alter(&$form, &$form_state) {
-  $views_to_override = views_default_view_override_get_views_to_override();
-  $view = $form_state['view'];
-  if (!empty($views_to_override[$view->name])) {
-    $message = 'You attempted to edit a view that is being dynamically overridden. Edit this view instead.';
-    drupal_set_message(t($message), 'warning');
-
-    $current_destination = $_GET['destination'];
-    unset($_GET['destination']);
-    $options = array(
-      'query' => array(
-        'destination' => $current_destination,
-      ),
-    );
-
-    $path = arg();
-    $path[4] = $views_to_override[$view->name];
-    drupal_goto(implode('/', $path),  $options);
+function views_default_view_override_views_default_views_alter(&$views) {
+  // Get the list of views to override from other modules.
+  $views_to_override = module_invoke_all('views_default_view_override_views_to_override');
+  drupal_alter('views_default_view_override_views_to_override', $views_to_override);
+
+  // Loop through the views to override and replace them with the replacements.
+  foreach ($views_to_override as $view_name => $replacement_name) {
+    if (isset($views[$view_name]) && isset($views[$replacement_name])) {
+      $views[$view_name] = $views[$replacement_name];
+    }
   }
 }
 
 /**
- * Implements hook_views_pre_view().
- *
- * Views provides no way to replace one view with another when
- * views_get_view is called so here we load our replacement and
- * attempt to prep it and override all properites on the child.
+ * Implements hook_views_pre_build().
  */
-function views_default_view_override_views_pre_view(&$view, &$display_id, &$args) {
-  $views_to_override = views_default_view_override_get_views_to_override();
-  if (!empty($views_to_override[$view->name])) {
+function views_default_view_override_views_pre_build(&$view) {
+  // Get the list of views to override from other modules.
+  $views_to_override = module_invoke_all('views_default_view_override_views_to_override');
+  drupal_alter('views_default_view_override_views_to_override', $views_to_override);
 
-    // Load the replacement view.
-    $replacement = views_get_view($views_to_override[$view->name]);
-
-    // Handle missing replacements without crashing.
-    if (is_null($replacement)) {
-      $string = 'Tried to override a view "%view" but the view was not found.';
-      $arguments = array('%view' => $views_to_override[$view->name]);
-      watchdog('views_default_view_override', $string, $arguments);
-      drupal_set_message(t($string, $arguments), 'error');
-      return;
-    }
-
-    // Set the arguments on the replacement view.
-    $replacement->set_arguments($args);
+  // Check if the current view is being overridden.
+  if (!empty($views_to_override[$view->name])) {
+    // Set a warning message for the user.
+    drupal_set_message(t('You attempted to edit a view that is being dynamically overridden. Edit this view instead.'), 'warning');
 
-    $replacement->set_display($display_id);
-    // TODO: This list was stolen from views and may be incomplete or have
-    // unnecessary items. Audit the list.
-    $objects = array(
-      'current_display',
-      'display_handler',
-      'argument',
-      'filter',
-      'sort',
-      'relationship',
-      'header',
-      'footer',
-      'empty',
-      'query',
-      'style_plugin',
-      'plugin_name',
-    );
-    // Ensure that we have fixed the views internal references to our replacement.
-    $replacement->initid = TRUE;
-    foreach ($objects as $key) {
-      if (isset($replacement->{$key}) && isset($replacement->{$key}->view)) {
-        $replacement->{$key}->view = $view;
-      }
-      if (isset($replacement->{$key}) && is_array($replacement->{$key})) {
-        foreach ($replacement->{$key} as $child_key => $child_value) {
-          if (isset($replacement->{$key}->{$child_key}->view)) {
-            $replacement->{$key}->{$child_key}->view = $view;
-          }
-        }
-      }
-    }
-    // Ensure we don't leave anything laying around on the original view.
-    $view->destroy();
-    foreach ($replacement as $key => $value) {
-      $view->{$key} = $value;
-    }
+    // Redirect the user to the replacement view edit page.
+    $path = arg();
+    $path[4] = $views_to_override[$view->name];
+    drupal_goto(implode('/', $path),  array('query' => drupal_get_destination()));
   }
 }
