@SuppressWarnings("unchecked")
	public final static short elementNumberFromSymbol(String elementSymbol) {
		if (htElementMap == null) {
			Hashtable map = new Hashtable();
			for (int elementNumber = elementNumberMax; --elementNumber >= 0;) {
				String symbol = elementSymbols[elementNumber];
				Integer boxed = new Integer(elementNumber);
				map.put(symbol, boxed);
				if (symbol.length() == 2)
					map.put(symbol.toUpperCase(), boxed);
			}
			for (int i = altElementMax; --i >= firstIsotope;) {
				String symbol = altElementSymbols[i];
				Integer boxed = new Integer(altElementNumbers[i]);
				map.put(symbol, boxed);
				if (symbol.length() == 2)
					map.put(symbol.toUpperCase(), boxed);
			}
			htElementMap = map;
		}
		if (elementSymbol == null)
			return 0;
		Integer boxedAtomicNumber = (Integer) htElementMap.get(elementSymbol);
		if (boxedAtomicNumber != null)
			return (short) boxedAtomicNumber.intValue();
		Logger.error("" + elementSymbol + "' is not a recognized symbol");
		return 0;
	}