diff --git sites/all/modules/userprotect/userprotect.module sites/all/modules/userprotect/userprotect.module
index be35fca..7196cc7 100644
--- sites/all/modules/userprotect/userprotect.module
+++ sites/all/modules/userprotect/userprotect.module
@@ -22,6 +22,9 @@ function userprotect_help($path, $arg) {
 	  case 'admin/user/userprotect/protection_defaults':
 		  $output = t('Set global default protection values here. For more information on how to configure userprotect settings, see the !help.', array('!help' => l(t('help section'), 'admin/help/userprotect')));
 			return $output;
+	  case 'admin/user/userprotect/configuration':
+		  $output = t('Set configuration options, such as whether to allow new password requests for users that have protected passwords. For more information on how to configure userprotect settings, see the !help.', array('!help' => l(t('help section'), 'admin/help/userprotect')));
+			return $output;
 	  case 'admin/help#userprotect':
 
 		  $admin = t('Administer');
@@ -140,6 +143,12 @@ In addition, you can enable the auto-protect feature, which will automatically
 add the default protections to any newly created user accounts, and set default
 bypass options for all user administrators.</p>
 
+<h4>OTHER CONFIGURATION:</h4>
+
+<p>Set other configuration options at !configuration.
+You can set whether userprotect will prevent new password requests for users
+whose passwords are protected.</p>
+
 
 <h4>HOW THE MODULE DETERMINES A PROTECTION:</h4>
 
@@ -165,8 +174,18 @@ logic:</p>
   those roles have the protection enabled, then prevent editing of the field.</li>
   <li>If not, then allow the field to be edited.</li>
 </ol>
-</p>', array('!admin_user' => l('mass user editing operations', 'admin/user/user'), '!userprotect_settings' => l($admin . $pointer . $user_mgmt . $pointer . $userprotect, 'admin/user/userprotect/protected_users'), '!protected_users' => l($admin . $pointer . $user_mgmt . $pointer . $userprotect . $pointer . $protected_users, 'admin/user/userprotect/protected_users'), '!protected_roles' => l($admin . $pointer . $user_mgmt . $pointer . $userprotect . $pointer . $protected_roles, 'admin/user/userprotect/protected_roles'), '!administrator_bypass' => l($admin . $pointer . $user_mgmt . $pointer . $userprotect . $pointer . $administrator_bypass, 'admin/user/userprotect/administrator_bypass'), '!protection_defaults' => l($admin . $pointer . $user_mgmt . $pointer . $userprotect . $pointer . $protection_defaults, 'admin/user/userprotect/protection_defaults'), '!roleassign' => l('RoleAssign', 'http://drupal.org/project/roleassign', array('attributes' => array('target' => 'X'), 'absolute' => TRUE)), '!access_control' => l($admin . $pointer . $user_mgmt . $pointer . $access_control, 'admin/user/access')));
-			return $output;
+</p>', array(
+		'!admin_user' => l('mass user editing operations', 'admin/user/user'),
+		'!userprotect_settings' => l($admin . $pointer . $user_mgmt . $pointer . $userprotect, 'admin/user/userprotect/protected_users'),
+		'!protected_users' => l($admin . $pointer . $user_mgmt . $pointer . $userprotect . $pointer . $protected_users, 'admin/user/userprotect/protected_users'),
+		'!protected_roles' => l($admin . $pointer . $user_mgmt . $pointer . $userprotect . $pointer . $protected_roles, 'admin/user/userprotect/protected_roles'),
+		'!administrator_bypass' => l($admin . $pointer . $user_mgmt . $pointer . $userprotect . $pointer . $administrator_bypass, 'admin/user/userprotect/administrator_bypass'),
+		'!protection_defaults' => l($admin . $pointer . $user_mgmt . $pointer . $userprotect . $pointer . $protection_defaults, 'admin/user/userprotect/protection_defaults'),
+		'!configuration' => l($admin . $pointer . $user_mgmt . $pointer . $userprotect . $pointer . $protection_defaults, 'admin/user/userprotect/configuration'),
+		'!roleassign' => l('RoleAssign', 'http://drupal.org/project/roleassign', array('attributes' => array('target' => 'X'), 'absolute' => TRUE)
+		),
+		'!access_control' => l($admin . $pointer . $user_mgmt . $pointer . $access_control, 'admin/user/access')));
+	return $output;
 	}
 }
 
@@ -270,6 +289,10 @@ function userprotect_form_alter(&$form, &$form_state, $form_id) {
       }
       userprotect_form_display_protections($account, $protected);
       break;
+    case 'user_pass':
+      $validate = isset($form['#validate']) ? $form['#validate'] : NULL;
+      $form['#validate'] = userprotect_add_validation($validate, array('userprotect_user_pass_validate'));
+      break;
   }
 }
 
@@ -369,6 +392,16 @@ function userprotect_menu() {
     'type' => MENU_LOCAL_TASK,
     'weight' => 4,
   );
+  // Default settings.
+  $items['admin/user/userprotect/configuration'] = array(
+    'title' => 'Configuration',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('userprotect_configuration'),
+    'access callback' => 'user_access',
+    'access arguments' => $admin,
+    'type' => MENU_LOCAL_TASK,
+    'weight' => 5,
+  );
   // Remove a user from being protected.
   $items['userprotect/delete/%user'] = array(
     'title' => 'Delete protected user',
@@ -842,6 +875,42 @@ function userprotect_protection_defaults() {
   return system_settings_form($form);
 }
 
+
+/**
+ * Builds a form for the userprotect configuration settings.
+ *
+ * @return An array representing the form.
+ */
+function userprotect_configuration() {
+
+
+  $form['userprotect_block_new_password_fieldset'] = array(
+	'#type' => 'fieldset',
+	'#tree' => FALSE,
+	'#title' => 'Protect "Request New Password"',
+	'#description' => 'Used to configure how userprotect protects requests for new passwords',
+	'#collapsible' => TRUE,
+	'#collapsed' => FALSE
+  );
+
+  // A set of checkboxes that lists the default protection settings.
+  $form['userprotect_block_new_password_fieldset']['userprotect_block_new_password_request'] = array(
+	'#type' => 'checkbox',
+    '#title' => t('Protect new password requests'),
+    '#description' => t('If checked, users whose password is protected will also be unable to request new passwords using the "Reqest New Password" feature.'),
+    '#default_value' => variable_get('userprotect_block_new_password_request', FALSE),
+  );
+  $form['userprotect_block_new_password_fieldset']['userprotect_block_new_password_contact'] = array(
+	'#type' => 'textfield',
+	'#maxlength' => 255,
+    '#title' => t('New password error message URL'),
+    '#description' => t('Users who attempt to reset the password of a protected user will be sent to this URL to request assistance.  It may be either a HTTP URL such as "/contact" or a mailto such as "mailto:admin@yoursite.com".'),
+    '#default_value' => variable_get('userprotect_block_new_password_contact', 'mailto:'.variable_get('site_mail')),
+  );
+  return system_settings_form($form);
+}
+
+
 /**
  * Themes the role protections table.
  *
@@ -1187,3 +1256,31 @@ function userprotect_get_user_protection($account, $protection) {
   // No protection enabled.
   return FALSE;
 }
+
+
+
+/**
+ * Check to see if the user is allowed to modify their password before allowing
+ * them to request a new one.
+ */
+function userprotect_user_pass_validate($form, &$form_state) {
+	if (! (variable_get('userprotect_block_new_password_request',FALSE))) {
+		return;
+	}
+	$userID = $form_state['values']['name'];
+	
+	// Try to load the account by email and then by username.  Lifted from user.pages.inc in user module.
+	$account = user_load(array('mail' => $userID, 'status' => 1));
+	if (!$account) {
+		// No success, try to load by name.
+		$account = user_load(array('name' => $userID, 'status' => 1));
+	}
+	if (isset($account->uid)) {
+		if (userprotect_get_user_protection($account, 'up_pass')) {
+			$contactURL = variable_get('userprotect_block_new_password_contact', 'mailto:'.variable_get('site_mail'));
+			form_set_error('name',t('Sorry, the password for that user can not be reset. Please <a href="!contact">contact</a> the site administrator for assistance.',
+									array('!contact' => $contactURL)));
+			return;
+		}
+	}
+}
