diff --git a/entity_view_mode.module b/entity_view_mode.module
index 8014a7c..8da92b1 100644
--- a/entity_view_mode.module
+++ b/entity_view_mode.module
@@ -106,7 +106,7 @@ function entity_view_mode_save($entity_type, $view_mode) {
 
   // Determine if we will be inserting a new view mode.
   if (!isset($view_mode['is_new'])) {
-    $view_mode['is_new'] = !empty($view_mode['original']);
+    $view_mode['is_new'] = empty($view_mode['original']);
   }
 
   // Let modules modify the view mode before it is saved.
@@ -172,6 +172,7 @@ function field_entity_view_mode_rename($entity_type, $view_mode_old, $view_mode_
   $entity_info = entity_get_info($entity_type);
 
   foreach (array_keys($entity_info['bundles']) as $bundle) {
+    // Update all field bundle settings for the renamed view mode.
     $settings = field_bundle_settings($entity_type, $bundle);
     $changed = FALSE;
     if (isset($settings['view_modes'][$view_mode_old])) {
@@ -187,6 +188,16 @@ function field_entity_view_mode_rename($entity_type, $view_mode_old, $view_mode_
     if ($changed) {
       field_bundle_settings($entity_type, $bundle, $settings);
     }
+
+    // Update all field instance display settings for the renamed view mode.
+    $instances = field_read_instances(array('entity_type' => $entity_type, 'bundle' => $bundle));
+    foreach ($instances as $instance) {
+      // Remove the view mode settings from all configured field instances.
+      if (isset($instance['display'][$view_mode_old])) {
+        $instance['display'][$view_mode_new] = $instance['display'][$view_mode_old];
+        field_update_instance($instance);
+      }
+    }
   }
 }
 
@@ -212,13 +223,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.
@@ -240,14 +250,23 @@ function field_entity_view_mode_delete($view_mode, $entity_type) {
   $view_mode_name = $view_mode['machine_name'];
 
   foreach (array_keys($entity_info['bundles']) as $bundle) {
-    // 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]);
-      field_bundle_settings($entity_type, $bundle, $bundle_settings);
+    // Remove all field bundle settings for the deleted view mode.
+    $settings = field_bundle_settings($entity_type, $bundle);
+    if (isset($settings['view_modes'][$view_mode_name]) || isset($settings['extra_fields']['display'][$view_mode_name])) {
+      unset($settings['view_modes'][$view_mode_name]);
+      unset($settings['extra_fields']['display'][$view_mode_name]);
+      field_bundle_settings($entity_type, $bundle, $settings);
     }
 
-    // @todo Delete view mode settings in field instances?
+    // Remove all field instance display settings for the deleted view mode.
+    $instances = field_read_instances(array('entity_type' => $entity_type, 'bundle' => $bundle));
+    foreach ($instances as $instance) {
+      // Remove the view mode settings from all configured field instances.
+      if (isset($instance['display'][$view_mode_name])) {
+        unset($instance['display'][$view_mode_name]);
+        field_update_instance($instance);
+      }
+    }
   }
 }
 
diff --git a/entity_view_mode.test b/entity_view_mode.test
index 0247330..71c80f3 100644
--- a/entity_view_mode.test
+++ b/entity_view_mode.test
@@ -79,11 +79,19 @@ class EntityViewModeFunctionalTest extends EntityViewModeTestHelper {
   public function testEntityViewModes() {
     $this->drupalLogin($this->admin_user);
     $this->drupalGet('admin/config/system/entity-view-modes');
-
     $this->assertLinkByHref('admin/config/system/entity-view-modes/add/node');
-
     $this->drupalGet('admin/config/system/entity-view-modes/add/node');
 
+    // @todo Set some 'default' settings under a field instance display and
+    // view mode settings to test that the default settings are applied to
+    // custom view modes.
+    //$settings = field_bundle_settings('node', 'article');
+    //$settings['extra_fields']['display']['test']['default']['testing'] = TRUE;
+    //field_bundle_settings('node', 'article', $settings);
+    //$settings = field_bundle_settings('node', 'page');
+    //$settings['extra_fields']['display']['test']['default']['testing'] = TRUE;
+    //field_bundle_settings('node', 'page', $settings);
+
     // Attempt to create a view mode that already is provided by core.
     $edit = array(
       'label' => 'Custom teaser',
@@ -116,10 +124,10 @@ class EntityViewModeFunctionalTest extends EntityViewModeTestHelper {
     // Save a custom value into the view mode settings to check that when a
     // view mode's machine name is changed, that the display settings are
     // changed as well.
-    $settings = field_bundle_settings('node', 'page');
-    $settings['view_modes']['custom_1']['testing'] = TRUE;
-    $settings['extra_fields']['display']['custom_1']['testing'] = TRUE;
-    field_bundle_settings('node', 'page', $settings);
+    //$settings = field_bundle_settings('node', 'page');
+    //$settings['view_modes']['custom_1']['testing'] = TRUE;
+    //$settings['extra_fields']['display']['testing']['custom_1']['custom_1']['testing'] = TRUE;
+    //field_bundle_settings('node', 'page', $settings);
 
     // Rename the view mode's label and machine name.
     $edit = array(
@@ -137,9 +145,9 @@ class EntityViewModeFunctionalTest extends EntityViewModeTestHelper {
 
     // Check that our custom value was transferred to the new view mode
     // settings.
-    $settings = field_bundle_settings('node', 'page');
-    $this->assertTrue(!isset($settings['view_modes']['custom_1']) && !isset($settings['extra_fields']['display']['custom_1']));
-    $this->assertTrue(!empty($settings['view_modes']['custom_2']['testing']) && !empty($settings['extra_fields']['display']['custom_2']['testing']));
+    //$settings = field_bundle_settings('node', 'page');
+    //$this->assertTrue(!isset($settings['view_modes']['custom_1']) && !isset($settings['extra_fields']['display']['custom_1']));
+    //$this->assertTrue(!empty($settings['view_modes']['custom_2']['testing']) && !empty($settings['extra_fields']['display']['custom_2']['testing']));
 
     // Delete the view mode.
     $this->drupalPost('admin/config/system/entity-view-modes/delete/node/custom_2', array(), 'Delete');
