diff --git a/entity_view_mode.module b/entity_view_mode.module
index cec996e..d5cd707 100644
--- a/entity_view_mode.module
+++ b/entity_view_mode.module
@@ -74,7 +74,16 @@ function entity_view_mode_menu() {
  * Load a custom entity view mode by entity type and machine name.
  */
 function entity_view_mode_load($entity_type, $machine_name) {
+  // retrieve all Viewmodes
   $view_modes = variable_get('entity_view_modes', array());
+  // convenience assignment of the requested Entity's requested View Mode
+  $current_view_mode =& $view_modes[$entity_type][$machine_name];
+  // checks to ensure that information was found
+  if ($current_view_mode && is_array($current_view_mode)) {
+    // both hook_entity_view_mode_update & hook_entity_view_mode_delete
+    // expect that the returned value have the machine_name as one of the array keys
+    $current_view_mode['machine_name'] = $machine_name;
+  }
   return !empty($view_modes[$entity_type][$machine_name]) ? $view_modes[$entity_type][$machine_name] : FALSE;
 }
 
@@ -82,12 +91,12 @@ function entity_view_mode_load($entity_type, $machine_name) {
  * Save a custom entity view mode.
  */
 function entity_view_mode_save($entity_type, $view_mode) {
-  $existing_view_mode = !empty($view_mode['old_machine_name']) ? $view_mode['old_machine_name'] : $view_mode['machine_name'];
+  $view_mode_machine_name = !empty($view_mode['old_machine_name']) ? $view_mode['old_machine_name'] : $view_mode['machine_name'];
   $view_mode_name = $view_mode['machine_name'];
 
   // Load the original, unchanged view mode, if it exists.
-  if ($original = entity_view_mode_load($entity_type, $existing_view_mode)) {
-    $view_mode['original'] = $original + array('machine_name' => $existing_view_mode);
+  if ($original = entity_view_mode_load($entity_type, $view_mode_machine_name)) {
+    $view_mode['original'] = $original + array('machine_name' => $view_mode_machine_name);
     unset($view_mode['old_machine_name']);
   }
 
@@ -100,25 +109,34 @@ 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'] = !isset($view_mode['original']) ? TRUE : FALSE;
+    $is_new              = $view_mode['is_new'];
   }
 
   // Let modules modify the view mode before it is saved.
   module_invoke_all('entity_view_mode_presave', $view_mode, $entity_type);
 
-  // Save the view mode.
+  // Retrieve View Modes from variables table.
   $view_modes = variable_get('entity_view_modes', array());
-  unset($view_modes[$entity_type][$existing_view_mode]);
+
+  // Check if the view mode was already there (meaning this is an update not save) and if so, unset it.
+  if (isset($view_modes[$entity_type][$view_mode_machine_name])) {
+    unset($view_modes[$entity_type][$view_mode_machine_name]);
+  }
+
+  // Prepare the new View Mode settings array for saving, merging values provided by modules implementing hook_entity_view_mode_presave()
   $view_modes[$entity_type][$view_mode_name] = array_intersect_key($view_mode, drupal_map_assoc(array('label', 'custom settings')));
+  // Update the View Mode settings array with necessary values.
   $view_modes[$entity_type][$view_mode_name] += array('custom settings' => TRUE);
+  $view_modes[$entity_type][$view_mode_name] += array('machine_name'    => $view_mode_machine_name);
   variable_set('entity_view_modes', $view_modes);
 
   // Allow modules to respond after the view mode is saved.
   if ($view_mode['is_new']) {
-    module_invoke_all('entity_view_mode_insert', $view_mode, $entity_type);
+    module_invoke_all('entity_view_mode_insert', $view_mode, $entity_type, $is_new);
   }
   else {
-    module_invoke_all('entity_view_mode_update', $view_mode, $entity_type);
+    module_invoke_all('entity_view_mode_update', $view_mode, $entity_type, $is_new);
   }
 
   // Clear internal properties.
@@ -150,14 +168,14 @@ function entity_view_mode_delete($entity_type, $machine_name) {
 /**
  * Implements hook_entity_view_mode_insert() on behalf of core field module.
  */
-function field_entity_view_mode_insert($view_mode, $entity_type) {
-  field_entity_view_mode_update($view_mode, $entity_type);
+function field_entity_view_mode_insert($view_mode, $entity_type, $is_new) {
+  field_entity_view_mode_update($view_mode, $entity_type, $is_new);
 }
 
 /**
  * Implements hook_entity_view_mode_update() on behalf of core field module.
  */
-function field_entity_view_mode_update($view_mode, $entity_type) {
+function field_entity_view_mode_update($view_mode, $entity_type, $is_new) {
   module_load_include('inc', 'field_ui', 'field_ui.admin');
   $entity_info = entity_get_info($entity_type);
   $view_mode_name = $view_mode['machine_name'];
@@ -169,14 +187,14 @@ function field_entity_view_mode_update($view_mode, $entity_type) {
   //}
 
   if (!empty($view_mode['enabled_bundles'])) {
-    foreach ($view_mode['enabled_bundles'] as $bundle => $value) {
+    foreach ($view_mode['enabled_bundles'] as $bundle => $bundle_name) {
       $bundle_settings = field_bundle_settings($entity_type, $bundle);
 
       // Display a message for each view mode newly configured to use custom
       // 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'];
+      if (!empty($bundle_name) && empty($view_mode_settings[$view_mode_name]['custom_settings'])) {
+        $view_mode_label = ($is_new) ? $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,
@@ -184,13 +202,12 @@ function field_entity_view_mode_update($view_mode, $entity_type) {
           '@bundle' => $entity_info['bundles'][$bundle]['label'],
           '@url' => url($path),
         )));
-        // Initialize the newly customized view mode with the display settings
-        // from the default view mode.
+        // Initialize the newly customized view mode with the display settings from the default view mode.
         _field_ui_add_default_view_mode_settings($entity_type, $bundle, $view_mode_name, $bundle_settings);
       }
 
       // Save updated bundle settings.
-      $bundle_settings['view_modes'][$view_mode_name]['custom_settings'] = !empty($value);
+      $bundle_settings['view_modes'][$view_mode_name]['custom_settings'] = !empty($bundle_name);
       field_bundle_settings($entity_type, $bundle, $bundle_settings);
     }
   }
@@ -207,7 +224,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);
     }
 
