--- modules/coppa/coppa_email/coppa_email.1.module	Thu Feb 24 18:09:03 2011
+++ modules/coppa/coppa_email/coppa_email.module	Sat Jan 14 10:52:29 2012
@@ -14,8 +14,24 @@
     case 'user_register':
       if (!in_array('coppa_email_user_register_validate', $form['#validate'])) {
         $form['#validate'][] = 'coppa_email_user_register_validate';
+        $form['#submit'][] = 'coppa_email_user_register_submit';
       }
       if ($form_state['storage']['parent_email']) {
+        $field = variable_get('coppa_dob_field', 'profile_dob');
+        $type = variable_get('coppa_dob_field_type', 'profile');
+        drupal_set_message("For COPPA compliance, please enter your parent or guardian's email address.", 'warning');
+        // Attempt to retain form values.
+	 if ($type == 'profile') {
+          $profile_category = db_result(db_query("SELECT category FROM {profile_fields} WHERE name = '%s'", $field));
+	   $form['account']['name']['#default_value'] = $form_state['storage']['values']['name'];
+          $form['account']['mail']['#default_value'] = $form_state['storage']['values']['mail'];
+	   $form[$profile_category][$field]['#default_value'] = $form_state['storage']['values'][$field];
+        }
+        else {
+          $form['name']['#default_value'] = $form_state['storage']['values']['name'];
+          $form['mail']['#default_value'] = $form_state['storage']['values']['mail'];
+        }
+        $form_state['values'] = $form_state['storage']['values'];
         $form['parent_email'] = array(
           '#type' => 'textfield',
           '#required' => TRUE,
@@ -25,6 +41,7 @@
           '#default_value' => $form_state['values']['parent_email'],
         );
       }
+    break;
   }
 }
 
@@ -35,11 +52,17 @@
 function coppa_email_user_register_validate($form, &$form_state) {
   // Check age.
   $age = _coppa_get_dob_form($form, $form_state);
-  if (coppa_age($age) < COPPA_AGE) {
+  if (coppa_age($age) < COPPA_AGE && $form_state['values']['parent_email'] == FALSE) {
     $form_state['storage']['parent_email'] = TRUE;
+    $form_state['storage']['values'] = $form_state['values'];
+    $form_state['rebuild'] = TRUE;
   }
 }
 
+function coppa_email_user_register_submit($form, &$form_state) {
+  unset($form_state['storage']);
+}
+
 /**
  * Valid email wrapper.
  */
@@ -52,6 +75,14 @@
     // Parent/guardian's email can't be the same as the registration email.
     form_set_error($element['#name'], t("You must use your parent or guardian's email address, not your own."));
   }
-  var_dump($form_state);
-  form_set_error($element['#name']);
-}
\ No newline at end of file
+  // var_dump($form_state);
+  // form_set_error($element['#name']);
+}
+
+/**
+ * Check if parent email address is in {coppa_email} database table.
+ */
+function coppa_email_check_parent($email) {
+  $cid = db_result(db_query("SELECT cid FROM {coppa_email} WHERE mail='%s'", $email));
+  return $cid;
+}
