private HttpResponse getFirstResponse(Collection<HttpRequest> requests) throws SuchgenieException
	{
		Collection<Future<HttpResponse>> futureHttpResponses = new LinkedList<>();
		for (HttpRequest request : requests)
		{
			futureHttpResponses.add(request.executeAsync(EXECUTOR));
		}

		while (!futureHttpResponses.isEmpty())
		{
			for (Future<HttpResponse> futureHttpResponse : futureHttpResponses)
			{
				try
				{
					HttpResponse response = futureHttpResponse.get(100, TimeUnit.MILLISECONDS);
					if (response.isSuccessStatusCode())
					{
						return response;
					}
					logger.warn("HttpRequest failed with status code {}", response.isSuccessStatusCode());
					futureHttpResponses.remove(futureHttpResponse);
				}
				catch (InterruptedException e)
				{
					logger.warn("HttpRequest got interrupted while execution", e);
					futureHttpResponses.remove(futureHttpResponse);
					Thread.currentThread().interrupt();
				}
				catch (ExecutionException e)
				{
					futureHttpResponses.remove(futureHttpResponse);
					if (futureHttpResponses.isEmpty())
					{
						throw new SuchgenieException(e.getCause());
					}
					if (!e.getCause().getMessage().startsWith("401 Unauthorized"))
					{
						logger.warn("logging failure of not last parallel HttpRequest", e);
					}
				}
				catch (TimeoutException e)
				{
					logger.trace("HttpRequest has no result, yet. Checking the next.", e);
				}
			}
		}

		throw new SuchgenieException("The Request could not be completed. Sorry.");
	}