diff --git includes/form.inc includes/form.inc
index d438c77..281440f 100644
--- includes/form.inc
+++ includes/form.inc
@@ -1904,6 +1904,34 @@ function form_type_checkboxes_value($element, $input = FALSE) {
 }
 
 /**
+ * Helper function to determine the value for a tableselect form element.
+ *
+ * @param $element
+ *   The form element whose value is being populated.
+ * @param $input
+ *   The incoming input to populate the form element. If this is FALSE,
+ *   the element's default value should be returned.
+ * @return
+ *   The data that will appear in the $element_state['values'] collection
+ *   for this element. Return nothing to use the default.
+ */
+function form_type_tableselect_value($element, $input = FALSE) {
+  if (isset($element['#multiple']) && $element['#multiple']) {
+    if ($input === FALSE) {
+      $value = array();
+      $element += array('#default_value' => array());
+      foreach ($element['#default_value'] as $key) {
+        $value[$key] = $key;
+      }
+      return $value;
+    }
+    else {
+      return is_array($input) ? drupal_map_assoc($input) : array();
+    }
+  }
+}
+
+/**
  * Helper function to determine the value for a password_confirm form
  * element.
  *
