diff --git a/agreement.install b/agreement.install
index 3fc100a..9c229f3 100644
--- a/agreement.install
+++ b/agreement.install
@@ -125,3 +125,18 @@ function agreement_update_7200() {
 
   return theme('item_list', array('items' => $items));
 }
+
+/**
+ * Update the stored agreement frequency.
+ */
+function agreement_update_7201() {
+  // Only once is moving from "0" to "-1".
+  // On every log in is moving from "1" to "0".
+  $frequency = variable_get('agreement_frequency', -1);
+  if ($frequency === 0) {
+    variable_set('agreement_frequency', -1);
+  }
+  elseif ($frequency === 1) {
+    variable_set('agreement_frequency', 0);
+  }
+}
diff --git a/agreement.module b/agreement.module
index 84031e8..929d4d0 100644
--- a/agreement.module
+++ b/agreement.module
@@ -125,7 +125,7 @@ function agreement_menu() {
  * Implements hook_user_update().
  */
 function agreement_user_update(&$edit, &$account, $category = NULL) {
-  if (variable_get('agreement_frequency', 0) == 1) {
+  if (variable_get('agreement_frequency', 0) === 0) {
     // Don't require user to re-accept agreement if they've just changed their pwd.
     if (!empty($edit['pass'])) {
       $uid = $account->uid;
@@ -237,8 +237,12 @@ function agreement_settings() {
 
   $form['agreement_frequency'] = array(
     '#description'    => t('How often should users be required to accept the agreement?'),
-    '#default_value'  => variable_get('agreement_frequency', 0),
-    '#options'        => array(t('Only once'), t('On every log in')),
+    '#default_value'  => variable_get('agreement_frequency', -1),
+    '#options'        => array(
+                           -1 => t('Only once'),
+                           0 => t('On every log in'),
+                           365 => t('Once a year'),
+                         ),
     '#required'       => TRUE,
     '#title'          => t('Frequency'),
     '#type'           => 'select',
@@ -351,6 +355,12 @@ function agreement_settings() {
     '#description'    => t('If an email address is entered here, an email will be sent to that email address each time a user agrees. To have no email sent, leave this blank.'),
   );
 
+  // Allow an option to force every user to re-accept the agreement.
+  $form['agreement_clear'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Force all users to re-accept the agreement.'),
+  );
+
   $formToReturn = system_settings_form($form);
   $formToReturn['#submit'][] = '_agreement_admin_form_submit';
   return $formToReturn;
@@ -512,10 +522,31 @@ function _agreement_status($uid = NULL) {
     ->condition('a.uid', $uid, '=')
     ->range(0, 1);
 
+  $frequency = variable_get('agreement_frequency', -1);
+
   // Must agree on every login.
-  if (variable_get('agreement_frequency', 0) == 1) {
+  if ($frequency === 0) {
     $query->condition('a.sid', session_id(), '=');
   }
+  else {
+    // Check if there was an agreement reset date.
+    $reset = variable_get('agreement_reset', 0);
+
+    // Check how long ago the user could've accepted the agreement with it still
+    // being valid.
+    $timestamp = 0;
+    $current_time = time();
+    if ($frequency > 0) {
+      $timestamp = $current_time - ($frequency * 24 * 60 * 60);
+    }
+
+    // If the reset or timestamp is greater than zero, then compare the agreed
+    // date against that.
+    $timestamp = max($reset, $timestamp);
+    if ($timestamp > 0) {
+      $query->condition('a.agreed_date', $timestamp, '>=');
+    }
+  }
 
   return $query->execute()->fetchField();
 }
@@ -536,4 +567,9 @@ function _agreement_admin_form_submit($form, &$form_state) {
       $form_state['values']['agreement_page_title'] !== $form['agreement_page_title']['#default_value']) {
     menu_rebuild();
   }
+
+  // If they selected to force re-acceptance of the agreement for every user.
+  if (!empty($form_state['values']['agreement_clear'])) {
+    variable_set('agreement_reset', time());
+  }
 }
diff --git a/agreement.test b/agreement.test
index 89417d8..5ef74ed 100644
--- a/agreement.test
+++ b/agreement.test
@@ -328,7 +328,7 @@ class AgreementCustomUnprivilegedUserTestCase extends AgreementTestCase {
     $this->isNotAgreementPage();
 
     // B) Agreement required on every login.
-    variable_set('agreement_frequency', 1);
+    variable_set('agreement_frequency', 0);
 
     $this->drupalLogin($this->unprivilegedUser);
 
