diff --git a/mailchimp.admin.inc b/mailchimp.admin.inc
index a6b95be..9e1779f 100644
--- a/mailchimp.admin.inc
+++ b/mailchimp.admin.inc
@@ -199,6 +199,12 @@ function mailchimp_admin_settings() {
             '#default_value'  => variable_get('mailchimp_interest_groups_user_forms', FALSE),
             '#description'    => t('If set, users will be able to select applicable interest groups when signing up for newsletters.')
         );
+        $form['mailchimp_user_settings']['mailchimp_interest_groups_preserve_existing'] = array(
+            '#type'           => 'checkbox',
+            '#title'          => t('Preserve existing Interest Groups on Registration'),
+            '#default_value'  => variable_get('mailchimp_interest_groups_preserve_existing', FALSE),
+            '#description'    => t('If set, when a new user is already signed up to a list any interest groups they select will be added to those already assigned to them, rather than replacing.')
+        );
 
         $form['cron'] = array(
           '#type' => 'fieldset',
diff --git a/mailchimp.module b/mailchimp.module
index f5815ce..8c14f9e 100644
--- a/mailchimp.module
+++ b/mailchimp.module
@@ -47,6 +47,7 @@ function mailchimp_user($op, &$edit, &$account, $category = NULL) {
   }
   
   if ($op == 'insert' && variable_get('mailchimp_user_register', FALSE) && $q = _mailchimp_get_api_object()) {
+    $replace_interests = !variable_get('mailchimp_interest_groups_preserve_existing', FALSE);    
     foreach ((array)$edit['mailchimp_lists'] as $list) {
       // is the checkbox for the newsletter selected?
       if (isset($edit['mailchimp_list_' . $list->id] ) && $edit['mailchimp_list_' . $list->id] ) {
@@ -59,7 +60,7 @@ function mailchimp_user($op, &$edit, &$account, $category = NULL) {
           }
         }
   
-        $ret = _mailchimp_subscribe_user($list, $account->mail, $merge_vars, TRUE, $q);
+        $ret = _mailchimp_subscribe_user($list, $account->mail, $merge_vars, TRUE, $q, $replace_interests);
   
         if (!$ret) {
           watchdog('mailchimp', 'MCAPI Error: %errormsg', array('%errormsg' => $q->errorMessage), WATCHDOG_ERROR);
@@ -535,6 +536,8 @@ function mailchimp_subscribe_anon_form_all($form_state, $q) {
  */
 function mailchimp_subscribe_anon_form_submit($form, &$form_state) {
   if ($q = _mailchimp_get_api_object()) {
+    // Find out whether to replace or preserve any existing interest groups registered to this email address.
+    $replace_interests = !variable_get('mailchimp_interest_groups_preserve_existing', FALSE);    
     $lists = $form_state['values']['mailchimp_lists'];
     foreach ($lists as $list) {
       if (!empty($list['EMAIL'])) {
@@ -547,7 +550,7 @@ function mailchimp_subscribe_anon_form_submit($form, &$form_state) {
           }
         }
 
-        $success = _mailchimp_subscribe_user($list['list'], $list['EMAIL'], $list, TRUE, $q);
+        $success = _mailchimp_subscribe_user($list['list'], $list['EMAIL'], $list, TRUE, $q, $replace_interests);
 
         if ($success) {
           $msg = t(variable_get('mailchimp_subscription_success_message', 'Thank you, you have been successfully subscribed.'));        
@@ -957,7 +960,7 @@ function _mailchimp_is_subscribed($listid, $mail, $q = NULL) {
 /**
  * Subscribe or update a user in a givne list
  */
-function _mailchimp_subscribe_user($list, $email, $merge_vars, $message = TRUE, $q = NULL) {
+function _mailchimp_subscribe_user($list, $email, $merge_vars, $message = TRUE, $q = NULL, $replace_interests = TRUE) {
   if ($q || $q = _mailchimp_get_api_object()) {
     $double_optin   = $list->doublein;
 
@@ -968,7 +971,7 @@ function _mailchimp_subscribe_user($list, $email, $merge_vars, $message = TRUE,
 
     if (_mailchimp_is_subscribed($list->id, $email, $q)) {
       $action = 'updated in';
-      $success = $q->listUpdateMember($list->id, $email, $merge_vars);
+      $success = $q->listUpdateMember($list->id, $email, $merge_vars, '', $replace_interests);
       if($success && $message){
         drupal_set_message(t('You have updated %email\'s settings in the %list list.', array('%email' => $email, '%list' => $list->name)));
       }
