private void OH_H2(Atom atomO, Atom atomH, Atom atomH1, Atom atomH2) {
		double angle = Math.abs(AngularBond.getAngle(atomH, atomO, atomH1));
		if (Math.abs(angle - H2O_ANGLE) > ANGLE_TOLL)
			return;
		double bondLength = getBondLength(atomO, atomH1);
		double bondStrength = getBondStrength(atomO, atomH1);
		double bondEnergy = type.getParameter(Reaction.O2_2H2__2H2O.VHO).doubleValue();
		RadialBond rBond = bonds.getBond(atomH1, atomH2);
		RadialBond newRBond = new RadialBond.Builder(atomO, atomH1).bondLength(bondLength).bondStrength(bondStrength)
				.chemicalEnergy(bondEnergy).build();
		AngularBond aBond = new AngularBond(atomH, atomH1, atomO, H2O_ANGLE);
		double x12 = atomH1.rx - atomH2.rx;
		double y12 = atomH1.ry - atomH2.ry;
		double r12 = Math.hypot(x12, y12);
		double pot = bondEnergy - rBond.getChemicalEnergy() + 0.5 * rBond.getBondStrength()
				* (r12 - rBond.getBondLength()) * (r12 - rBond.getBondLength());
		x12 = atomH1.rx - atomO.rx;
		y12 = atomH1.ry - atomO.ry;
		r12 = Math.hypot(x12, y12);
		pot += -0.5 * bondStrength * (r12 - bondLength) * (r12 - bondLength) - 0.5 * aBond.getBondStrength()
				* (angle - H2O_ANGLE) * (angle - H2O_ANGLE);
		atomO.storeCurrentVelocity();
		atomH.storeCurrentVelocity();
		atomH1.storeCurrentVelocity();
		atomH2.storeCurrentVelocity();
		if (conserve(atomO.getIndex(), atomH.getIndex(), atomH1.getIndex(), atomH2.getIndex(), pot)) {
			bonds.remove(rBond);
			rBond.destroy();
			bonds.add(newRBond);
			bends.add(aBond);
			atomO.setRadical(false);
			atomH.setRadical(false);
			atomH1.setRadical(false);
			atomH2.setRadical(true);
			bondChanged = true;
		}
		else {
			atomO.restoreVelocity();
			atomH.restoreVelocity();
			atomH1.restoreVelocity();
			atomH2.restoreVelocity();
		}
	}