=== modified file 'includes/form.inc'
--- includes/form.inc	
+++ includes/form.inc	
@@ -582,10 +582,11 @@ function theme_password_confirm($element
  * Build password_confirm element.
  */
 function password_confirm_after_build($form, $form_values, &$ref) {
-  if (isset($form_values['pass1'])) {
-    $pass1 = trim($form_values['pass1']);
-    $pass2 = trim($form_values['pass2']);
-    unset($form_values['pass1'], $form_values['pass2']);
+  if (isset($form_values['pass1']['value'])) {
+    $pass1 = trim($form_values['pass1']['value']);
+    $pass2 = trim($form_values['pass2']['value']);
+    $form_values['pass1']['ref'] = NULL;
+    $form_values['pass2']['ref'] = NULL;
     if ($pass1 != $pass2) {
       form_set_error('pass1', t('The specified passwords do not match.'));
     }
@@ -597,6 +598,11 @@ function password_confirm_after_build($f
   return $form;
 }
 
+function password_confirm_prepare($form, $form_values, &$ref) {
+  $ref = array('ref' => &$ref, 'value' => $ref);
+  return $form;
+}
+
 /**
  * Format a date selection element.
  *
=== modified file 'modules/system.module'
--- modules/system.module	
+++ modules/system.module	
@@ -66,8 +66,8 @@ function system_elements() {
   $type['password_confirm'] = array(
     '#input' => TRUE,
     '#value' => 'pass',
-    'pass1' => array('#type' => 'password', '#size' => 12, '#maxlength' => 24),
-    'pass2' => array('#type' => 'password', '#size' => 12, '#maxlength' => 24),
+    'pass1' => array('#type' => 'password', '#size' => 12, '#maxlength' => 24, '#after_build' => 'password_confirm_prepare'),
+    'pass2' => array('#type' => 'password', '#size' => 12, '#maxlength' => 24, '#after_build' => 'password_confirm_prepare'),
     '#after_build' => 'password_confirm_after_build',
   );
   $type['textarea'] = array('#input' => TRUE, '#cols' => 60, '#rows' => 5);
