diff --git a/uc_roles/uc_roles.module b/uc_roles/uc_roles.module
index 6399887..5338bdd 100644
--- a/uc_roles/uc_roles.module
+++ b/uc_roles/uc_roles.module
@@ -31,10 +31,26 @@ function uc_roles_cron() {
   $reminder_granularity = variable_get('uc_roles_reminder_granularity', 'never');
   $reminder_qty = variable_get('uc_roles_reminder_length', NULL);
 
-  $result = db_query("SELECT * FROM {uc_roles_expirations}");
+  $args = array(':expiration' => REQUEST_TIME);
+  if ($reminder_granularity != 'never') {
+    $threshold = _uc_roles_get_expiration($reminder_qty, $reminder_granularity, REQUEST_TIME);
+    $where_clause = ' OR (notified IS NULL AND expiration <= :threshold)';
+    $args[':threshold'] = $threshold;
+  }
+  $sql = 'SELECT * FROM {uc_roles_expirations} WHERE expiration <= :expiration';
+  if (isset($where_clause)) {
+    $sql .= $where_clause;
+  }
+  $result = db_query($sql, $args);
   foreach ($result as $expiration) {
     $account = user_load($expiration->uid);
 
+    // If this user account had previously been deleted, remove this row
+    if (!$account) {
+      uc_roles_delete($expiration->uid, $expiration->rid);
+      continue;
+    }
+
     // User has to contain roles to manage.
     if (!is_array($account->roles) || !count($account->roles)) {
       continue;
