diff --git a/includes/theme.inc b/includes/theme.inc
index 4c454ba..4039d37 100644
--- a/includes/theme.inc
+++ b/includes/theme.inc
@@ -1817,6 +1817,12 @@ function theme_breadcrumb($variables) {
  *     - "sort": A default sort order for this column ("asc" or "desc").
  *     - Any HTML attributes, such as "colspan", to apply to the column header
  *       cell.
+ *   - footer: An array containing the table footers. Each element of the array
+ *     can be either a localized string or an associative array with the
+ *     following keys:
+ *     - "data": The localized summary information of the table column.
+ *     - Any HTML attributes, such as "colspan", to apply to the column footer
+ *       cell.
  *   - rows: An array of table rows. Every row is an array of cells, or an
  *     associative array with the following keys:
  *     - "data": an array of cells
@@ -1880,6 +1886,7 @@ function theme_breadcrumb($variables) {
  */
 function theme_table($variables) {
   $header = $variables['header'];
+  $footer = $variables['footer'];
   $rows = $variables['rows'];
   $attributes = $variables['attributes'];
   $caption = $variables['caption'];
@@ -1967,6 +1974,20 @@ function theme_table($variables) {
     $ts = array();
   }
 
+  // Format the table footer:
+  if (count($footer)) {
+    // HTML requires that the tfoot tag has tr tags in it followed by tbody
+    // tags. Using ternary operator to check and see if we have any rows.
+    $output .= (count($rows) ? ' <tfoot><tr>' : ' <tr>');
+    $i = 0;
+    foreach ($footer as $cell) {
+      $cell = tablesort_cell($cell, $header, $ts, $i++);
+      $output .= _theme_table_cell($cell);
+    }
+    // Using ternary operator to close the tags based on whether or not there are rows
+    $output .= (count($rows) ? " </tr></tfoot>\n" : "</tr>\n");
+  }
+
   // Format the table rows:
   if (count($rows)) {
     $output .= "<tbody>\n";
