private void dissociate() {

		synchronized (bonds.getSynchronizationLock()) {

			for (Iterator it = bonds.iterator(); it.hasNext();) {

				rBond = (RadialBond) it.next();
				xij = rBond.atom1.rx - rBond.atom2.rx;
				yij = rBond.atom1.ry - rBond.atom2.ry;
				rij = xij * xij + yij * yij;

				dpot = Math.sqrt(rij) - rBond.bondLength;
				if (dpot > 0.0) {
					dpot = 0.5 * rBond.bondStrength * dpot * dpot;
					bondEnergy = rBond.getChemicalEnergy();
					if (dpot > bondEnergy) {
						dpot -= bondEnergy;
						rBond.atom1.storeCurrentVelocity();
						rBond.atom2.storeCurrentVelocity();
						if (conserve(rBond.atom1.getIndex(), rBond.atom2.getIndex(), dpot)) {
							it.remove();
							removeAssociatedAngularBonds();
							rBond.destroy();
							bondChanged = true;
						}
						else {
							rBond.atom1.restoreVelocity();
							rBond.atom2.restoreVelocity();
						}
					}
				}

			}

		}

	}