diff -urp path_redirect.admin.inc.orig path_redirect.admin.inc
--- path_redirect.admin.inc.orig	2008-03-07 21:10:02.000000000 -0500
+++ path_redirect.admin.inc	2008-10-15 07:53:52.000000000 -0400
@@ -9,10 +9,11 @@ function path_redirect_admin($rid = FALS
     array('data' => t('From'), 'field' => 'path', 'sort' => 'asc'),
     array('data' => t('To'), 'field' => 'redirect'),
     array('data' => t('Type'), 'field' => 'type'),
+    array('data' => t('Expire in'), 'field' => 'expire'),
     array('data' => t('Operations'), 'colspan' => '3')
   );
 
-  $result = pager_query('SELECT rid, path, redirect, query, fragment, type FROM {path_redirect}'. tablesort_sql($header), 50);
+  $result = pager_query('SELECT rid, path, redirect, query, fragment, type, expire FROM {path_redirect}'. tablesort_sql($header), 50);
   $count = 0;
   $types = path_redirect_status_codes();
   $destination = drupal_get_destination();
@@ -21,10 +22,12 @@ function path_redirect_admin($rid = FALS
     $redirect = $r->redirect;
     $query = $r->query ? "?$r->query" : '';
     $fragment = $r->fragment ? "#$r->fragment" : '';
+    $expire = _path_redirect_expiry_options($r->expire);
     $rows[] = array(
       $path,
       check_url($redirect . $query . $fragment),
       $types[$r->type]['title'],
+      $expire,
       array('data' => l(t('test'), preg_replace('/\?.*/', '', $r->path), array('query' => strstr($r->path, '?') ? preg_replace('/.*\?/', '', $r->path) : NULL))),
       array('data' => l(t('edit'), 'admin/build/path-redirect/edit/'. $r->rid, array('query' => $destination))),
       array('data' => l(t('delete'), 'admin/build/path-redirect/delete/'. $r->rid, array('query' => $destination))),
@@ -62,7 +65,7 @@ function path_redirect_edit($form_state,
   return $output;
 }
 
-function path_redirect_edit_form(&$form_state, $edit = array('path' => '', 'redirect' => '', 'query' => '', 'fragment' => '', 'type' => PATH_REDIRECT_DEFAULT_TYPE, 'rid' => NULL)) {
+function path_redirect_edit_form(&$form_state, $edit = array('path' => '', 'redirect' => '', 'query' => '', 'fragment' => '', 'type' => PATH_REDIRECT_DEFAULT_TYPE, 'expire' => 0, 'rid' => NULL)) {
   $form['path'] = array(
     '#type' => 'textfield',
     '#title' => t('From'),
@@ -135,6 +138,13 @@ function path_redirect_edit_form(&$form_
     '#value' => '<p>'. t('Find more information about http redirect codes <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3">here</a>.') .'</p>',
   );
 
+  $form['expire'] = array(
+    '#type' =>  'select',
+    '#title'  =>  t('This redirect will expire in'),
+    '#description'  =>  t('Select the period after which the redirect will be purged from the system. By default, a redirect is permanent.'),
+    '#options'  =>  _path_redirect_expiry_options(),
+    '#default_value'  => $edit['expire'],
+  );
   $form['rid'] = array(
     '#type' => 'hidden',
     '#value' => $edit['rid'],
@@ -252,3 +262,25 @@ function path_redirect_status_codes() {
 
   return $codes;
 }
+
+/**
+ * Helper function that builds a list
+ * of predefined expiry periods
+ */
+function _path_redirect_expiry_options($option = NULL) {
+  static $expire;
+  if (!isset($expire)) {
+    $expire = array(
+      0                     =>  t('Permanent'),
+      (60 * 60)             =>  t('1 hour'),
+      (60 * 60 * 24)        =>  t('1 day'),
+      (60 * 60 * 24 * 10)   =>  t('10 days'),
+      (60 * 60 * 24 * 30)   =>  t('1 month'),
+      (60 * 60 * 24 * 61)   =>  t('2 months'),
+      (60 * 60 * 24 * 92)   =>  t('3 months'),
+      (60 * 60 * 24 * 183)  =>  t('6 months'),
+      (60 * 60 * 24 * 365)  =>  t('1 year'),
+    );
+  }
+  return is_null($option) ? $expire : $expire[$option];
+}
\ No newline at end of file
diff -urp path_redirect.install.orig path_redirect.install
--- path_redirect.install.orig	2008-04-13 23:29:32.000000000 -0400
+++ path_redirect.install	2008-10-15 05:57:37.000000000 -0400
@@ -137,3 +137,24 @@ function path_redirect_update_4() {
   return $ret;
 }
 
+function path_redirect_update_6005() {
+  $ret = array();
+
+  // Ad a new field. The "expire" column
+  db_add_field($ret, 'path_redirect', 'expire', array(
+    'type'        =>  'int',
+    'size'        =>  'normal',
+    'not null'    =>  TRUE,
+    'default'     =>  0,
+    'description' =>  t('Life of redirect. "0" means "never expire".'),
+  ));
+  db_add_field($ret, 'path_redirect', 'changed', array(
+    'type'        =>  'int',
+    'size'        =>  'normal',
+    'not null'    =>  TRUE,
+    'default'     =>  0,
+    'description' =>  t('Time when redirect was updated.')
+  ));
+
+  return $ret;
+}
\ No newline at end of file
diff -urp path_redirect.module.orig path_redirect.module
--- path_redirect.module.orig	2008-03-07 20:10:17.000000000 -0500
+++ path_redirect.module	2008-10-15 07:47:56.000000000 -0400
@@ -132,11 +132,13 @@ function path_redirect_save($edit) {
     $edit['fragment'] = '';
   }
 
+  $edit['changed'] = time();
+
   if (!empty($edit['rid'])) {
-    $return = db_query("UPDATE {path_redirect} SET path = '%s', redirect = '%s', query = '%s', fragment = '%s', type = %d WHERE rid = %d", $edit['path'], $edit['redirect'], $edit['query'], $edit['fragment'], $edit['type'], $edit['rid']);
+    $return = db_query("UPDATE {path_redirect} SET path = '%s', redirect = '%s', query = '%s', fragment = '%s', type = %d, expire = %d, changed = %d WHERE rid = %d", $edit['path'], $edit['redirect'], $edit['query'], $edit['fragment'], $edit['type'], $edit['expire'], $edit['changed'], $edit['rid']);
   }
   else {
-    $return = db_query("INSERT INTO {path_redirect} (path, redirect, query, fragment, type) VALUES ('%s', '%s', '%s', '%s', '%s')", $edit['path'], $edit['redirect'], $edit['query'], $edit['fragment'], $edit['type']);
+    $return = db_query("INSERT INTO {path_redirect} (path, redirect, query, fragment, type, expire, changed) VALUES ('%s', '%s', '%s', '%s', '%s', %d, %d)", $edit['path'], $edit['redirect'], $edit['query'], $edit['fragment'], $edit['type'], $edit['expire'], $edit['changed']);
   }
   return $return;
 }
@@ -146,10 +148,10 @@ function path_redirect_save($edit) {
  */
 function path_redirect_load($rid = NULL, $from = NULL) {
   if (!empty($rid)) {
-    $result = db_fetch_array(db_query("SELECT rid, path, redirect, query, fragment, type FROM {path_redirect} WHERE rid = %d", $rid));
+    $result = db_fetch_array(db_query("SELECT rid, path, redirect, query, fragment, type, expire FROM {path_redirect} WHERE rid = %d", $rid));
   }
   else if (!empty($from)) {
-    $result = db_fetch_array(db_query("SELECT rid, path, redirect, query, fragment, type FROM {path_redirect} WHERE path = '%s'", $from));
+    $result = db_fetch_array(db_query("SELECT rid, path, redirect, query, fragment, type, expire FROM {path_redirect} WHERE path = '%s'", $from));
   }
   return $result;
 }
@@ -222,3 +224,11 @@ function path_redirect_goto($path = '', 
   // of the code below the drupal_goto() call gets executed when we redirect.
   exit();
 }
+
+/**
+ * Implementation of hook_cron
+ */
+function path_redirect_cron() {
+  // Purge expired redirects
+  db_query("DELETE FROM {path_redirect} WHERE expire <> 0 AND expire + changed < %d", time());
+}
\ No newline at end of file
