protected boolean validateNewAccount(EntryDialog d, String handle) throws IOException {
		boolean rc=false;
		if(handle==null || handle.length()==0) {
			_log.debug("Handle is null");
			_session.send(d
				.getErrorResponse("We're sorry, but you must select a screen name"));
		} else {
			if (handle.length() > 10) {
				_log.debug("Handle '" + handle + "' is too long");
				_session.send(d
					.getErrorResponse("We're sorry, but '"
						+ handle
						+ "' is too long.  Please select a shorter name"));
			} else if (getEffLength(handle) < 3) {
					_log.debug("Handle '" + handle + "' is too short");
					_session.send(d
						.getErrorResponse("We're sorry, but '"
							+ handle
							+ "' is too short.  Please select a longer name."));
			} else if (containsInvalidChars(handle)) {
				_log.debug("'" + handle + "' contains invalid characters");
				_session
					.send(d
						.getErrorResponse("We're sorry, but screen names can only contain letters, digits, or spaces.  Please select another name."));
			} else if (!Character.isLetter(handle.charAt(0))) {
				_log.debug("'"
					+ handle
					+ "' contains leading space or number");
				_session
					.send(d
						.getErrorResponse("We're sorry, but screen names must start with a letter.  Please select another name."));
			} else {
				try {
					if (containsReservedWords(handle)) {
						_log.debug("'"
							+ handle
							+ "' contains a reserved word");
						_session
							.send(d
								.getErrorResponse("We're sorry, but your choice contains a reserved word.  Please select another name."));
					} else {
						rc=true;
					}
				} catch (SQLException e) {
					// something very bad happened... We cannot continue.
					_log.error("Error during reserved word lookup", e);
					_session.terminate();
				}
			}
		}
		return rc;
	}