diff --git a/tablefield.module b/tablefield.module
index 8f88022..9cb13b2 100644
--- a/tablefield.module
+++ b/tablefield.module
@@ -22,6 +22,9 @@ function tablefield_field_info() {
       'default_widget' => 'tablefield',
       'default_formatter' => 'default',
     ),
+//    'table_title' => array(
+//      'label' =>
+//    ),
   );
 }
 
@@ -58,6 +61,10 @@ function tablefield_field_settings_form($field, $instance, $has_data) {
 function tablefield_field_schema($field) {
   return array(
     'columns' => array(
+      'table_title' => array(
+        'type' => 'varchar',
+        'length' => 255,
+      ),
       'value' => array(
         'type' => 'text',
         'size' => 'big',
@@ -79,9 +86,15 @@ function tablefield_field_presave($entity_type, $entity, $field, $instance, $lan
     if (empty($table['value'])) {
       $tablefield = array();
       foreach ($table['tablefield'] as $key => $value) {
-        $tablefield[$key] = $value;
+        if ($key == "table_title") {
+          $table_title = $value;
+        }
+        else {
+          $tablefield[$key] = $value;
+        }
       }
       $items[$delta]['value'] = serialize($tablefield);
+      $items[$delta]['table_title'] = $table_title;
     }
     elseif (empty($table['tablefield'])) {
       // Batch processing only provides the 'value'
@@ -199,7 +212,19 @@ function tablefield_field_formatter_view($entity_type, $entity, $field, $instanc
       $header = array_shift($tabledata);
 
       // Theme the table for display
-      $element[$delta]['#markup'] = theme('tablefield_view', array('header' => $header, 'rows' => $tabledata, 'delta' => $delta));
+      $element[$delta]['table_field_wrapper'] = array(
+        '#prefix' => '<div class="table-field-wrapper">',
+        '#suffix' => '</div>',
+        '#weight' => 10,
+        '#markup' => theme('tablefield_view', array('header' => $header, 'rows' => $tabledata, 'delta' => $delta)),
+      );
+    }
+
+    if ($table['table_title'] !== '') {
+      $element[$delta]['table_field_header'] = array(
+        '#weight' => 5,
+        '#markup' => "<h1 class='table-field-header'>" . $table['table_title'] . "</h1>",
+      );
     }
 
   }
@@ -450,6 +475,13 @@ function tablefield_field_widget_form(&$form, &$form_state, $field, $instance, $
     $element['#format'] = isset($items[$delta]['format']) ? $items[$delta]['format'] : NULL;
   }
 
+  $element['tablefield']['table_title'] = array(
+      '#type' => 'textfield',
+      '#title' => 'Table Title',
+      '#default_value' => isset($items[$delta]['table_title']) ? $items[$delta]['table_title'] : '',
+      '#weight' => -10,
+  );
+
   return $element;
 }
 
@@ -540,7 +572,7 @@ function tablefield_rebuild_form_ajax($form, $form_state) {
         $delta = $parent;
       }
       $tmp = $rebuild;
-  
+
       if ($parent == 'rebuild' || $parent == 'import') {
         $rebuild = $delta == 0 ? $tmp[$parent] : $tmp;
         //$rebuild = $tmp[$parent];
@@ -605,10 +637,12 @@ function tablefield_rationalize_table($tablefield) {
   // Rationalize the table data
   if (!empty($tablefield)) {
     foreach ($tablefield as $key => $value) {
-      preg_match('/cell_(.*)_(.*)/', $key, $cell);
-      // $cell[1] is row count $cell[2] is col count
-      if ((int) $cell[1] < $count_rows && $cell['2'] < $count_cols) {
-        $tabledata[$cell[1]][$cell[2]] = $value;
+      if ($key !== "table_title") {
+        preg_match('/cell_(.*)_(.*)/', $key, $cell);
+        // $cell[1] is row count $cell[2] is col count
+        if ((int) $cell[1] < $count_rows && $cell['2'] < $count_cols) {
+          $tabledata[$cell[1]][$cell[2]] = $value;
+        }
       }
     }
   }
