diff --git a/password_policy.module b/password_policy.module
index 54b45bd..2aebd1c 100644
--- a/password_policy.module
+++ b/password_policy.module
@@ -270,6 +270,11 @@ function password_policy_user($op, &$edit, &$account, $category = NULL) {
         // Account is being unblocked.
         db_query('UPDATE {password_policy_expiration} SET unblocked = %d WHERE uid = %d', time(), $account->uid);
       }
+
+      // Store hash of newly set password
+      if (array_key_exists('pass', $edit)) {
+        _password_policy_store_password($account->uid, $edit['pass']);
+      }
       break;
 
     case 'login':
@@ -537,11 +542,6 @@ function password_policy_password_submit($form, &$form_state) {
 
   $values = $form_state['values'];
   $account = isset($form['_account']['#value']) ? $form['_account']['#value'] : (object)array('uid' => 0);
-
-  // Track the hashed password values which can then be used in the history constraint.
-  if ($account->uid && !empty($values['pass'])) {
-    _password_policy_store_password($account->uid, $values['pass']);
-  }
 }
 
 //////////////////////////////////////////////////////////////////////////////
