public String[] allUsers(String start, int number) throws IOException
    {
        // sanitise
        String url = query + "list=allusers&aulimit=" + (number > max ? max : number) + "&aufrom=";

        // work around an arbitrary and silly limitation
        ArrayList<String> members = new ArrayList<String>(6667); // enough for most requests
        String next = URLEncoder.encode(start, "UTF-8");
        do
        {
            next = URLEncoder.encode(next, "UTF-8");
            String line = fetch(url + next, "allUsers");

            // parse
            int a = line.indexOf("aufrom=\"") + 8;
            next = line.substring(a, line.indexOf("\" />", a));
            // FIXME: MediaWiki bug: return to me!
            for (int w = line.indexOf("<u "); w >= 0 && members.size() < number; w = line.indexOf("<u ", w))
            //while (line.contains("<u ") && members.size() < number)
            {
                int x = line.indexOf("name=\"", w) + 6;
                int y = line.indexOf("\"", x);
                members.add(line.substring(x, y));
                w = y;
            }
        }
        while (members.size() < number);
        log(Level.INFO, "Successfully retrieved user list (" + number + " users starting at " + start + ")", "allUsers");
        return members.toArray(new String[0]);
    }