public synchronized StickyWebResponse execute()
			throws StickyWebNotInCacheException, StickyWebInternetException,
			StickyWebInvalidQueryString, StickyWebInvalidPostArguments {

		if (this.online)
		{
			Callable<StickyWebResponse> thunk = new Callable<StickyWebResponse>() {

				public StickyWebResponse call()
						throws StickyWebInternetException, StickyWebInvalidQueryString, StickyWebInvalidPostArguments
						{
					switch (protocol)
					{ 
					default:
					case GET:
						return new StickyWebResponse(WebConnection.get(url, arguments,
								service, accessToken));
					case POST:
						return new StickyWebResponse(WebConnection.post(url, arguments,
								service, accessToken));
					case PUT:
						return new StickyWebResponse(WebConnection.put(url, arguments,
								service, accessToken));
					case DELETE:
						return new StickyWebResponse(WebConnection.delete(url,
								arguments, service, accessToken));
					}
				}
			};



			ExecutorService pool = Executors.newFixedThreadPool(3);
			Set<Future<StickyWebResponse>> set = new HashSet<Future<StickyWebResponse>>();
			Future<StickyWebResponse> future = pool.submit(thunk);
			try
			{
				return (StickyWebResponse)future.get();
			}
			catch (InterruptedException e)
			{
				System.out.println("Failed to complete the HTTP request - unknown interuption");
			}
			catch (ExecutionException e)
			{
				System.out.println("Failed to complete the HTTP request - exeuction interruption");
			}
			return null;
		}
		return new StickyWebResponse(
				this.cache.get(this.url, this.arguments, this.indices));
	}