Index: theme.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/theme.inc,v
retrieving revision 1.382
diff -u -p -r1.382 theme.inc
--- theme.inc	10 Sep 2007 13:28:22 -0000	1.382
+++ theme.inc	17 Sep 2007 00:30:16 -0000
@@ -1282,20 +1282,23 @@ function theme_table($header, $rows, $at
     drupal_add_js('misc/tableheader.js');
 
     $ts = tablesort_init($header);
-    $output .= ' <thead><tr>';
+    /* HTML requires that the thead tag has tr tags in it follwed by tbody
+    tags.  Using ternary operator to check and see if we have any rows. */
+    $output .= (count($rows)? ' <thead><tr>' : ' <tr>');
     foreach ($header as $cell) {
       $cell = tablesort_header($cell, $header, $ts);
       $output .= _theme_table_cell($cell, TRUE);
     }
-    $output .= " </tr></thead>\n";
+    // Using ternary operator to close the tags based on whether or not there are rows
+    $output .= (count($rows)? " </tr></thead>\n" : "</tr>\n");
   }
   else {
     $ts = array();
   }
 
   // Format the table rows:
-  $output .= "<tbody>\n";
   if (count($rows)) {
+    $output .= "<tbody>\n";
     $flip = array('even' => 'odd', 'odd' => 'even');
     $class = 'even';
     foreach ($rows as $number => $row) {
@@ -1334,10 +1337,10 @@ function theme_table($header, $rows, $at
         }
         $output .= " </tr>\n";
       }
+      $output .= '</tbody>';
     }
   }
-
-  $output .= "</tbody></table>\n";
+  $output .= "</table>\n";
   return $output;
 }
 
