diff --git a/drupalvb.inc.php b/drupalvb.inc.php
index 3a5da68..1475988 100644
--- a/drupalvb.inc.php
+++ b/drupalvb.inc.php
@@ -236,7 +236,14 @@ function drupalvb_update_user($account, $edit) {
         $values[':name'] = drupalvb_htmlspecialchars($value);
         break;
 
-      case 'current_pass':
+      case 'clear_pass':
+        if(empty($edit['salt'])) {
+          $salt = '';
+          for ($i = 0; $i < 3; $i++) {
+            $salt .= chr(rand(32, 126));
+          }
+          $edit['salt'] = $salt;
+        }
         $fields[] = "password = :password";
         $values[':password'] = md5(md5($value) . $edit['salt']);
         $fields[] = "salt = :salt";
@@ -264,7 +271,7 @@ function drupalvb_update_user($account, $edit) {
   if (isset($edit['userid'])) {
     $userid = $edit['userid'];
   }
-  else {
+  else if (!$userid = drupalvb_get_userid($account->uid)) {
     $userid = drupalvb_db_query("SELECT userid FROM {user} WHERE username = :name", array(':name' => drupalvb_htmlspecialchars($account->name)))->fetchField();
   }
   drupalvb_set_mapping($account->uid, $userid);
@@ -298,7 +305,7 @@ function drupalvb_export_drupal_users() {
     if (!drupalvb_create_user($user, (array)$user)) {
       // Username already exists, update email and password only.
       // Case insensitive username is required to detect collisions.
-      $vbuser = drupalvb_db_query("SELECT salt,userid FROM {user} WHERE LOWER(username) = LOWER(:name)", array(':name' => drupalvb_htmlspecialchars($user->name)))->fetchAssoc();
+      $vbuser = drupalvb_db_query("SELECT salt,userid FROM {user} WHERE username = :name", array(':name' => drupalvb_htmlspecialchars($user->name)))->fetchAssoc();
       drupalvb_update_user($user, array_merge((array)$user, $vbuser));
     }
   }
@@ -432,7 +439,8 @@ function drupalvb_get_recent_posts($scope = 'last') {
   global $user;
 
   // Queries the vB user database to find a matching set of user data.
-  $result = drupalvb_db_query("SELECT userid, username, lastvisit FROM {user} WHERE username = :name", array(':name' => drupalvb_htmlspecialchars($user->name)));
+  $userid = drupalvb_get_userid($user->uid);
+  $result = drupalvb_db_query("SELECT userid, username, lastvisit FROM {user} WHERE userid = :userid", array(':userid' => $userid));
 
   // Make sure a user is logged in to get their last visit and appropriate post
   // count.
diff --git a/drupalvb.module b/drupalvb.module
index 6accfb4..418e704 100644
--- a/drupalvb.module
+++ b/drupalvb.module
@@ -231,8 +231,11 @@ function drupalvb_user_account_form_validate($form, &$form_state) {
   }
   
   // Pass the plain text password to current_pass so we can update the forum password on hook_user_update
-  if (!empty($form_state['values']['pass']) && empty($form_state['values']['current_pass'])) {
-    $form_state['values']['current_pass'] = $form_state['values']['pass'];
+  if (!empty($form_state['values']['pass'])) {
+    $form_state['values']['clear_pass'] = $form_state['values']['pass'];
+  }
+  else if (!empty($form_state['values']['current_pass'])) {
+    $form_state['values']['clear_pass'] = $form_state['values']['current_pass'];
   }
 }
 
@@ -431,14 +434,19 @@ function drupalvb_user_update($edit, $account) {
   global $user;
 
   // Update data if user exists.
-  if ($vbuser = drupalvb_db_query_range("SELECT userid, salt FROM {user} WHERE username = :name", 0, 1, array(":name" => drupalvb_htmlspecialchars($account->name)))->fetchAssoc()) {
+  $userid = drupalvb_get_userid($account->uid);
+  if (!$userid) {
+    $userid = drupalvb_db_query_range("SELECT userid FROM {user} WHERE username = :name", 0,1, array(":name" => drupalvb_htmlspecialchars($account->name)))->fetchField();
+  }
+  
+  if ($userid) {
     // Merge current username, salt, and finally edited values into one array,
     // so usernames may be altered (if allowed).
-    drupalvb_update_user($account, array_merge(array('name' => $account->name), $vbuser, $edit));
+    drupalvb_update_user($account, array_merge(array('name' => $account->name, "userid" => $userid),$edit));
   }
   // If not, create a new user in vB.
   else {
-    if (!$vbuser['userid'] = drupalvb_create_user($account, array_merge(array('name' => $account->name), $edit))) {
+    if (!$userid = drupalvb_create_user($account, array_merge(array('name' => $account->name), $edit))) {
       // Indicates duplicate username (should not happen).
       return;
     }
@@ -446,7 +454,7 @@ function drupalvb_user_update($edit, $account) {
 
   // Prevent overriding cookies of administrators.
   if ($account->uid == $user->uid) {
-    drupalvb_set_login_cookies($vbuser['userid']);
+    drupalvb_set_login_cookies($userid);
   }
 }
 
@@ -458,7 +466,7 @@ function drupalvb_user_update($edit, $account) {
  */
 function drupalvb_user_delete($account) {
   // If vBulletin user exists, delete user account, session and profile data.
-  if ($userid = drupalvb_db_query("SELECT userid FROM {user} WHERE username = :name", array(":name" => drupalvb_htmlspecialchars($account->name)))->fetchField()) {
+  if ($userid = drupalvb_get_userid($account->uid)) {
     drupalvb_db_query("DELETE FROM {session} WHERE userid = :id", array(":id" => $userid));
     drupalvb_db_query("DELETE FROM {user} WHERE userid = :id", array(":id" => $userid));
     drupalvb_db_query("DELETE FROM {userfield} WHERE userid = :id", array(":id" => $userid));
@@ -922,7 +930,8 @@ function drupalvb_block_user_info() {
     );
   }
   if ($display['pms']) {
-    $vbuser = drupalvb_db_query("SELECT pmtotal, pmunread FROM {user} WHERE username = :name", array(":name" => drupalvb_htmlspecialchars($user->name)))->fetchAssoc();
+    $userid = drupalvb_get_userid($user->uid);
+    $vbuser = drupalvb_db_query("SELECT pmtotal, pmunread FROM {user} WHERE userid = :userid", array(":userid" => $userid))->fetchAssoc();
     $rows[] = array(
       l(t('New private messages'), 'drupalvb/pms'),
       (int)$vbuser['pmunread'],
@@ -1171,7 +1180,8 @@ function drupalvb_privatemsg($message, $op) {
     case 'sent':
       // Verify that recipient exists in vB.
       $recipient = user_load($message->recipient);
-      if (!$userid = drupalvb_db_query_range("SELECT userid FROM {user} WHERE username = :name", array(":name" => drupalvb_htmlspecialchars($recipient->name)), 0, 1)->fetchField()) {
+      
+      if (!$userid = drupalvb_get_userid($message->recipient)) {
         if (!$userid = drupalvb_create_user($recipient, (array)$recipient)) {
           // Indicates duplicate username (should not happen).
           return;
