def removeAbstract(self, abstract):
        if self._abstracts.has_key(abstract.getId()):
            #for auth in abstract.getPrimaryAuthorList():
            #    self.unindexAuthor(auth)
            # * Remove dependencies with another abstracts:
            #       - If it's an accepted abstract-->remove abstract from contribution
            if isinstance(abstract.getCurrentStatus(), AbstractStatusAccepted):
                raise NoReportError(_("Cannot remove an accepted abstract before removing the contribution linked to it"))
            # If it's a withdrawn abstract-->remove abstract from contribution
            if abstract.as_new.contribution:
                raise NoReportError(_("Cannot remove the abstract before removing the contribution linked to it"))
            for abs in self._abstracts.values():
                if abs != abstract:
                    st = abs.getCurrentStatus()
                    if isinstance(st, AbstractStatusDuplicated):
                        #if the abstract to delete is the orginal in another "duplicated", change status to submitted
                        if st.getOriginal() == abstract:
                            abs.setCurrentStatus(AbstractStatusSubmitted(abs))
                    elif isinstance(st, AbstractStatusMerged):
                        #if the abstract to delete is the target one in another "merged", change status to submitted
                        if st.getTargetAbstract() == abstract:
                            abs.setCurrentStatus(AbstractStatusSubmitted(abs))
            #unindex participations!!!
            self.unregisterParticipation(abstract.getSubmitter())
            self._remove_abstract(abstract)
            del self._abstracts[abstract.getId()]
            abstract.delete()