Index: modules/overlay/overlay-child.js
===================================================================
RCS file: /cvs/drupal/drupal/modules/overlay/overlay-child.js,v
retrieving revision 1.6
diff -u -r1.6 overlay-child.js
--- modules/overlay/overlay-child.js	9 Mar 2010 20:52:27 -0000	1.6
+++ modules/overlay/overlay-child.js	27 Mar 2010 12:11:19 -0000
@@ -37,7 +37,7 @@
         // We need to store the parent variable locally because it will
         // disappear as soon as we close the iframe.
         var p = parent;
-        p.Drupal.overlay.close(settings.args, settings.statusMessages);
+        p.Drupal.overlay.close(settings.args);
         if (typeof settings.redirect == 'string') {
           p.Drupal.overlay.redirect(settings.redirect);
         }
Index: modules/overlay/overlay.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/overlay/overlay.module,v
retrieving revision 1.14
diff -u -r1.14 overlay.module
--- modules/overlay/overlay.module	26 Mar 2010 18:58:12 -0000	1.14
+++ modules/overlay/overlay.module	27 Mar 2010 12:11:19 -0000
@@ -69,7 +69,7 @@
     if (isset($_GET['render']) && $_GET['render'] == 'overlay') {
       // If this page shouldn't be rendered here, redirect to the parent.
       if (!path_is_admin($_GET['q'])) {
-        overlay_close_dialog();
+        overlay_close_dialog($_GET['q']);
       }
       // If system module did not switch the theme yet (i.e. this is not an
       // admin page, per se), we should switch the theme here.
@@ -380,20 +380,7 @@
 
   // If the overlay is to be closed, pass that information through JavaScript.
   if ($args !== FALSE) {
-    if (!isset($settings)) {
-      $settings = array(
-        'overlayChild' => array(
-          'closeOverlay' => TRUE,
-          'statusMessages' => theme('status_messages'),
-          'args' => $args,
-        ),
-      );
-      // Tell the child window to perform the redirection when requested to.
-      if (!empty($form_state['redirect'])) {
-        $settings['overlayChild']['redirect'] = url($url, $settings);
-      }
-      drupal_add_js($settings, array('type' => 'setting'));
-    }
+    overlay_close_dialog($url, $url_settings, $args);
     // Tell FAPI to redraw the form without redirection after all submit
     // callbacks have been processed.
     $form_state['redirect'] = FALSE;
@@ -526,21 +513,27 @@
  *
  * @param $redirect
  *   The path that should open in the parent window after the overlay closes.
+ * @param $redirect_options
+ *   An associative array of options to use when generating the redirect URL.
+ * @param $args
+ *   Arguments to pass on to the overlay to be used by client-side javascript.
  */
-function overlay_close_dialog($redirect = NULL) {
-  if (!isset($redirect)) {
-    $redirect = current_path();
-  }
+function overlay_close_dialog($redirect = NULL, $redirect_options = array(), $args = NULL) {
   $settings = array(
     'overlayChild' => array(
       'closeOverlay' => TRUE,
-      'statusMessages' => theme('status_messages'),
       'args' => $args,
-      'redirect' => url($redirect),
     ),
   );
+
+  $settings['args']['statusMessages'] = theme('status_messages');
+
+  // Tell the child window to perform the redirection when requested to.
+  if (!empty($redirect)) {
+    $settings['overlayChild']['redirect'] = url($redirect, $redirect_options);
+  }
+
   drupal_add_js($settings, array('type' => 'setting'));
-  return $settings;
 }
 
 /**
Index: modules/overlay/overlay-parent.js
===================================================================
RCS file: /cvs/drupal/drupal/modules/overlay/overlay-parent.js,v
retrieving revision 1.34
diff -u -r1.34 overlay-parent.js
--- modules/overlay/overlay-parent.js	27 Mar 2010 05:47:08 -0000	1.34
+++ modules/overlay/overlay-parent.js	27 Mar 2010 12:11:19 -0000
@@ -40,7 +40,6 @@
   isLoading: false,
 
   onOverlayCloseArgs: null,
-  onOverlayCloseStatusMessages: null,
 
   resizeTimeoutID: null,
   lastHeight: 0,
@@ -220,10 +219,9 @@
     self.lastHeight = 0;
 
     if ($.isFunction(self.options.onOverlayClose)) {
-      self.options.onOverlayClose(self.onOverlayCloseArgs, self.onOverlayCloseStatusMessages);
+      self.options.onOverlayClose(self.onOverlayCloseArgs);
     }
     self.onOverlayCloseArgs = null;
-    self.onOverlayCloseStatusMessages = null;
   };
 
   // Default jQuery UI Dialog options.
@@ -358,11 +356,10 @@
 /**
  * Close the overlay and remove markup related to it from the document.
  */
-Drupal.overlay.close = function (args, statusMessages) {
+Drupal.overlay.close = function (args) {
   var self = this;
 
   self.onOverlayCloseArgs = args;
-  self.onOverlayCloseStatusMessages = statusMessages;
 
   return self.$container.dialog('close');
 };
