diff --git a/password_policy.admin.inc b/password_policy.admin.inc
index c637681..b40fbff 100644
--- a/password_policy.admin.inc
+++ b/password_policy.admin.inc
@@ -539,6 +539,11 @@ function password_policy_password_change_settings() {
     '#title' => t('Force password change on first-time login'),
     '#default_value' => variable_get('password_policy_new_login_change', 0),
   );
+  $form['password_policy_force_logout'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('If logged in, log the user out if they are forced to change their password.'),
+    '#default_value' => variable_get('password_policy_force_logout', 0),
+  );
   $roles = user_roles(TRUE);
   $form['password_policy_force_change_roles'] = array(
     '#type' => 'checkboxes',
@@ -563,6 +568,7 @@ function password_policy_password_change_settings_submit($form, &$form_state) {
   global $user;
   $selected_roles = array();
   variable_set('password_policy_new_login_change', $form_state['values']['password_policy_new_login_change']);
+  variable_set('password_policy_force_logout', $form_state['values']['password_policy_force_logout']);
   if ($form_state['values']['password_policy_new_login_change'] == 1) {
     watchdog('password_policy', 'New user accounts must change password on new login enabled by !admin', array('!admin' => $user->name), WATCHDOG_NOTICE);
   }
diff --git a/password_policy.install b/password_policy.install
index 1af230b..e427722 100644
--- a/password_policy.install
+++ b/password_policy.install
@@ -275,6 +275,7 @@ function password_policy_uninstall() {
   variable_del('password_policy_warning_body');
   variable_del('password_policy_new_login_change');
   variable_del('password_policy_force_change_reset');
+  variable_del('password_policy_force_logout');
 }
 
 /**
diff --git a/password_policy.module b/password_policy.module
index c1d9fc7..b893692 100644
--- a/password_policy.module
+++ b/password_policy.module
@@ -35,6 +35,15 @@ function password_policy_init() {
   // Check password reset status and force a reset if needed.
   if (_password_policy_is_password_change_forced($user->uid) &&
       !_password_policy_is_path_allowed_when_password_change_forced()) {
+    if (variable_get('password_policy_force_logout', 0)) {
+      module_invoke_all('user_logout', $user);
+      // Destroy the current session, and reset $user to the anonymous user.
+      session_destroy();
+      drupal_set_message(t('Your password has expired. You have been logged out and must change your password to proceed on the site.'), 'error', FALSE);
+      // Do not obey Drupal's destination if set. Otherwise user logged out and
+      // redirected and they don't know why or how to fix it.
+      drupal_goto('user/password');
+    }
     drupal_set_message(t('Your password has expired. You must change your password to proceed on the site.'), 'error', FALSE);
     _password_policy_go_to_password_change_page();
   }
@@ -548,14 +557,23 @@ function password_policy_form_alter(&$form, $form_state, $form_id) {
             $force_change = variable_get('password_policy_new_login_change', 0);
           }
 
+          // Set the field title and description depending on whether the
+          // force logout option is enabled.
+          $force_password_change_title = t('Force password change on next login');
+          $force_password_change_description = t('If already logged in, the user will be forced to change their password upon their next page request.');
+          if (variable_get('password_policy_force_logout', 0)) {
+            $force_password_change_title = t('Force password change before next login');
+            $force_password_change_description = t('If logged in, the user will be logged out and forced to change their password upon their next page request.');
+          }
+
           $form['password_policy'] = array(
             '#type' => 'fieldset',
             '#title' => t('Password settings'),
           );
           $form['password_policy']['force_password_change'] = array(
             '#type' => 'checkbox',
-            '#title' => t('Force password change on next login'),
-            '#description' => t('If already logged in, the user will be forced to change their password upon their next page request.'),
+            '#title' => $force_password_change_title,
+            '#description' => $force_password_change_description,
             '#default_value' => $force_change,
           );
         }
