Index: privatemsg.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/privatemsg/privatemsg.module,v
retrieving revision 1.70.2.30.2.91.2.64.2.84
diff -u -p -r1.70.2.30.2.91.2.64.2.84 privatemsg.module
--- privatemsg.module	7 Sep 2010 17:14:54 -0000	1.70.2.30.2.91.2.64.2.84
+++ privatemsg.module	8 Sep 2010 21:51:52 -0000
@@ -1187,24 +1187,48 @@ function _privatemsg_delete_data($accoun
  * Implements hook_form_alter().
  */
 function privatemsg_form_alter(&$form, &$form_state, $form_id) {
-  // We have to use user_acces() because privatemsg_user_access() would
-  // return FALSE when privatemsg is disabled.
-  if (($form_id == 'user_register_form' || $form_id == 'user_profile_form') && $form['#user_category'] == 'account' && (user_access('write privatemsg') || user_access('read privatemsg')) && user_access('allow disabling privatemsg')) {
-    $form['privatemsg'] = array(
+  if (($form_id == 'user_register_form' || $form_id == 'user_profile_form') && $form['#user_category'] == 'account') {
+
+    // Create array to be able to merge in fieldset and avoid overwriting
+    // already added options.
+    if (!isset($form['privatemsg'])) {
+      $form['privatemsg'] += array();
+    }
+
+    // Always create the fieldset in case other modules want to add
+    // Privatemsg-related settings through hook_form_alter(). If it's still
+    // empty after the build process, the after build function will remove it.
+    $form['privatemsg'] += array(
       '#type' => 'fieldset',
-      '#title' => t('Privatemsg settings'),
+      '#title' => t('Private messages'),
       '#collapsible' => TRUE,
       '#collapsed' => FALSE,
       '#weight' => 10,
+      '#after_build' => array('privatemsg_account_fieldset_remove_if_empty'),
     );
 
-    $form['privatemsg']['pm_enable'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Enable Private Messaging'),
-      '#default_value' => !privatemsg_is_disabled($form['#user']),
-      '#description' => t('Disabling private messages prevents you from sending or receiving messages from other users.'),
-    );
+    // We have to use user_acces() because privatemsg_user_access() would
+    // return FALSE when privatemsg is disabled.
+    if ((user_access('write privatemsg') || user_access('read privatemsg')) && user_access('allow disabling privatemsg')) {
+      $form['privatemsg']['pm_enable'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Enable private messages'),
+        '#default_value' => !privatemsg_is_disabled($form['#user']),
+        '#description' => t('Disabling private messages prevents you from sending or receiving messages from other users.'),
+        '#weight' => -10,
+      );
+    }
+  }
+}
+
+/**
+ * Hides the settings fieldset if there are no options to be displayed.
+ */
+function privatemsg_account_fieldset_remove_if_empty($element) {
+  if (count(element_children($element)) == 0) {
+    $element['#access'] = FALSE;
   }
+  return $element;
 }
 
 /**
Index: pm_email_notify/pm_email_notify.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/privatemsg/pm_email_notify/pm_email_notify.module,v
retrieving revision 1.1.2.3.2.18
diff -u -p -r1.1.2.3.2.18 pm_email_notify.module
--- pm_email_notify/pm_email_notify.module	5 Aug 2010 09:27:17 -0000	1.1.2.3.2.18
+++ pm_email_notify/pm_email_notify.module	8 Sep 2010 21:51:52 -0000
@@ -110,20 +110,16 @@ function _pm_email_notify_default_body()
  * Implements hook_form_alter().
  */
 function pm_email_notify_form_alter(&$form, &$form_state, $form_id) {
-  // We have to use user_acces() because privatemsg_user_access() would
-  // return FALSE when privatemsg is disabled.
   if (($form_id == 'user_register_form' || $form_id == 'user_profile_form') && $form['#user_category'] == 'account' && privatemsg_user_access('read privatemsg')) {
-    $form['enable_pm_mail'] = array(
-      '#type' => 'fieldset',
-      '#title' => t('Privatemsg e-mail notification'),
-      '#collapsible' => TRUE,
-      '#collapsed' => FALSE,
-      '#weight' => 10,
-    );
-    $form['enable_pm_mail']['pm_send_notifications'] = array(
+    $form['privatemsg']['pm_send_notifications'] = array(
       '#type' => 'checkbox',
       '#title' => t('Receive email notification for incoming private messages'),
       '#default_value' => _pm_email_notify_is_enabled($form['#user']->uid),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="pm_enable"]' => array('checked' => TRUE),
+        ),
+      ),
     );
   }
 }
