Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.378
diff -u -p -r1.378 form.inc
--- includes/form.inc	3 Oct 2009 20:17:46 -0000	1.378
+++ includes/form.inc	4 Oct 2009 15:35:01 -0000
@@ -1299,6 +1299,35 @@ function _form_builder_ie_cleanup($form,
 }
 
 /**
+ * Helper function to remove common Form API elements from submitted form values.
+ *
+ * This function may be used when all submitted values of a form need to be
+ * processed for storage, so internal Form API values and button elements should
+ * not be contained. The following values are removed when they exist:
+ * - form_id
+ * - form_token
+ * - form_build_id
+ * - op
+ * - submit
+ * - preview
+ * - reset
+ * - cancel
+ *
+ * @param &$form_state
+ *   A keyed array containing the current state of the form, including
+ *   submitted form values.
+ *
+ * @return
+ *   None. $form_state['values'] is altered by reference.
+ */
+function form_state_values_clean(&$form_state) {
+  // Remove internal Form API values.
+  unset($form_state['values']['form_id'], $form_state['values']['form_token'], $form_state['values']['form_build_id']);
+  // Remove common submit handler values.
+  unset($form_state['values']['op'], $form_state['values']['submit'], $form_state['values']['preview'], $form_state['values']['reset'], $form_state['values']['cancel']);
+}
+
+/**
  * Helper function to determine the value for an image button form element.
  *
  * @param $form
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.800
diff -u -p -r1.800 system.module
--- modules/system/system.module	30 Sep 2009 18:36:02 -0000	1.800
+++ modules/system/system.module	4 Oct 2009 15:33:15 -0000
@@ -2225,7 +2225,7 @@ function system_settings_form($form, $au
  */
 function system_settings_form_submit($form, &$form_state) {
   // Exclude unnecessary elements.
-  unset($form_state['values']['submit'], $form_state['values']['reset'], $form_state['values']['form_id'], $form_state['values']['op'], $form_state['values']['form_token'], $form_state['values']['form_build_id']);
+  form_state_values_clean($form_state);
 
   foreach ($form_state['values'] as $key => $value) {
     if (is_array($value) && isset($form_state['values']['array_filter'])) {
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.1055
diff -u -p -r1.1055 user.module
--- modules/user/user.module	2 Oct 2009 14:49:10 -0000	1.1055
+++ modules/user/user.module	4 Oct 2009 15:33:15 -0000
@@ -3066,7 +3066,8 @@ function user_register_submit($form, &$f
   }
   // The unset below is needed to prevent these form values from being saved as
   // user data.
-  unset($form_state['values']['form_token'], $form_state['values']['submit'], $form_state['values']['op'], $form_state['values']['notify'], $form_state['values']['form_id'], $form_state['values']['affiliates'], $form_state['values']['destination'], $form_state['values']['form_build_id']);
+  form_state_values_clean($form_state);
+  unset($form_state['values']['notify']);
 
   $merge_data = array('pass' => $pass, 'init' => $mail, 'roles' => $roles);
   if (!$admin) {
Index: modules/user/user.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.pages.inc,v
retrieving revision 1.57
diff -u -p -r1.57 user.pages.inc
--- modules/user/user.pages.inc	29 Sep 2009 15:31:17 -0000	1.57
+++ modules/user/user.pages.inc	4 Oct 2009 15:33:15 -0000
@@ -274,7 +274,8 @@ function user_profile_form_validate($for
 function user_profile_form_submit($form, &$form_state) {
   $account = $form['#user'];
   $category = $form['#user_category'];
-  unset($form_state['values']['op'], $form_state['values']['submit'], $form_state['values']['cancel'], $form_state['values']['form_token'], $form_state['values']['form_id'], $form_state['values']['form_build_id']);
+  // Remove unneeded values.
+  form_state_values_clean($form_state);
 
   $edit = (object)$form_state['values'];
   field_attach_submit('user', $edit, $form, $form_state);
