protected void watchInternal(String title, boolean unwatch) throws IOException, CredentialNotFoundException
    {
        // create the watchlist cache
        String state = unwatch ? "unwatch" : "watch";
        if (watchlist == null)
            getRawWatchlist();
        StringBuilder data = new StringBuilder("title=");
        data.append(URLEncoder.encode(normalize(title), "UTF-8"));
        if (unwatch)
            data.append("&unwatch");
        String watchToken = (String)getPageInfo(title).get("watchtoken");
        data.append("&token=");
        data.append(URLEncoder.encode(watchToken, "UTF-8"));
        post(apiUrl + "action=watch", data.toString(), state);
        log(Level.INFO, "Successfully " + state + "ed " + title, state);
    }