diff --git a/includes/form.inc b/includes/form.inc
index 3102701123451322fa888120e2237b81fa8756ce..5e75326fffc2722d6ea38df088a4eeb99efcd1e1 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -197,6 +197,12 @@ function drupal_submit_form($form_id, $form, $callback = NULL) {
 }
 
 function _form_validate($elements, $form_id = NULL) {
+  // Recurse through all children.
+  foreach (element_children($elements) as $key) {
+    if (isset($elements[$key]) && $elements[$key]) {
+      _form_validate($elements[$key]);
+    }
+  }
   /* Validate the current input */
   if (!$elements['#validated']) {
     if (isset($elements['#needs_validation'])) {
@@ -246,13 +252,6 @@ function _form_validate($elements, $form_id = NULL) {
     }
     $elements['#validated'] = TRUE;
   }
-
-  // Recurse through all children.
-  foreach (element_children($elements) as $key) {
-    if (isset($elements[$key]) && $elements[$key]) {
-      _form_validate($elements[$key]);
-    }
-  }
 }
 
 /**