public boolean revert() {
		if (type instanceof Reaction.A2_B2__2AB) {
			Reaction.A2_B2__2AB r = (Reaction.A2_B2__2AB) type;
			r.moleFractionA2().setPointer(0);
			r.moleFractionB2().setPointer(0);
			r.moleFractionAB().setPointer(0);
			r.numberOfA2().setPointer(0);
			r.numberOfB2().setPointer(0);
			r.numberOfAB().setPointer(0);
		}
		else if (type instanceof Reaction.A2_B2_C__2AB_C) {
			Reaction.A2_B2_C__2AB_C r = (Reaction.A2_B2_C__2AB_C) type;
			r.moleFractionA2().setPointer(0);
			r.moleFractionB2().setPointer(0);
			r.moleFractionAB().setPointer(0);
			r.numberOfA2().setPointer(0);
			r.numberOfB2().setPointer(0);
			r.numberOfAB().setPointer(0);
			r.numberOfC().setPointer(0);
		}
		else if (type instanceof Reaction.O2_2H2__2H2O) {
			Reaction.O2_2H2__2H2O r = (Reaction.O2_2H2__2H2O) type;
			r.moleFractionH2().setPointer(0);
			r.moleFractionO2().setPointer(0);
			r.moleFractionH2O().setPointer(0);
			r.numberOfH2().setPointer(0);
			r.numberOfO2().setPointer(0);
			r.numberOfH2O().setPointer(0);
		}
		bonds.getBondQueue().setPointer(0);
		for (int i = 0; i < numberOfAtoms; i++)
			atom[i].moveRadicalPointer(0);
		List list = stateHolder.getBonds();
		if (list == null)
			return false;
		synchronized (bonds.getSynchronizationLock()) {
			for (Iterator it = bonds.iterator(); it.hasNext();)
				((RadialBond) it.next()).destroy();
		}
		bonds.clear();
		RadialBond.Delegate rbd = null;
		RadialBond rBond = null;
		for (Iterator it = list.iterator(); it.hasNext();) {
			rbd = (RadialBond.Delegate) it.next();
			rBond = new RadialBond.Builder(atom[rbd.getAtom1()], atom[rbd.getAtom2()]).bondLength(rbd.getBondLength())
					.bondStrength(rbd.getBondStrength()).chemicalEnergy(rbd.getChemicalEnergy()).build();
			rBond.setModel(this);
			bonds.add(rBond);
		}
		MoleculeCollection.sort(this);
		return super.revert();
	}