protected void pasteBufferedComponent(int x, int y) {
		super.pasteBufferedComponent(x, y);
		if (pasteBuffer instanceof RectangularObstacle) {
			RectangularObstacle pastedObstacle = (RectangularObstacle) ((RectangularObstacle) pasteBuffer).clone();
			// pastedObstacle.translateCenterTo(x, y);
			pastedObstacle.translateTo(x, y);
			if (!intersects(pastedObstacle) && boundary.contains(pastedObstacle)) {
				obstacles.add(pastedObstacle);
				if (!doNotFireUndoEvent) {
					model.getUndoManager().undoableEditHappened(new UndoableEditEvent(model, new UndoableInsertion(ADOB_ID)));
					updateUndoUIComponents();
				}
			} else {
				errorReminder.show(ErrorReminder.OBJECT_OVERLAP);
			}
		} else if (pasteBuffer instanceof Atom) {
			if (insertAnAtom(x, y, ((Atom) pasteBuffer).getID()))
				copyAttachedLayeredComponents((Atom) pasteBuffer, atom[nAtom - 1]);
		} else if (pasteBuffer instanceof Molecule) {
			if (!restoreMolecule) {
				pasteMoleculeAt(x, y);
			} else {
				if (!deadBonds.isEmpty()) {
					restoreRemovedMoleculeAt(x, y);
				}
			}
			if (!doNotFireUndoEvent) {
				model.getUndoManager().undoableEditHappened(new UndoableEditEvent(model, new UndoableInsertion(UndoAction.INSERT_A_MOLECULE, x, y, ((Molecule) pasteBuffer).size())));
				updateUndoUIComponents();
			}
		}
		repaint();
	}