diff --git a/logintoboggan.module b/logintoboggan.module
index cf23f30..952c9c9 100755
--- a/logintoboggan.module
+++ b/logintoboggan.module
@@ -159,6 +159,24 @@ function logintoboggan_form_user_profile_form_alter(&$form, &$form_state) {
 
   if ($form['#user_category'] == 'account') {
     $account = $form['#user'];
+
+    // Checking if the user is in pre-auth role yet.
+    $in_pre_auth_role = logintoboggan_user_in_preauth($account);
+    $approval_required = variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) == USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL;
+    // If so, and admin approval is required, he shouldn't be able to change
+    // his password or email, since this will cause problems with the hashes generated
+    // for the admin to approve the account.
+    if ($in_pre_auth_role && $approval_required) {
+      unset($form['account']['current_pass']);
+      unset($form['account']['current_pass_required_values']);
+      unset($form['account']['pass']);
+      unset($form['account']['mail']);
+      $form['account']['info'] = array(
+        '#markup' => t('You can\'t change your email or your password until an administrator
+        has approved your account'),
+      );
+    }
+
     $form['#validate'][] = 'logintoboggan_user_edit_validate';
     $id = logintoboggan_validating_id();
 
@@ -285,6 +303,25 @@ function logintoboggan_form_user_admin_account_alter(&$form, &$form_state) {
 }
 
 /**
+ * Implementation of hook_form_user_pass_alter().
+ *
+ * @ingroup logintoboggan_core
+ */
+function logintoboggan_form_user_pass_alter(&$form, &$form_state) {
+  $in_pre_auth_role = logintoboggan_user_in_preauth($GLOBALS['user']);
+  $approval_required = variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) == USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL;
+  // If the user still has the pre-auth role, and requires admin approval, he shouldn't be able to request a new password
+  if ($in_pre_auth_role && $approval_required) {
+    $form['info'] = array(
+      '#markup' => t('You can\'t reset your password until an administrator has approved your account' .
+        ' Click !here to go back to your user profile', array('!here' => l('here', 'user/' . $GLOBALS['user']->uid))),
+    );
+    unset($form['mail']);
+    unset($form['actions']);
+  }
+}
+
+/**
  * Implement hook_form_user_pass_reset_alter().
  *
  * @ingroup logintoboggan_core
@@ -1287,3 +1324,13 @@ function theme_lt_unified_login_page($variables) {
   return $output;
 }
 
+/**
+ * @param int $uid User account
+ * @return TRUE if the user has the PRE-AUTH role yet. FALSE otherwise.
+ * @ingroup logintoboggan_core
+ */
+function logintoboggan_user_in_preauth($account) {
+  $id = logintoboggan_validating_id();
+  $in_pre_auth_role = in_array($id, array_keys($account->roles));
+  return $in_pre_auth_role;
+}
