Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.226
diff -u -p -r1.226 form.inc
--- includes/form.inc	25 Sep 2007 11:29:10 -0000	1.226
+++ includes/form.inc	25 Sep 2007 14:41:14 -0000
@@ -1965,7 +1965,8 @@ function _form_set_class(&$element, $cla
 }
 
 /**
- * Remove invalid characters from an HTML ID attribute string.
+ * Prepare an HTML ID attribute string by removing invalid characters and
+ * guaranteeing uniqueness.
  *
  * @param $id
  *   The ID to clean.
@@ -1973,7 +1974,19 @@ function _form_set_class(&$element, $cla
  *   The cleaned ID.
  */
 function form_clean_id($id = NULL) {
+  static $seen_ids = array();
+
   $id = str_replace(array('][', '_', ' '), '-', $id);
+
+  // Ensure id's are unique. The first occurrence is held but left alone.
+  // Subsequent occurrences get a number appended to them.
+  if (isset($seen_ids[$id])) {
+    $id = $id .'-'. $seen_ids[$id]++;
+  }
+  else {
+    $seen_ids[$id] = 1;
+  }
+
   return $id;
 }
 
