Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.435
diff -u -p -r1.435 form.inc
--- includes/form.inc	4 Mar 2010 09:07:27 -0000	1.435
+++ includes/form.inc	4 Mar 2010 22:25:48 -0000
@@ -850,6 +850,12 @@ function drupal_redirect_form($form_stat
   if (!empty($form_state['no_redirect'])) {
     return;
   }
+  // If system_goto_action() set up a redirection target, use it.
+  if (isset($_SESSION['drupal_goto'])) {
+    $url = $_SESSION['drupal_goto'];
+    unset($_SESSION['drupal_goto']);
+    drupal_goto($url);
+  }
   // Only invoke drupal_goto() if redirect value was not set to FALSE.
   if (!isset($form_state['redirect']) || $form_state['redirect'] !== FALSE) {
     if (isset($form_state['redirect'])) {
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.895
diff -u -p -r1.895 system.module
--- modules/system/system.module	3 Mar 2010 07:34:25 -0000	1.895
+++ modules/system/system.module	4 Mar 2010 22:23:22 -0000
@@ -2961,7 +2961,8 @@ function system_goto_action_submit($form
  * @ingroup actions
  */
 function system_goto_action($entity, $context) {
-  drupal_goto(token_replace($context['url'], $context));
+  // @see drupal_redirect_form()
+  $_SESSION['drupal_goto'] = token_replace($context['url'], $context);
 }
 
 /**
