diff --git a/mail_redirect.info b/mail_redirect.info
index 7def18b..b902ba4 100644
--- a/mail_redirect.info
+++ b/mail_redirect.info
@@ -1,7 +1,7 @@
 name = Mail Redirect
 description = Used for testing mail functions on test sites with real emails addresses in the db. Redirects ALL system generated email to a test mail domain.
 package = Mail
-configure = admin/config/mail_redirect
+configure = admin/config/development/mail_redirect
 
 core = 7.x
 ; Information added by drupal.org packaging script on 2009-10-20
diff --git a/mail_redirect.install b/mail_redirect.install
index 7c6baa7..1c8b697 100644
--- a/mail_redirect.install
+++ b/mail_redirect.install
@@ -59,4 +59,17 @@ function mail_redirect_uninstall() {
   drupal_set_message('<strong>mail_redirect:</strong> your <em>mail_redirect_domain</em> variable has been deleted', 'status');
 
 }
+ 
+/**
+ * Implements hook_update_N().
+ *
+ * If a domain is already set, default the option to use domain redirect so
+ * existing implementations are not interrupted.
+ */
+function mail_redirect_update_7101(&$sandbox) {
+  if (variable_get('mail_redirect_domain')) {
+    variable_set('mail_redirect_opt', 'domain');
+  }
+}
+
 
diff --git a/mail_redirect.module b/mail_redirect.module
index b12e61e..baf247d 100644
--- a/mail_redirect.module
+++ b/mail_redirect.module
@@ -62,13 +62,43 @@ function mail_redirect_menu() {
 
 function mail_redirect_admin_settings($form, &$form_state) {
   // system settings     
+  $form['mail_redirect_opt'] = array(
+    '#type' => 'radios',
+    '#title' => t('Mail Redirect Method'),
+    '#options' => array(
+      'none' => t('Deliver mail normally'),
+      'domain' => t('Redirect each recipient to a catch-all domain'),
+      'address' => t('Redirect each message to a single address'),
+    ),
+    '#default_value' => variable_get('mail_redirect_opt', 'none'),
+  );
+
   $form['mail_redirect_domain'] = array(
     '#type' => 'textfield',
     '#title' => t('Redirect Mail Domain'),
     '#default_value' => variable_get('mail_redirect_domain'),
     '#description' => t("Set the redirect mail domain to that of your catch-all mail test server. See README.txt for more info."),
+    '#states' => array(
+      // Show the setting based on the mail redirect method setting.
+      'visible' => array(
+        ':input[name="mail_redirect_opt"]' => array('value' => 'domain'),
+      ),
+    ),
   );
-  
+
+  $form['mail_redirect_address'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Redirect Mail Address'),
+    '#description' => t('Redirect all mail to this address for testing.'),
+    '#default_value' => variable_get('mail_redirect_address'),
+    '#states' => array(
+      // Show the setting based on the mail redirect method setting.
+      'visible' => array(
+        ':input[name="mail_redirect_opt"]' => array('value' => 'address'),
+      ),
+    ),
+  );
+
   // list of emails to not redirect to 
   // @todo replace with add more list of user's and possibly a role selector
   $form['mail_redirect_skip_redirect'] = array(
@@ -91,65 +121,117 @@ function mail_redirect_admin_settings($form, &$form_state) {
 }
 
 /**
+* Form validation handler for mail_redirect_admin_settings().
+*/
+function mail_redirect_admin_settings_validate(&$form, &$form_state) {
+  $vals = $form_state['values'];
+
+  // Validate the domain name.
+  if (!empty($vals['mail_redirect_domain']) && !drupal_valid_http_host($vals['mail_redirect_domain'])) {
+    form_set_error('mail_redirect_domain', t('%name is not a valid domain.', array('%name' => $vals['mail_redirect_domain'])));
+  }
+
+  // Validate the email address.
+  if (!empty($vals['mail_redirect_address']) && !valid_email_address($vals['mail_redirect_address'])) {
+    form_set_error('mail_redirect_address', t('%address is not a valid e-mail address.', array('%address' => $vals['mail_redirect_address'])));
+  }
+
+  // Ensure a value is set for the option chosen.
+  if ($vals['mail_redirect_opt'] == 'domain' && empty($vals['mail_redirect_domain'])) {
+    form_set_error('mail_redirect_domain', t('A domain name is required in order to redirect each recipient to a catch-all domain.'));
+  }
+  elseif ($vals['mail_redirect_opt'] == 'address' && empty($vals['mail_redirect_address'])) {
+    form_set_error('mail_redirect_address', t('A valid e-mail address is required in order to redirect each message to a catch-all address.'));
+  }
+}
+
+/**
 * Implement mail_alter hook to replace domain of all email addresses
 * redirect any system generated email to your configured email domain
 *
 *   shows a msg to indicate whenever an email has been redirected.
 * 
 * @param string $message
+*
+* @todo Handle CC and BCC headers.
 */
 function mail_redirect_mail_alter(&$message) {
   // if we don't have a To address; no point in doing anything
   if (!$message['to']) {
     return;
   }
-  
+  $redirect  = variable_get('mail_redirect_opt', 'none');
   $mydomain = variable_get('mail_redirect_domain');
+  $myaddress = variable_get('mail_redirect_address');
   $skips = explode(',', variable_get('mail_redirect_skip_redirect'));
   array_walk($skips, '_mail_redirect_trim_array_values');
   
-  if ($mydomain) {
-    /* need to handle RFC2822 formats for $message['to']:
-     *    user@example.com
-     *    user@example.com, anotheruser@example.com
-     *    User <user@example.com>
-     *    User <user@example.com>, Another User <anotheruser@example.com>
-    */
-    if (stristr($message['to'], ",")) { // then we have a list
-      $tos = explode(",", $message['to']);
-      array_walk($tos, '_mail_redirect_trim_array_values');
-    }
-    else {
-      $tos = (array) $message['to'];
-    }
+  switch ($redirect) {
+    // Redirect all recipients to a catch-all domain.
+    case 'domain':
+      if ($mydomain) {
+        /* We need to handle RFC2822 formats for $message['to']:
+         *    user@example.com
+         *    user@example.com, anotheruser@example.com
+         *    User <user@example.com>
+         *    User <user@example.com>, Another User <anotheruser@example.com>
+         */
+        $tos = mail_redirect_recipients($message);
 
-    foreach ($tos as $key => $to) {
-      // do not process SKIP addresses
-      $address = preg_replace('^(.*)<((.+)@(.+))>^', "$3@$4", $to);
-      if (in_array($address, $skips)) {
-        return;
-      }
-      
-      // swap in our redirect domain for the remaining addresses
-      if (stristr($to, "<")) {
-        $tos[$key] = preg_replace('^(.*)<((.+)@.+)>^', "$1<$3@$mydomain>", $to);
-      }
-      else {
-        $tos[$key] = preg_replace('^((.+)@.+)^', "$2@$mydomain", $to);
+        foreach ($tos as $key => $to) {
+          // Do not process SKIP addresses.
+          $address = preg_replace('^(.*)<((.+)@(.+))>^', "$3@$4", $to);
+          if (in_array($address, $skips)) {
+            continue;
+          }
+
+          // Swap in our redirect domain for the remaining addresses.
+          if (stristr($to, "<")) {
+            $tos[$key] = preg_replace('^(.*)<((.+)@.+)>^', "$1<$3@$mydomain>", $to);
+          }
+          else {
+            $tos[$key] = preg_replace('^((.+)@.+)^', "$2@$mydomain", $to);
+          }
+        }
+
+        // Replace To with our modified address/list.
+        $message['to'] = join(",", $tos);
+
+        drupal_set_message(t("The following TO address or list: %to has been redirected to the following TEST DOMAIN: %mydomain",
+          array('%to' => $message['to'], '%mydomain' => $mydomain), array('langcode' => 'status')));
+
+        if (variable_get('mail_redirect_nomail')) {
+          $message['send'] = FALSE;
+          drupal_set_message(t("However, since Mail Redirect is set to <em>silent redirect</em>; these emails will not be sent."));
+        }
       }
-    }       
-    
-    drupal_set_message(t("The following TO address or list: %to has been redirected to the following TEST DOMAIN: %mydomain", 
-      array('%to' => $message['to'], '%mydomain' => $mydomain), array('langcode' => 'status')));
+      break;
 
-    // replace To with our modified address/list
-    $message['to'] = join(",", $tos);
+    // Redirect each message to a catch-all address.
+    case 'address':
+      if ($myaddress) {
+        $tos = mail_redirect_recipients($message);
+        $message['to'] = $myaddress;
+        $message['subject']  = $message['subject'] . t(" [@to] ",array('@to' => implode(', ', $tos)));
+        }
+      break;
+  }
+}
     
-    if (variable_get('mail_redirect_nomail')) {  
-      $message['send'] = FALSE;
-      drupal_set_message(t("However, since Mail Redirect is set to <em>silent redirect</em>; these emails will not be sent."));  
-    }
+/**
+ * Format an array of message recipients.
+ */
+function mail_redirect_recipients($message) {
+  // If we have a list.
+  if (stristr($message['to'], ",")) {
+    $tos = split(",", $message['to']);
+    array_walk($tos, '_mail_redirect_trim_array_values');
   }
+  else {
+    $tos = (array) $message['to'];
+  }
+
+  return $tos;
 }
 
 /**
