protected Hashtable<String, Object> communicateWithNeo4jServer(String json) throws SystemFailure {
		Hashtable<String, Object> responseData = null;
		
		HttpPost createNodePost = new HttpPost(_serverUrl);
		
		createNodePost.setHeader("Accept", "application/json; charset=UTF-8");
		createNodePost.setHeader("Content-Type", "application/json");
		
		StringEntity jsonEntity;
		try {
			jsonEntity = new StringEntity(json);
		} catch (UnsupportedEncodingException e) {
			throw new SystemFailure("communicateWithNeo4jServer - problem encoding json as a StringEntity:\n" + json, e);
		}
		createNodePost.setEntity(jsonEntity);
		
		String createNdFailStr = null;
		CloseableHttpResponse response = null;
		Exception err = null;
		
		try {
			
			response = _httpclient.execute(createNodePost);
			
			if (response.getStatusLine().getStatusCode() != 200) {
				
				createNdFailStr = "communicateWithNeo4jServer - request had non-200 response, request JSON:\n" + json + "\n\nReason:\n\n" + response.getStatusLine().getReasonPhrase();
				
				// if there is a response entity, attach that to the message too
				
				HttpEntity entity = response.getEntity();
				if (entity != null) {
					String errResponseStr = EntityUtils.toString(entity);
					createNdFailStr = createNdFailStr + ", response entity:\n" + errResponseStr;
				}
				
				//LOG.warn(createNdFailStr);
				
			} else {
				
				HttpEntity entity = response.getEntity();
				if (entity != null) {
					
					String responseStr = EntityUtils.toString(entity);
					
					if (LOG.isDebugEnabled()) {
						LOG.debug("communicateWithNeo4jServer - response is:\n" + responseStr);
					}
					
					Gson gson = new Gson();
					responseData = gson.fromJson(responseStr, Hashtable.class);
				}
				
			}
			
		} catch (Exception e) {
			//LOG.warn("sendCreateNodeJson - problem making create node request, JSON:\n" + json, e);
			err = e;
		} finally {
			try {
				response.close();
			} catch (IOException e) {
				LOG.warn("sendCreateNodeJson - problem closing response", e);
			}
		}
		
		if (createNdFailStr != null) {
			throw new SystemFailure("communicateWithNeo4jServer - " + createNdFailStr);
		}
		
		if (err != null) {
			throw new SystemFailure("Exception thrown while communicating with neo4j", err);
		}

		return responseData;
	}