diff --git a/mail_redirect.install b/mail_redirect.install
index 7c6baa7..c188d59 100644
--- a/mail_redirect.install
+++ b/mail_redirect.install
@@ -7,6 +7,17 @@
  */
 
 /**
+ * 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_7100(&$sandbox) {
+  if (variable_get('mail_redirect_domain')) {
+    variable_set('mail_redirect_opt', 'domain');
+  }
+}
+
+/**
  * @todo Please document this function.
  * @see http://drupal.org/node/1354
  */
diff --git a/mail_redirect.module b/mail_redirect.module
index 730e48d..e6153d9 100644
--- a/mail_redirect.module
+++ b/mail_redirect.module
@@ -62,13 +62,31 @@ 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."),
   );
-  
+
+   $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'),
+   );
+
   // 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(
@@ -87,64 +105,125 @@ function mail_redirect_admin_settings($form, &$form_state) {
       listed in the Skip Redirect section above."),
   );
 
+  $form['#validate'][] = 'mail_redirect_admin_settings_validate';
+
   return system_settings_form($form);
 }
 
 /**
+ * Validate the system 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) {
 
+  $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'));
   
-  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'];
-    }
-
-    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);
+  switch ($redirect) {
+    // Redirect all recipients to a catch-all domain.
+  case 'domain':
+    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>
+       */
+      $tos = mail_redirect_recipients($message);
+      if (stristr($message['to'], ",")) { // then we have a list
+        $tos = explode(",", $message['to']);
+        array_walk($tos, '_mail_redirect_trim_array_values');
       }
       else {
-        $tos[$key] = preg_replace('^((.+)@.+)^', "$2@$mydomain", $to);
+        $tos = (array) $message['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."));  
       }
     }
+    break;
 
-    // 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."));  
+    // Redirect each message to a catch-all address
+  case 'address':
+    if ($myaddress) {
+      $tos = mail_redirect_recipients($message);
+      $message['to'] = $myaddress;
+      $message['body'][] = "\r\n" . '--------------------------------------------------------------------------------' . "\r\n" . t('This message was redirected from "@to" to "@myaddress."', array('@to' => implode(', ', $tos), '@myaddress' => $myaddress));
     }
+    break;
+  }
+}
+
+/**
+ * Format an array of message recipients.
+ */
+function mail_redirect_recipients($message) {
+  if (stristr($message['to'], ",")) { // then we have a list
+    $tos = split(",", $message['to']);
+    array_walk($tos, '_mail_redirect_trim_array_values');
   }
+  else {
+    $tos = (array) $message['to'];
+  }
+
+  return $tos;
 }
 
 /**
