Point3f[] getAdditionalHydrogens(BitSet atomSet) {
		int n = 0;
		Vector3f z = new Vector3f();
		Vector3f x = new Vector3f();
		Point3f pt;
		// just not doing aldehydes here -- all A-X-B bent == sp3 for now
		for (int i = 0; i < atomCount; i++)
			if (atomSet.get(i) && atoms[i].getElementNumber() == 6) {
				Atom atom = atoms[i];
				int nBonds = (atom.getCovalentHydrogenCount() > 0 ? 0 : atom.getCovalentBondCount());
				if (nBonds == 3 || nBonds == 2) { // could be XA3 sp2 or XA2 sp
					if (!viewer.getPrincipalAxes(i, z, x, "sp3", true) || hybridization == "sp")
						nBonds = 0;
				}
				if (nBonds > 0 && nBonds <= 4)
					n += 4 - nBonds;
			}
		Point3f[] hAtoms = new Point3f[n];
		n = 0;
		for (int i = 0; i < atomCount; i++)
			if (atomSet.get(i) && atoms[i].getElementNumber() == 6) {
				Atom atom = atoms[i];
				int nBonds = (atom.getCovalentHydrogenCount() > 0 ? 0 : atom.getCovalentBondCount());
				switch (nBonds) {
				case 1:
					viewer.getPrincipalAxes(i, z, x, "sp3a", false);
					pt = new Point3f(z);
					pt.scaleAdd(1.1f, atom);
					hAtoms[n++] = pt;
					viewer.getPrincipalAxes(i, z, x, "sp3b", false);
					pt = new Point3f(z);
					pt.scaleAdd(1.1f, atom);
					hAtoms[n++] = pt;
					viewer.getPrincipalAxes(i, z, x, "sp3c", false);
					pt = new Point3f(z);
					pt.scaleAdd(1.1f, atom);
					hAtoms[n++] = pt;
					break;
				case 2:
					if (viewer.getPrincipalAxes(i, z, x, "sp3", true) && hybridization != "sp") {
						viewer.getPrincipalAxes(i, z, x, "lpa", false);
						pt = new Point3f(z);
						pt.scaleAdd(1.1f, atom);
						hAtoms[n++] = pt;
						viewer.getPrincipalAxes(i, z, x, "lpb", false);
						pt = new Point3f(z);
						pt.scaleAdd(1.1f, atom);
						hAtoms[n++] = pt;
					}
					break;
				case 3:
					if (viewer.getPrincipalAxes(i, z, x, "sp3", true)) {
						pt = new Point3f(z);
						pt.scaleAdd(1.1f, atom);
						hAtoms[n++] = pt;
					}
				default:
				}
			}
		return hAtoms;
	}