diff --git a/auth/db/auth.php b/auth/db/auth.php
index 239df97..591964a 100644
--- a/auth/db/auth.php
+++ b/auth/db/auth.php
@@ -363,10 +363,21 @@ class auth_plugin_db extends auth_plugin_base {
 
                 $user = addslashes_object($user);
                 // maybe the user has been deleted before
-                if ($old_user = get_record('user', 'username', $user->username, 'deleted', 1, 'mnethostid', $user->mnethostid)) {
-                    $user->id = $old_user->id;
-                    set_field('user', 'deleted', 0, 'username', $user->username);
-                    echo "\t"; print_string('auth_dbreviveuser', 'auth', array(stripslashes($user->username), $user->id)); echo "\n";
+                $old_users = get_records_sql("SELECT * FROM {$CFG->prefix}user_preferences WHERE name='undelete_username' AND value='{$user->username}'");
+                if (is_array($old_users)) {
+                    if (count($old_users) == 1) {
+                        $old_user = array_shift($old_users); // first element
+                    } else {
+                        echo "\t"; print_string('auth_dbrevivedusererror', 'auth', stripslashes($user->username));
+                    }
+                }
+                if (isset($old_user)) {
+                    $user->id = $old_user->userid;
+                    error_log("reviving user id {$user->id}");
+                    set_field('user', 'username', $user->username, 'id', $user->id);
+                    set_field('user', 'deleted', 0, 'id', $user->id);
+                    unset_user_preference('undelete_username', $user->id);
+                    echo "\t"; print_string('auth_dbreviveduser', 'auth', array(stripslashes($user->username), $user->id)); echo "\n";
                 } elseif ($id = insert_record ('user',$user)) { // it is truly a new user
                     echo "\t"; print_string('auth_dbinsertuser','auth',array(stripslashes($user->username), $id)); echo "\n";
                     // if relevant, tag for password generation
diff --git a/lib/moodlelib.php b/lib/moodlelib.php
index 6b6b8ec..8951596 100644
--- a/lib/moodlelib.php
+++ b/lib/moodlelib.php
@@ -2913,6 +2913,7 @@ function delete_user($user) {
     $updateuser->email        = '';               // Clear this field to free it up
     $updateuser->idnumber     = '';               // Clear this field to free it up
     $updateuser->timemodified = time();
+    set_user_preference('undelete_username', $user->username, $user->id);
 
     if (update_record('user', $updateuser)) {
         commit_sql();
