private boolean restoreRemovedMoleculeAt(int x, int y) {
		if (!(pasteBuffer instanceof Molecule))
			return false;
		int oldNOA = nAtom;
		nAtom += ((Molecule) pasteBuffer).size();
		Molecule mol = new Molecule();
		mol.setModel(model);
		int incr = 0;
		for (int i = oldNOA; i < nAtom; i++) {
			atom[i].set(atomBufferArray[atom.length - 1 - incr]);
			mol.addAtom(atom[i]);
			incr++;
		}
		if (incr == 0)
			return false;
		mol.translateTo(x, y);
		for (int i = oldNOA; i < nAtom; i++) {
			if (!boundary.contains(atom[i].getRx(), atom[i].getRy())) {
				nAtom = oldNOA;
				molecules.clearSelection();
				repaint();
				errorReminder.show(ErrorReminder.OUT_OF_BOUND);
				return false;
			}
		}
		if (intersects(mol)) {
			nAtom = oldNOA;
			molecules.clearSelection();
			repaint();
			errorReminder.show(ErrorReminder.OBJECT_OVERLAP);
			return false;
		}
		int n = atom.length - 1 + oldNOA;
		RadialBond.Delegate rbd = null;
		if (!deadBonds.isEmpty()) {
			synchronized (deadBonds) {
				for (Iterator it = deadBonds.iterator(); it.hasNext();) {
					rbd = (RadialBond.Delegate) it.next();
					restoreDeadBond(n - rbd.getAtom1(), n - rbd.getAtom2(), rbd);
				}
			}
		}
		if (!deadBends.isEmpty()) {
			AngularBond.Delegate abd;
			synchronized (deadBends) {
				for (Iterator it = deadBends.iterator(); it.hasNext();) {
					abd = (AngularBond.Delegate) it.next();
					restoreDeadBend(n - abd.getAtom1(), n - abd.getAtom2(), n - abd.getAtom3(), abd);
				}
			}
		}
		if (rbd != null && rbd.isSmart()) {
			MolecularObject ss = rbd.isSolid() ? new CurvedSurface(mol) : new CurvedRibbon(mol);
			ss.setModel(model);
			molecules.add(ss);
			ss.setSelected(true);
		} else {
			if (pasteBuffer instanceof DNAStrand) {
				mol = new DNAStrand(mol);
			} else if (pasteBuffer instanceof Polypeptide) {
				mol = new Polypeptide(mol);
			}
			molecules.add(mol);
			mol.setSelected(true);
		}
		if (!model.getRecorderDisabled()) {
			int m = model.getMovie().getCapacity();
			for (int i = oldNOA; i < nAtom; i++)
				atom[i].initializeMovieQ(m);
		}
		model.setNumberOfParticles(nAtom);
		model.notifyChange();
		return true;
	}