Index: vr_register/vr_register.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/vr/vr_register/vr_register.admin.inc,v
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.2 vr_register.admin.inc
--- vr_register/vr_register.admin.inc	12 Jan 2010 21:22:10 -0000	1.1.2.2
+++ vr_register/vr_register.admin.inc	13 Jul 2010 18:39:57 -0000
@@ -16,8 +16,9 @@ function vr_register_settings($form_stat
     $form['states']['vr_register_state_' . $list] = array(
       '#type' => 'radios',
       '#options' => array(
-        0 => t('deselected'),
-        1 => t('selected'),
+        0 => t('Deselected'),
+        1 => t('Selected'),
+        2 => t('Hidden (Selected)'),
         ),
       '#default_value' => variable_get('vr_register_state_' . $list, 1),
       );
Index: vr_register/vr_register.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/vr/vr_register/vr_register.module,v
retrieving revision 1.1.2.8
diff -u -p -r1.1.2.8 vr_register.module
--- vr_register/vr_register.module	22 Jun 2010 17:10:16 -0000	1.1.2.8
+++ vr_register/vr_register.module	13 Jul 2010 18:39:57 -0000
@@ -38,22 +38,37 @@ function vr_register_user($op, &$edit, &
   switch ($op) {
     case 'register':
       $values = _vr_register_options();
-      if (!empty($values)) {
+      if (!empty($values['options'])) {
         $form['vr_register'] = array(
           '#type' => 'checkboxes',
           '#title' => t('Email subscriptions'),
           '#options' => $values['options'],
           '#default_value' => $values['defaults'],
           );
-        return $form;
       }
+      if (!empty($values['hidden'])) {
+        $form['vr_hidden_registration'] = $values['hidden'];
+        $form['vr_hidden_registration']['#tree'] = TRUE;
+      }
+      return (is_array($form)) ? $form : array();
       break;
     case 'insert':
       // Escape this part of the registration process if the registering user
-      // has not selected a mailing list to subscribe to.
-      if (!is_array($edit['vr_register'])) {
+      // has not selected a mailing list to subscribe to and there are no hidden
+      // list registrations.
+      if (!is_array($edit['vr_register']) AND empty($edit['vr_hidden_registration'])) {
         break;
       }
+      // User has selected visible lists and hidden lists are present.
+      elseif (is_array($edit['vr_register']) AND !empty($edit['vr_hidden_registration'])) {
+        $edit['vr_register'] = array_merge($edit['vr_register'], $edit['vr_hidden_registration']);
+      }
+      // Hidden lists, but no visible lists on registration.
+      elseif (!is_array($edit['vr_register']) AND !empty($edit['vr_hidden_registration'])) {
+        $edit['vr_register'] = $edit['vr_hidden_registration'];
+      }
+      // No further action is required if the user has selected lists and there
+      // are no hidden lists present.
       foreach ($edit['vr_register'] as $list_id) {
         $param['list_member'] = array(
           'list_id' => $list_id,
@@ -66,6 +81,7 @@ function vr_register_user($op, &$edit, &
           );
         vr_api('addListMember', $param);
       };
+      unset($edit['vr_register'], $edit['vr_hidden_registration']);
       break;
   }
 }
@@ -78,13 +94,21 @@ function _vr_register_options() {
   $lists = vr_get_lists();
   $return['defaults'] = array();
   foreach ($lists as $list => $name) {
-    if (variable_get('vr_register_enabled_' . $list, 0) == 1) {
-      $state = variable_get('vr_register_state_' . $list, 0);
+    $enabled = variable_get('vr_register_enabled_' . $list, 0);
+    $state = variable_get('vr_register_state_' . $list, 0);
+    if ($enabled == 1 AND $state < 2) {
       $return['options'][$list] = $name;
-      if ($state) {
+      if ($state == 1) {
         $return['defaults'][] = $list;
       }
     }
+    // Enabled but hidden.
+    elseif ($enabled == 1) {
+      $return['hidden'][$list] = array(
+        '#type' => 'hidden',
+        '#value' => $list,
+        );
+    }
   }
   return $return;
 }
