+  // The swapRolesWith swaps existing user role with that of another user.
+  static function swapRolesWith($user_id) {
+    global $user;
+    $mdb2 = getConnection();
+
+    // Obtain role id for the user we are swapping ourselves with.
+    $sql = "select u.id, u.role_id from tt_users u left join tt_roles r on (u.role_id = r.id) where u.id = $user_id and u.group_id = $user->group_id and u.status = 1 and r.rank < $user->rank";
+    $res = $mdb2->query($sql);
+    if (is_a($res, 'PEAR_Error'))
+      return false;
+    $val = $res->fetchRow();
+    if (!$val['id'] || !$val['role_id'])
+      return false;
+
+    $modified_part = ', modified = now(), modified_ip = '.$mdb2->quote($_SERVER['REMOTE_ADDR']).', modified_by = '.$mdb2->quote($user->id);
+
+    // Promote user.
+    $sql = "update tt_users set role_id = $user->role_id".$modified_part." where id = $user_id and group_id = $user->group_id";
+    $affected = $mdb2->exec($sql);
+    if (is_a($affected, 'PEAR_Error')) return false;
+
+    // Demote self.
+    $role_id = $val['role_id'];
+    $sql = "update tt_users set role_id = $role_id".$modified_part." where id = $user->id and group_id = $user->group_id";
+    $affected = $mdb2->exec($sql);
+    if (is_a($affected, 'PEAR_Error')) return false;
+
+    return true;
+  }
+
+  // The getUsersForSwap obtains all users a current user can swap roles with.
+  static function getUsersForSwap() {