diff --git a/entity_view_mode.admin.inc b/entity_view_mode.admin.inc
index 508bf03..f77c3d5 100644
--- a/entity_view_mode.admin.inc
+++ b/entity_view_mode.admin.inc
@@ -38,7 +38,19 @@ function entity_view_mode_list() {
     foreach ($entity_info[$entity_type]['view modes'] as $view_mode => $view_mode_info) {
       $rows[$view_mode]['label'] = check_plain($view_mode_info['label']);
       $rows[$view_mode]['type'] = !empty($custom_view_modes[$entity_type][$view_mode]) ? t('In database') : t('In code');
-      $rows[$view_mode]['custom_settings'] = !empty($view_mode_info['custom settings']) ? t('Yes') : t('No');
+      $bundles = entity_view_mode_get_enabled_bundles($entity_type, $view_mode);
+      //$bundles = array_merge($bundles, $bundles, $bundles, $bundles, $bundles, $bundles, $bundles, $bundles);
+      foreach ($bundles as $bundle => &$bundle_label) {
+        $path = $entity_info[$entity_type]['bundles'][$bundle]['admin']['real path'] . '/display/' . $view_mode;
+        if (module_exists('field_ui') && drupal_valid_path($path)) {
+          $bundle_label = l($bundle_label, $path);
+        }
+        else {
+          $bundle_label = check_plain($bundle_label);
+        }
+      }
+      $rows[$view_mode]['enabled_bundles'] = !empty($bundles) ? implode(', ', $bundles) : t('None');
+      //$rows[$view_mode]['custom_settings'] = !empty($view_mode_info['custom settings']) ? t('Yes') : t('No');
 
       $operations = array();
       if (isset($custom_view_modes[$entity_type][$view_mode])) {
@@ -75,7 +87,8 @@ function entity_view_mode_list() {
       '#header' => array(
         t('View mode'),
         t('Type'),
-        t('Custom settings'),
+        t('Enabled'),
+        //t('Custom settings'),
         t('Operations'),
       ),
       '#rows' => $rows,
@@ -85,10 +98,120 @@ function entity_view_mode_list() {
   return $build;
 }
 
+function entity_view_mode_add_form($form, &$form_state, $entity_type = NULL) {
+  // Provide a wrapper around the entire form, since we'll replace the whole
+  // thing with each submit.
+  $form['#prefix'] = '<div id="entity-view-mode-add-form-wrapper">';
+  $form['#suffix'] = '</div>';
+
+  //dpm($form_state);
+
+  if (!isset($entity_type) && !empty($form_state['values']['entity_type'])) {
+    $entity_type = $form_state['values']['entity_type'];
+  }
+
+  if (empty($entity_type)) {
+    $form['entity_type'] = array(
+      '#type' => 'select',
+      '#title' => t('Entity type'),
+      '#options' => array('' => t('- Select one - ')),
+      '#default_value' => '',
+      '#ajax' => array(
+        'wrapper' => 'entity-view-mode-add-form-wrapper',
+        'callback' => 'ajax_example_wizard_callback',
+      ),
+    );
+    foreach (entity_get_info() as $entity_type => $entity_info) {
+      $form['entity_type']['#options'][$entity_type] = $entity_info['label'];
+    }
+  }
+
+
+  else {
+    $form['entity_type'] = array(
+      '#type' => 'value',
+      '#value' => $form_state['values']['entity_type'],
+    );
+    //$form += entity_view_mode_edit_form($form, $form_state, $form_state['values']['entity_type']);
+  }
+
+  return $form;
+
+  // $form_state['storage'] has no specific drupal meaning, but it is
+  // traditional to keep variables for multistep forms there.
+  if (!isset($form_state['storage']['step'])) {
+    $step = 1;
+    if (!empty($form_state['storage']['entity_type'])) {
+      $step = 2;
+    }
+    elseif (isset($entity_type) && entity_get_info($entity_type)) {
+      $step = 2;
+      $form_state['storage']['entity_type'] = $entity_type;
+    }
+    $form_state['storage']['step'] = $step;
+  }
+
+  switch ($form_state['storage']['step']) {
+    case 1:
+      $form['entity_type'] = array(
+        '#type' => 'select',
+        '#title' => t('Entity type'),
+        '#options' => array('' => t('- Select one - ')),
+        '#default_value' => '',
+      );
+      foreach (entity_get_info() as $entity_type => $entity_info) {
+        $form['entity_type']['#options'][$entity_type] = $entity_info['label'];
+      }
+
+      $form['next'] = array(
+        '#type' => 'submit',
+        '#value' => t('Next step'),
+        '#ajax' => array(
+          'wrapper' => 'entity-view-mode-add-form-wrapper',
+          'callback' => 'ajax_example_wizard_callback',
+        ),
+      );
+      break;
+
+    case 2:
+      $form += entity_view_mode_edit_form($form, $form_state, $form_state['storage']['entity_type']);
+      break;
+  }
+
+  return $form;
+}
+
+function ajax_example_wizard_callback($form, $form_state) {
+  return $form;
+}
+
+function entity_view_mode_add_form_submit($form, &$form_state) {
+  dpm($form_state);
+
+  // Otherwise, we still have work to do.
+  $form_state['rebuild'] = TRUE;
+}
+
 /**
  * Form builder; edit a custom view mode.
  */
-function entity_view_mode_edit_form($form, &$form_state, $entity_type, $machine_name = NULL) {
+function entity_view_mode_edit_form($form, &$form_state, $entity_type = NULL, $machine_name = NULL) {
+  if (!isset($entity_type) && !isset($machine_name)) {
+    $form['entity_type'] = array(
+      '#type' => 'select',
+      '#title' => t('Entity type'),
+      '#options' => array('' => t('- Select one - ')),
+      '#default_value' => '',
+      '#ajax' => array(
+        'callback' => 'entity_bundle_ajax_form_callback',
+        'wrapper' => 'edit-view-mode',
+        'progress' => array('type' => 'none'),
+      ),
+      '#required' => TRUE,
+    );
+    return;
+  }
+
   $form['#entity_type'] = $entity_type;
   $form['#entity_info'] = $entity_info = entity_get_info($entity_type);
   $view_mode = entity_view_mode_load($entity_type, $machine_name);
@@ -168,7 +291,11 @@ function entity_view_mode_exists($machine_name, $element, $form_state) {
 function entity_view_mode_edit_form_submit($form, &$form_state) {
   // Save the view mode.
   form_state_values_clean($form_state);
+
   $view_mode = $form_state['values'];
+  $view_mode['custom settings'] = (bool) $view_mode['custom_settings'];
+  unset($view_mode['custom_settings']);
+
   entity_view_mode_save($form['#entity_type'], $view_mode);
 
   drupal_set_message(t('Saved the %view-mode @entity-type view mode.', array(
diff --git a/entity_view_mode.info b/entity_view_mode.info
index 51cd2df..1d77cc5 100644
--- a/entity_view_mode.info
+++ b/entity_view_mode.info
@@ -3,3 +3,4 @@ description = Allows administrators to define custom view modes for entities via
 core = 7.x
 recommends[] = field_ui
 configure = admin/config/system/entity-view-modes
+files[] = entity_view_mode.test
diff --git a/entity_view_mode.module b/entity_view_mode.module
index 58548d4..d3f04d8 100644
--- a/entity_view_mode.module
+++ b/entity_view_mode.module
@@ -33,6 +33,14 @@ function entity_view_mode_menu() {
     'access arguments' => array('administer entity view modes'),
     'file' => 'entity_view_mode.admin.inc',
   );
+  $items['admin/config/system/entity-view-modes/add'] = array(
+    'title' => 'Add view mode',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('entity_view_mode_add_form'),
+    'access arguments' => array('administer entity view modes'),
+    'file' => 'entity_view_mode.admin.inc',
+    'type' => MENU_LOCAL_ACTION,
+  );
   $items['admin/config/system/entity-view-modes/add/%'] = array(
     'title' => 'Add view mode',
     'page callback' => 'drupal_get_form',
@@ -174,6 +182,29 @@ function field_entity_view_mode_update($view_mode, $entity_type) {
   //  $view_mode['enabled_bundles'] = array_fill_keys(array_keys($entity_info['bundles']), 0);
   //}
 
+  // If the view mode machine name has changed, first fix all the bundle
+  // settings to the new machine name.
+  if (!empty($view_mode['original']) && $view_mode['machine_name'] != $view_mode['original']['machine_name']) {
+    $original_view_mode_name = $view_mode['original']['machine_name'];
+    foreach (array_keys($entity_info['bundles']) as $bundle) {
+      $settings = field_bundle_settings($entity_type, $bundle);
+      $changed = FALSE;
+      if (isset($settings['view_modes'][$original_view_mode_name])) {
+        $settings['view_modes'][$view_mode_name] = $settings['view_modes'][$original_view_mode_name];
+        unset($settings['view_modes'][$original_view_mode_name]);
+        $changed = TRUE;
+      }
+      if (isset($settings['extra_fields']['display'][$original_view_mode_name])) {
+        $settings['extra_fields']['display'][$view_mode_name] = $settings['extra_fields']['display'][$original_view_mode_name];
+        unset($settings['extra_fields']['display'][$original_view_mode_name]);
+        $changed = TRUE;
+      }
+      if ($changed) {
+        field_bundle_settings($entity_type, $bundle, $settings);
+      }
+    }
+  }
+
   if (!empty($view_mode['enabled_bundles'])) {
     foreach ($view_mode['enabled_bundles'] as $bundle => $value) {
       $bundle_settings = field_bundle_settings($entity_type, $bundle);
@@ -182,13 +213,12 @@ function field_entity_view_mode_update($view_mode, $entity_type) {
       // settings.
       $view_mode_settings = field_view_mode_settings($entity_type, $bundle);
       if (!empty($value) && empty($view_mode_settings[$view_mode_name]['custom_settings'])) {
-        $view_mode_label = $entity_info['view modes'][$view_mode_name]['label'];
         $path = _field_ui_bundle_admin_path($entity_type, $bundle) . "/display/$view_mode_name";
-        drupal_set_message(t('The %view_mode @entity_type @bundle view mode now uses custom display settings. You might want to <a href="@url" target="_new">configure them</a>.', array(
-          '%view_mode' => $view_mode_label,
+        drupal_set_message(t('The %view_mode @entity_type @bundle view mode now uses custom display settings copied from the default view mode. You might want to <a href="@url">configure them</a>.', array(
+          '%view_mode' => $view_mode['label'],
           '@entity_type' => $entity_info['label'],
           '@bundle' => $entity_info['bundles'][$bundle]['label'],
-          '@url' => url($path),
+          '@url' => url($path, array('query' => drupal_get_destination())),
         )));
         // Initialize the newly customized view mode with the display settings
         // from the default view mode.
@@ -213,7 +243,7 @@ function field_entity_view_mode_delete($view_mode, $entity_type) {
     // Remove bundle settings for the view mode.
     $bundle_settings = field_bundle_settings($entity_type, $bundle);
     if (isset($bundle_settings['view_modes'][$view_mode_name])) {
-      unset($bundles_settings['view_modes'][$view_mode_name]);
+      unset($bundle_settings['view_modes'][$view_mode_name]);
       field_bundle_settings($entity_type, $bundle, $bundle_settings);
     }
 
