diff --git a/legal.admin.inc b/legal.admin.inc
index 67770e0..2b7e71b 100644
--- a/legal.admin.inc
+++ b/legal.admin.inc
@@ -36,6 +36,12 @@ function legal_administration($form_state) {
     '#required'      => TRUE,
   );
 
+  $form['new_revision'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Create a new revision and force users to re-accept Terms & Conditions'),
+    '#default_value' => TRUE,
+  );
+
   // Set this here or array will flatten out and override real values.
   $form['legal']['#tree'] = TRUE;
 
@@ -250,20 +256,40 @@ function legal_administration_submit($form, &$form_state) {
 
   // If new conditions are different from current permisions, enter in database.
   if (legal_conditions_updated($values)) {
-    $version = legal_version($values['version_handling'], $values['language']);
-
-    db_insert('legal_conditions')
-      ->fields(array(
-      'version'    => $version['version'],
-      'revision'   => $version['revision'],
-      'language'   => $values['language'],
-      'conditions' => $values['conditions']['value'],
-      'format'     => $values['conditions']['format'],
-      'date'       => time(),
-      'extras'     => serialize($values['extras']),
-      'changes'    => $values['changes'],
-    ))
-      ->execute();
+    if (!empty($values['new_revision'])) {
+      $version = legal_version($values['version_handling'], $values['language']);
+
+      db_insert('legal_conditions')
+        ->fields(array(
+        'version'    => $version['version'],
+        'revision'   => $version['revision'],
+        'language'   => $values['language'],
+        'conditions' => $values['conditions']['value'],
+        'format'     => $values['conditions']['format'],
+        'date'       => time(),
+        'extras'     => serialize($values['extras']),
+        'changes'    => $values['changes'],
+      ))
+        ->execute();
+    }
+    else {
+      $version = legal_version($values['version_handling'], $values['language'], FALSE);
+
+      db_update('legal_conditions')
+        ->fields(array(
+          'version' => $version['version'],
+          'revision' => $version['revision'],
+          'language' => $values['language'],
+          'conditions' => $values['conditions']['value'],
+          'format' => $values['conditions']['format'],
+          'date' => time(),
+          'extras' => serialize($values['extras']),
+          'changes' => $values['changes'],
+      ))
+        ->condition('version', $version['version'], '=')
+        ->condition('revision', $version['revision'], '=')
+        ->execute();
+    }
 
     drupal_set_message(t('Terms & Conditions have been saved.'));
   }
@@ -280,7 +306,11 @@ function legal_conditions_updated($new) {
   $previous_same_language = legal_get_conditions($new['language']);
   $previous               = legal_get_conditions();
 
-  if (($previous_same_language['conditions'] != $new['conditions']) && ($previous['conditions'] != $new['conditions'])) {
+  if (($previous_same_language['conditions'] != $new['conditions']['value']) && ($previous['conditions'] != $new['conditions']['value'])) {
+    return TRUE;
+  }
+
+  if (($previous_same_language['format'] != $new['conditions']['format']) && $previous['format'] != $new['conditions']['format']) {
     return TRUE;
   }
 
@@ -302,8 +332,17 @@ function legal_conditions_updated($new) {
  * Determine version ID of T&C.
  * If it's new version determine next version id,
  * if it's a revision return the ID of the current version increment revision ID by 1.
+ *
+ * @param string $version_handling
+ *   Either 'version' or 'revision'. Determines what key versioning is tracked under.
+ *
+ * @param string $language
+ *   The langcode used for this revision.
+ *
+ * @param bool $new
+ *   If TRUE a new version will be created, otherwise the current version is returned.
  */
-function legal_version($version_handling, $language) {
+function legal_version($version_handling, $language, $new = TRUE) {
 
   $version = (int)db_select('legal_conditions', 'lc')
     ->fields('lc', array('version'))
@@ -314,7 +353,12 @@ function legal_version($version_handling, $language) {
 
   // make new version
   if ($version_handling == 'version') {
-    $versioning['version']  = empty($version) ? 1 : $version + 1;
+    if (empty($version)) {
+      $versioning['version'] = 1;
+    }
+    else {
+      $versioning['version'] = $new ? $version + 1 : $version;
+    }
     $versioning['revision'] = 1;
   }
 
@@ -330,7 +374,12 @@ function legal_version($version_handling, $language) {
       ->fetchField();
 
     $versioning['version']  = $version;
-    $versioning['revision'] = empty($revision) ? 1 : $revision + 1;
+    if (empty($revision)) {
+      $versioning['revision'] = 1;
+    }
+    else {
+      $versioning['revision'] = $new ? $revision + 1 : $revision;
+    }
   }
 
   return $versioning;
