Index: includes/form.inc
===================================================================
--- includes/form.inc	(revision 978)
+++ includes/form.inc	(working copy)
@@ -69,8 +69,8 @@
     $form = call_user_func_array('drupal_retrieve_form', $args);
     if (isset($form['#multistep']) && $form['#multistep']) {
       // Clean up old multistep form session data.
-      _drupal_clean_form_sessions();
-      $_SESSION['form'][$form_build_id] = array('timestamp' => time(), 'args' => $args);
+      _drupal_clean_form_sessions($_GET['q'], $form_id);
+      $_SESSION['form'][$form_build_id] = array('timestamp' => time(), 'args' => $args, 'url' => $_GET['q']);
       $form['#build_id'] = $form_build_id;
     }
     $stored = FALSE;
@@ -90,7 +90,7 @@
     $form = call_user_func_array('drupal_retrieve_form', $args);
     unset($_SESSION['form'][$_POST['form_build_id']]);
     if (isset($form['#multistep']) && $form['#multistep']) {
-      $_SESSION['form'][$form_build_id] = array('timestamp' => time(), 'args' => $args);
+      $_SESSION['form'][$form_build_id] = array('timestamp' => time(), 'args' => $args, 'url' => $_GET['q']);
       $form['#build_id'] = $form_build_id;
     }
     drupal_prepare_form($args[0], $form);
@@ -104,10 +104,10 @@
  * Remove form information that's at least a day old from the
  * $_SESSION['form'] array.
  */
-function _drupal_clean_form_sessions() {
+function _drupal_clean_form_sessions($url, $form_id) {
   if (isset($_SESSION['form'])) {
     foreach ($_SESSION['form'] as $build_id => $data) {
-      if ($data['timestamp'] < (time() - 84600)) {
+      if ($data['url'] == $url && $data['args'][0] == $form_id) {
         unset($_SESSION['form'][$build_id]);
       }
     }
