diff --git tablefield.module tablefield.module
index f749b69..8529395 100644
--- tablefield.module
+++ tablefield.module
@@ -31,6 +31,11 @@ function tablefield_field_info() {
  */
 function tablefield_field_settings_form($field, $instance, $has_data) {
   $form = array();
+  $form['lock_values'] = array(
+    '#type' => 'checkbox',
+    '#title' => 'Lock table field defaults from further edits during node add/edit.',
+    '#default_value' => isset($field['settings']['lock_values']) ? $field['settings']['lock_values'] : FALSE,
+  );
   $form['cell_processing'] = array(
     '#type' => 'radios',
     '#title' => t('Table cell processing'),
@@ -314,20 +319,38 @@ function tablefield_field_widget_form(&$form, &$form_state, $field, $instance, $
       '#markup' => '<tr class="tablefield-row-' . $i . ' ' . $zebra . '">',
     );
     for ($ii = 0; $ii < $count_cols; $ii++) {
-      $cell_default = isset($default_value[$i][$ii]) ? $default_value[$i][$ii] : '';
-      $element['tablefield']['cell_' . $i . '_' . $ii] = array(
-        '#type' => 'textfield',
-        '#maxlength' => 2048,
-        '#size' => 0,
-        '#attributes' => array(
-          'id' => 'tablefield_' . $delta . '_cell_' . $i . '_' . $ii,
-          'class' => array('tablefield-row-' . $i, 'tablefield-col-' . $ii),
-          'style' => 'width:100%'
-        ),
-        '#default_value' => (empty($field_value)) ? $cell_default : $field_value,
-        '#prefix' => '<td style="width:' . floor(100/$count_cols) . '%">',
-        '#suffix' => '</td>',
-      );
+      $instance_default = $instance['default_value'][$delta]['tablefield']["cell_{$i}_{$ii}"];
+      if (!empty($instance_default) && !empty($field['settings']['lock_values']) && $arg0 != 'admin') {
+        // The value still needs to be send on every load in order for the
+        // table to be saved correctly.
+        $element['tablefield']['cell_' . $i . '_' . $ii] = array(
+          '#type' => 'value',
+          '#value' => $instance_default,
+        );
+        // Display the default value, since it's not editable.
+        $element['tablefield']['cell_' . $i . '_' . $ii . '_display'] = array(
+          '#type' => 'item',
+          '#title' => $instance_default,
+          '#prefix' => '<td style="width:' . floor(100/$count_cols) . '%">',
+          '#suffix' => '</td>',
+        );
+      }
+      else {
+        $cell_default = isset($default_value[$i][$ii]) ? $default_value[$i][$ii] : '';
+        $element['tablefield']['cell_' . $i . '_' . $ii] = array(
+          '#type' => 'textfield',
+          '#maxlength' => 2048,
+          '#size' => 0,
+          '#attributes' => array(
+            'id' => 'tablefield_' . $delta . '_cell_' . $i . '_' . $ii,
+            'class' => array('tablefield-row-' . $i, 'tablefield-col-' . $ii),
+            'style' => 'width:100%'
+          ),
+          '#default_value' => (empty($field_value)) ? $cell_default : $field_value,
+          '#prefix' => '<td style="width:' . floor(100/$count_cols) . '%">',
+          '#suffix' => '</td>',
+        );
+      }
     }
     $element['tablefield']['c_break' . $i] = array(
       '#markup' => '</tr>',
