private List<String> getValues (String key) {
		if (null == key)
			throw new NullPointerException( "key must not be null" );
		
		List<String> values = keys.get( key );
		if (values != null) return values;
		
		if (validate) this.validateKey( key );
		
		synchronized (keyLock) {
			// it might have been created while we were waiting on the lock
			values = keys.get( key );
			if (values != null) return values;
			
			values = new ArrayList<String>();
			keys.put( key, values );
		}
		
		return values;
	}