diff --git a/redirect.admin.inc b/redirect.admin.inc
index 900c098..acdd664 100644
--- a/redirect.admin.inc
+++ b/redirect.admin.inc
@@ -634,7 +634,13 @@ function redirect_settings_form($form, &$form_state) {
     '#default_value' => variable_get('redirect_purge_inactive', 0),
     '#options' => array(0 => t('Never (do not discard)')) + drupal_map_assoc(array(604800, 1209600, 1814400, 2592000, 5184000, 7776000, 10368000, 15552000, 31536000), 'format_interval'),
     '#description' => t('Only redirects managed by the redirect module itself will be deleted. Redirects managed by other modules will be left alone.'),
-    '#disabled' => variable_get('redirect_page_cache', 0) && !variable_get('page_cache_invoke_hooks', TRUE),
+    '#disabled' => !variable_get('redirect_count_redirects', TRUE) || (variable_get('redirect_page_cache', 0) && !variable_get('page_cache_invoke_hooks', TRUE)),
+  );
+  $form['redirect_count_redirects'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Count redirects'),
+    '#default_value' => variable_get('redirect_count_redirects', TRUE),
+    '#description' => t('Increment a counter and update a timestamp each time a redirect is issued. Recommended to allow deletion of stale redirects, but can be disabled to reduce database writes.'),
   );
 
   $form['globals'] = array(
diff --git a/redirect.module b/redirect.module
index f9f0530..fbbaf4c 100644
--- a/redirect.module
+++ b/redirect.module
@@ -344,7 +344,7 @@ function redirect_cron() {
  */
 function redirect_exit($destination = NULL) {
   // If the current page is being cached, track it.
-  if (drupal_get_http_header('Location') && $rid = drupal_get_http_header('X-Redirect-ID')) {
+  if (variable_get('redirect_count_redirects', TRUE) && drupal_get_http_header('Location') && ($rid = drupal_get_http_header('X-Redirect-ID'))) {
     // Ensure the database is loaded. This is only the next bootstrap step
     // after DRUPAL_BOOTSTRAP_DATABASE
     drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);
@@ -935,7 +935,7 @@ function redirect_purge_inactive_redirects(array $types = array('redirect'), $in
     $interval = variable_get('redirect_purge_inactive', 0);
   }
 
-  if (!$interval || !variable_get('redirect_page_cache', 0) || !variable_get('page_cache_invoke_hooks', TRUE)) {
+  if (!$interval || !variable_get('redirect_count_redirects', TRUE) || (variable_get('redirect_page_cache', 0) && !variable_get('page_cache_invoke_hooks', TRUE))) {
     // If serving redirects from the page cache is enabled and hooks are not
     // executed during page caching, then we cannot track when a redirect is
     // used. Therefore, we cannot remove unused redirects.
@@ -1290,6 +1290,7 @@ function redirect_variables() {
     'redirect_global_clean' => 1,
     'redirect_global_canonical' => 1,
     'redirect_global_admin_paths' => 0,
+    'redirect_count_redirects' => TRUE,
   );
 }
 
