diff --git a/modal_forms.pages.inc b/modal_forms.pages.inc
index b8773de..827369a 100644
--- a/modal_forms.pages.inc
+++ b/modal_forms.pages.inc
@@ -170,7 +170,6 @@ function modal_forms_personal_contact($recipient, $js = NULL) {
       $output[] = ctools_ajax_command_reload();
     }
   }
-
   print ajax_render($output);
 }
 
@@ -184,6 +183,7 @@ function modal_forms_comment_reply($node, $js = NULL, $pid = NULL) {
     'nid' => $node->nid,
   );
 
+  // Fall back if $js is not set.
   if (!$js) {
     return drupal_get_form('comment_node_' . $node->type . '_form', (object) $comment);
   }
@@ -232,7 +232,6 @@ function modal_forms_comment_reply($node, $js = NULL, $pid = NULL) {
       $output[] = ctools_ajax_command_reload();
     }
   }
-
   print ajax_render($output);
 }
 
@@ -260,9 +259,9 @@ function modal_forms_view_webform($node, $js = NULL) {
     exit;
   }
 
-  // Get webform defaults.
+  // Get webform title.
   $title = check_plain($node->title);
-  $text = check_markup($node->webform['confirmation'], $node->webform['confirmation_format'], '', TRUE);
+
   $form_state = array(
     'title' => $title,
     'ajax' => TRUE,
@@ -274,25 +273,34 @@ function modal_forms_view_webform($node, $js = NULL) {
 
   // Pass required parameters.
   $form_state['build_info']['args'] = array($node, FALSE);
+
+  // Render the Webform.
   $output = ctools_modal_form_wrapper('webform_client_form_' . $node->nid, $form_state);
 
   if (!empty($form_state['executed'])) {
     if (!isset($form_state['storage'])) {
       ctools_add_js('ajax-responder');
-      $output[] = ctools_modal_command_display($title, $text . ctools_ajax_text_button(t('Close'), 'modal_forms/nojs/dismiss', t('Close')));
-      // @todo Add support for redirect. Require some magic.
-      // Copied from webform_client_form_submit().
-      // $redirect_url = trim($node->webform['redirect_url']);
-      // $redirect_url = _webform_filter_values($redirect_url, $node, NULL, NULL, FALSE, TRUE);
-      // $output[] = ctools_ajax_command_redirect($redirect_url);
-    }
-    else {
-      // We are on a multistep form step.
-      $form_state['executed'] = array();
-      $output = ctools_modal_form_wrapper('webform_client_form_' . $node->nid, $form_state);
+      // Handle confirmation message or redirect.
+      if ('<confirmation>' == $node->webform['redirect_url']) {
+        // Use confirmation message if set, default text otherwise.
+        // See webform/templates/webform-confirmation.tpl.php.
+        $message = (empty($node->webform['confirmation'])) ? t('Thank you, your submission has been received.') : check_markup($node->webform['confirmation'], $node->webform['confirmation_format'], '', TRUE);
+        $confirmation = '<div class="webform-confirmation">' . $message . '</div>';
+        $confirmation .= ctools_ajax_text_button(t('Close'), 'modal_forms/nojs/dismiss', t('Close'));
+        $output[] = ctools_modal_command_display($title, $confirmation);
+      }
+      elseif ('<none>' == $node->webform['redirect_url']) {
+        // Reload webform node itself.
+        $output[] = ctools_ajax_command_reload();
+      }
+      else {
+        // Redirect to URL.
+        // Note: Redirect code in webform_client_form_submit() is more complex.
+        $url = trim(ltrim($node->webform['redirect_url'], '/'));
+        $output[] = ctools_ajax_command_redirect($url);
+      }
     }
   }
-
   print ajax_render($output);
 }
 
