diff --git a/masquerade.module b/masquerade.module
index fb7fbeb..a02baff 100644
--- a/masquerade.module
+++ b/masquerade.module
@@ -657,11 +657,19 @@ function masquerade_autocomplete($string) {
     $matches[$anonymous] = $anonymous;
   }
   // Other suggestions.
-  $result = db_query_range("SELECT name FROM {users} LEFT JOIN {users_roles} r USING (uid) WHERE r.rid IN (:rids) AND LOWER(name) LIKE LOWER(:string)", 0, 10, array(
-    ':string' => $string . '%',
-    ':rids' => masquerade_get_allowed_roles(),
-  ));
-  foreach ($result as $user) {
+  $query = db_select('users', 'u')
+    ->fields('u', array('name'))
+    ->condition('name', db_like($string) . '%', 'LIKE')
+    ->orderBy('name', 'ASC')
+    ->range(0, 10);
+
+  $rids = masquerade_get_allowed_roles();
+  if (!in_array(DRUPAL_AUTHENTICATED_RID, $rids)) {
+    $query->join('users_roles', 'ur', 'u.uid = ur.uid');
+    $query->condition('rid', $rids);
+  }
+
+  foreach ($query->execute() as $user) {
     $matches[$user->name] = check_plain($user->name);
   }
   if (module_exists('devel')) {
@@ -696,11 +704,19 @@ function masquerade_autocomplete_multiple($string, $add_anonymous = TRUE) {
       }
     }
     // Other suggestions.
-    $result = db_query_range("SELECT name FROM {users} LEFT JOIN {users_roles} r USING (uid) WHERE r.rid IN (:rids) AND WHERE LOWER(name) LIKE :string", 0, 10, array(
-      ':string' => $last_string . '%',
-      ':rids' => masquerade_get_allowed_roles(),
-    ));
-    foreach ($result as $user) {
+    $query = db_select('users', 'u')
+      ->fields('u', array('name'))
+      ->condition('name', db_like($string) . '%', 'LIKE')
+      ->orderBy('name', 'ASC')
+      ->range(0, 10);
+
+    $rids = masquerade_get_allowed_roles();
+    if (!in_array(DRUPAL_AUTHENTICATED_RID, $rids)) {
+      $query->join('users_roles', 'ur', 'u.uid = ur.uid');
+      $query->condition('rid', $rids);
+    }
+
+    foreach ($query->execute() as $user) {
       $matches[$prefix . $user->name] = check_plain($user->name);
     }
 
