public MediaWiki endMove(final MediaWiki.EditToken moveToken, final String newFullName, final String reason, final boolean suppressRedirect, final boolean moveTalk, final boolean moveSubpages) throws IOException, MediaWiki.MediaWikiException {
		final Map<String, String> getParams = paramValuesToMap("action", "move", "format", "xml");
		final Map<String, String> postParams = paramValuesToMap("from", moveToken.getFullPageName(), "to", newFullName, "token", moveToken.getTokenText(), "starttimestamp", iso8601TimestampParser.format(moveToken.getStartTime()), "reason", reason);
		if (suppressRedirect) {
			postParams.put("noredirect", "true");
		}
		if (moveTalk) {
			postParams.put("movetalk", "true");
		}
		if (moveSubpages) {
			postParams.put("movesubpages", "true");
		}
		if (moveToken.getLastRevisionTime() != null) {
			postParams.put("basetimestamp", iso8601TimestampParser.format(moveToken.getLastRevisionTime()));
		}

		final String url = createApiGetUrl(getParams);

		networkLock.lock();
		try {
			final InputStream in = post(url, postParams);
			final Document xml = parse(in);
			checkError(xml);
			checkError(xml, "talkmove-error-code", "talkmove-error-info");

			final NodeList moveTags = xml.getElementsByTagName("move");

			if (moveTags.getLength() > 0)
				return this;
			else
				throw new MediaWiki.ResponseFormatException("expected <move> tag not present");
		} finally {
			networkLock.unlock();
		}
	}