diff --git a/tablefield.module b/tablefield.module
index 26df893..a8ee85d 100644
--- a/tablefield.module
+++ b/tablefield.module
@@ -406,11 +406,13 @@ function tablefield_field_widget_form(&$form, &$form_state, $field, $instance, $
   }
   elseif ($form_state['submitted'] && isset($items[$delta]) && isset($items[$delta]['tablefield'])) {
     // A form was submitted
-    $default_value = tablefield_rationalize_table($items[$delta]['tablefield']);
+    //handle case where table content exists in other tablefields but hasn't been saved yet
+    $default_value = tablefield_handle_unsaved_fields($form_state, $field, $instance, $langcode, $items[$delta]['tablefield'], $delta, tablefield_rationalize_table($items[$delta]['tablefield']));
   }
   elseif (isset($items[$delta]['value'])) {
     // Default from database (saved node)
-    $default_value = tablefield_rationalize_table(unserialize($items[$delta]['value']));
+    //handle case where table content that existed previously in the database was modified and is not the current clicked item    
+    $default_value = tablefield_handle_unsaved_fields($form_state, $field, $instance, $langcode, unserialize($items[$delta]['value']), $delta, tablefield_rationalize_table(unserialize($items[$delta]['value'])));
   }
   else {
     // After the first table, we don't want to populate the values in the table
@@ -642,6 +644,22 @@ function tablefield_field_widget_form(&$form, &$form_state, $field, $instance, $
 }
 
 /**
+ *  Handle situations where unsaved tablefield content is present in the form for fields other
+ *  than the last submitted/modified tablefield
+ */
+function tablefield_handle_unsaved_fields($form_state, $field, $instance, $langcode, $saved_items, $delta, $def_val) {
+    if (!empty($form_state['input']) && isset($form_state['input'][$field['field_name']][$langcode][$delta]['tablefield'])) {      
+      //if form input exists for the field, merge defaults with existing form input to propogate all cells
+      $modified_table = array_merge($instance['default_value'][0]['tablefield'], $form_state['input'][$field['field_name']][$langcode][$delta]['tablefield']);
+      $diff_array = array_diff($modified_table, $saved_items);
+      if (!empty($diff_array)) {
+        $def_val = tablefield_rationalize_table($modified_table);
+      }
+    }
+    return $def_val;
+}
+
+/**
  * Helper function to import data from a CSV file
  * @param array $form
  * @param array $form_state
