diff --git a/core/includes/form.inc b/core/includes/form.inc
index 0ef70f8..a256827 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -1600,13 +1600,13 @@ function form_execute_handlers($type, &$form, &$form_state) {
  * @see http://drupal.org/node/763376
  */
 function form_set_error($name = NULL, $message = '', $limit_validation_errors = NULL) {
-  $form = &drupal_static(__FUNCTION__, array());
+  $errors = &drupal_static(__FUNCTION__ . ':scoped_errors', array());
   $sections = &drupal_static(__FUNCTION__ . ':limit_validation_errors');
   if (isset($limit_validation_errors)) {
     $sections = $limit_validation_errors;
   }
 
-  if (isset($name) && !isset($form[$name])) {
+  if (isset($name) && isset($_POST['form_id']) && $message) {
     $record = TRUE;
     if (isset($sections)) {
       // #limit_validation_errors is an array of "sections" within which user
@@ -1632,14 +1632,19 @@ function form_set_error($name = NULL, $message = '', $limit_validation_errors =
       }
     }
     if ($record) {
-      $form[$name] = $message;
-      if ($message) {
+      $form_id = $_POST['form_id'];
+      if (!isset($errors[$form_id][$name])) {
+        $errors[$form_id][$name] = array();
+      }
+      $msgs = &$errors[$form_id][$name];
+      if (!in_array($message, $msgs)) {
+        $msgs[] = $message;
         drupal_set_message($message, 'error');
       }
     }
   }
 
-  return $form;
+  return $errors;
 }
 
 /**
@@ -1666,13 +1671,19 @@ function form_get_errors() {
  * errors on the element itself.
  */
 function form_get_error($element) {
-  $form = form_set_error();
+  $form_id = $element['#form_id'];
+  $errors = form_set_error();
+  if (!isset($errors[$form_id])) {
+    return; // Form has no errors
+  }
+  $form_errors = $errors[$form_id];
+
   $parents = array();
   foreach ($element['#parents'] as $parent) {
     $parents[] = $parent;
     $key = implode('][', $parents);
-    if (isset($form[$key])) {
-      return $form[$key];
+    if(isset($form_errors[$key])) {
+      return $form_errors[$key];
     }
   }
 }
@@ -1885,6 +1896,7 @@ function form_builder($form_id, &$element, &$form_state) {
     $array_parents = $element['#array_parents'];
     $array_parents[] = $key;
     $element[$key]['#array_parents'] = $array_parents;
+    $element[$key]['#form_id'] = $form_id;
 
     // Assign a decimal placeholder weight to preserve original array order.
     if (!isset($element[$key]['#weight'])) {
