* @param silent
	 *            suppress all error reminders and action/undo notifiers
	 * @param noOverlapTolerance
	 *            true if no overlap is tolerated
	 * @return 'true' if the action is done, 'false' if not
	 */
	public boolean insertAnAtom(double x, double y, int id, boolean silent, boolean noOverlapTolerance) {
		if (nAtom >= atom.length) {
			if (!silent)
				errorReminder.show(ErrorReminder.EXCEED_CAPACITY);
			return false;
		}
		if (boundary.contains(x, y)) {
			int oldNOA = nAtom;
			atom[oldNOA].translateTo(x, y);
			atom[oldNOA].setElement(model.getElement(id));
			if (finalizeAtomLocation(atom[oldNOA], noOverlapTolerance)) {
				atom[oldNOA].setModel(model);
				if (model.heatBathActivated()) {
					atom[oldNOA].setRandomVelocity();
				} else {
					atom[oldNOA].setVx(0.0);
					atom[oldNOA].setVy(0.0);
				}
				atom[oldNOA].setRestraint(null);
				atom[oldNOA].setRadical(true);
				atom[oldNOA].setFriction(0);
				atom[oldNOA].setCustom(0);
				atom[oldNOA].setUserField(null);
				atom[oldNOA].setShowRTraj(false);
				atom[oldNOA].setShowRMean(false);
				atom[oldNOA].setShowFMean(false);
				atom[oldNOA].setColor(null);
				if (!model.getRecorderDisabled())
					atom[oldNOA].initializeMovieQ(model.getMovie().getCapacity());
				model.setNumberOfParticles(++nAtom);
				if (!silent) {
					atom[oldNOA].setSelected(true);
					model.notifyChange();
					if (!doNotFireUndoEvent) {
						model.getUndoManager().undoableEditHappened(new UndoableEditEvent(model, new UndoableInsertion(UndoAction.INSERT_A_PARTICLE, x, y)));
						updateUndoUIComponents();
					}
				}
				return true;
			}
			if (!silent)
				errorReminder.show(ErrorReminder.OBJECT_OVERLAP);
		} else {
			if (!silent)
				errorReminder.show(ErrorReminder.OUT_OF_BOUND);
		}
		return false;
	}