*/
	synchronized void corrector() {
		double halfTimeStep = timeStep * 0.5;
		if (numberOfAtoms == 1) {
			atom[0].ax = atom[0].fx;
			atom[0].ay = atom[0].fy;
			atom[0].fx *= atom[0].mass;
			atom[0].fy *= atom[0].mass;
		} else {
			for (int i = 0; i < numberOfAtoms; i++)
				atom[i].correct(halfTimeStep);
		}
		if (!freeElectrons.isEmpty()) {
			synchronized (freeElectrons) {
				for (Electron e : freeElectrons)
					e.correct(halfTimeStep);
			}
		}
		if (obstacles != null && obstacles.size() > 0) {
			if (photons != null && !photons.isEmpty())
				obstacles.reflect(photons);
			if (!freeElectrons.isEmpty())
				obstacles.collide(freeElectrons);
			obstacles.collide(numberOfAtoms, atom);
			obstacles.move(timeStep, timeStep2, numberOfAtoms, atom);
		}
		int n = view.getNumberOfInstances(LineComponent.class);
		if (n > 0) {
			LineComponent[] lines = view.getLines();
			for (LineComponent lc : lines) {
				for (int i = 0; i < numberOfAtoms; i++) {
					lc.reflect(atom[i]);
				}
			}
		}
	}