Index: hierarchical_select.js
===================================================================
--- hierarchical_select.js	(revision 54)
+++ hierarchical_select.js	(working copy)
@@ -5,7 +5,7 @@
 Drupal.behaviors.HierarchicalSelect = function (context) {
   $('.hierarchical-select-wrapper:not(.hierarchical-select-wrapper-processed)', context)
   .addClass('hierarchical-select-wrapper-processed').each(function() {
-    var hsid = $(this).attr('id').replace(/^hierarchical-select-(\d+)-wrapper$/, "$1");
+    var hsid = $('.hierarchical-hsid', this).val();
     Drupal.HierarchicalSelect.initialize(hsid);
   });
 };
Index: hierarchical_select.module
===================================================================
--- hierarchical_select.module	(revision 54)
+++ hierarchical_select.module	(working copy)
@@ -375,28 +375,9 @@
  * Hierarchical select form element type #process callback.
  */
 function hierarchical_select_process($element, $edit, &$form_state, $form) {
-  if (!is_array($element['#value']) || !isset($element['#value']['hsid'])) {
-    // The HSID is stored in the session, to allow for multiple Hierarchical
-    // Select form items on the same page of which at least one is added through
-    // AHAH. A normal static variable won't do in this case, because then at
-    // least two Hierarchical Select form items will have HSID 0, because they
-    // are generated in different requests, both of which will have a first HSID
-    // of 0. This will then cause problems on the page. 
-    if (!isset($_SESSION['hsid'])) {
-      $_SESSION['hsid'] = 0;
-    }
-    else {
-      // Let the HSID go from 0 to 99, then start over. Larger numbers are
-      // pointless: who's going to use more than a hundred Hierarchical Select
-      // form items on the same page?
-      $_SESSION['hsid'] = ($_SESSION['hsid'] + 1) % 100;
-    }
-    $hsid = $_SESSION['hsid'];
-  }
-  else {
-    $hsid = check_plain($element['#value']['hsid']);
-  }
-  $element['hsid'] = array('#type' => 'hidden', '#value' => $hsid);
+  $hsid = $element['#id'];
+  
+  $element['hsid'] = array('#type' => 'hidden', '#value' => $hsid, '#attributes' => array('class' => 'hierarchical-hsid'));
   // A hierarchical_select form element expands to multiple items. For example
   // $element['hsid'] got set just above. If #value is not an array, then
   // form_set_value(), which is called by form_builder() will fail, because it
