public boolean appendRecord(SurveyRecord data) {
		logger.entering(this.getClass().getName(), "appendData", data);
		if (!isOpen) {
			logger.info("attempting to append to closed record");
			return false;
		}
		if (data == null) {
			logger.info("attempting to append a null record");
			return false;
		}

		String[] tmp;
		if (!newCsvHeaders.equals(data.getQuestionIDs().toArray())) {
			for (String qID : data.getQuestionIDs()) {
				if (!Arrays.asList(newCsvHeaders).contains(qID)) {
					tmp = new String[newCsvHeaders.length + 1];
					System.arraycopy(newCsvHeaders, 0, tmp, 0,
							newCsvHeaders.length);
					tmp[newCsvHeaders.length] = qID;
					newCsvHeaders = tmp;
				}
			}
		}
		if (newData == null)
			newData = new LinkedList<Map<String, String>>();
		if (getInstanceSurveyKeys() == null
				|| getInstanceSurveyKeys().contains(data.getKey())) {
			logger.info("instanceSurveyKeys is null or contains this key");
			return false;
		} else if (newData.contains(data.getMap())) { // This is probably a very
														// costly operation
			logger.info("newData contains this key");
			return false;
		} else
			this.newData.add((data.getMap()));

		logger.exiting(getClass().getName(), "appendData", true);
		return true;
	}