public boolean revert() {
		if (stateHolder == null)
			return false;
		setModelTime(stateHolder.getTime());
		setNumberOfParticles(stateHolder.getNumberOfParticles());
		double[] data = stateHolder.getParticleData();
		for (int i = 0; i < numberOfAtoms; i++) {
			atom[i].translateTo(data[i], data[i + numberOfAtoms]);
			atom[i].vx = data[i + numberOfAtoms * 2];
			atom[i].vy = data[i + numberOfAtoms * 3];
			atom[i].moveRPointer(0);
			atom[i].moveVPointer(0);
			atom[i].moveAPointer(0);
		}
		kine.setPointer(0);
		pote.setPointer(0);
		tote.setPointer(0);
		for (FloatQueue q : channelTs)
			q.setPointer(0);
		for (FloatQueue q : kep)
			q.setPointer(0);
		modelTimeQueue.setPointer(0);
		int nmov = stateHolder.getNumberOfObstacles();
		if (nmov > 0) {
			double[] data2 = stateHolder.getObstacleData();
			if (data2 != null) {
				int k = 0;
				RectangularObstacle obs = null;
				for (int i = 0; i < obstacles.size(); i++) {
					obs = obstacles.get(i);
					if (obs.isMovable()) {
						obs.translateTo(data2[k], data2[k + nmov]);
						obs.vx = data2[k + nmov * 2];
						obs.vy = data2[k + nmov * 3];
						obs.moveRPointer(0);
						obs.moveVPointer(0);
						obs.moveAPointer(0);
						obs.movePPointer(0);
						k++;
					}
				}
			}
		}
		if (heatBathActivated()) {
			heatBath.setExpectedTemperature(stateHolder.getHeatBathTemperature());
		}
		if (view.getUseJmol())
			view.refreshJmol();
		view.repaint();
		notifyModelListeners(new ModelEvent(this, ModelEvent.MODEL_RESET));
		return true;
	}