public final static boolean finish() throws FatalError {
		try {
			// HTTP parameters stores header etc.
			HttpParams params = new BasicHttpParams();
			params.setParameter("http.protocol.handle-redirects", false);

			HttpGet httpget = new HttpGet(Config.getHost() + "quests/start");
			httpget.setParams(params);

			HttpResponse response = Control.current.httpclient.execute(httpget);

			// obtain redirect target
			Header locationHeader = response.getFirstHeader("location");
			HttpEntity resEntity = response.getEntity();
			if (resEntity != null) {
				resEntity.consumeContent();
			}
			if (locationHeader != null) {

				// difficult
				if (locationHeader.getValue().equalsIgnoreCase(
						(Config.getHost() + "quests/fight").toLowerCase())) {
					Output.printTabLn(
							"Sie haben zuvor einen schweren Dienst gewählt, "
									+ "aber nicht beendet.", 2);
					return difficultFinish();
				} else if (locationHeader.getValue().equalsIgnoreCase(
						(Config.getHost() + "quests/finish").toLowerCase())) {
					Output.printTabLn(
							"Sie haben zuvor einen leichten Dienst gewählt, "
									+ "aber nicht beendet.", 2);
					return easyFinish();
				} else if (locationHeader.getValue().equalsIgnoreCase(
						(Config.getHost() + "quests/doQuest").toLowerCase())) {

					try {
						JSONObject o = Utils.getJSON("quests/questData");
						int serverTs = o.getJSONObject("time").getInt("server");
						int endTs = o.getJSONObject("time").getInt("realend");

						int centiSeconds = endTs - serverTs;
						centiSeconds *= 10;
						centiSeconds += 300;

						Control.sleep(centiSeconds, 1);

						return finish();

					} catch (JSONException e) {
						Output.error(e);
						return false;
					}
				} else {
					Output.printTabLn("Es ging was schief.", 0);
					return false;
				}
			}
		} catch (IOException e) {
			Output.printTabLn("Es ging was schief.", 0);
			return false;
		}

		return true;
	}