def clone(self, conference, abstractId):

        # abstractId - internal in abstract manager of the conference
        abs = Abstract(conference.getAbstractMgr(), abstractId, self.getSubmitter().getAvatar())
        abs.setTitle(self.getTitle())
        for key in self.getFields().keys():
            abs.setField(key,self.getField(key))
        abs.setComments(self.getComments())

        abs._setSubmissionDate(self.getSubmissionDate())
        abs._modificationDate = self.getModificationDate()

        # Cloning of primary- and coauthors
        # if an author is also a speaker, an appropriate object will be
        # appended also to the speaker list
        for pa in self.getPrimaryAuthorList() :
            npa = abs.newPrimaryAuthor(**(pa.getData()))
            if self.isSpeaker(pa) :
                abs.addSpeaker(npa)
        for ca in self.getCoAuthorList() :
            nca = abs.newCoAuthor(**(ca.getData()))
            if self.isSpeaker(ca) :
                abs.addSpeaker(nca)

        # Cloning of speakers
        # only those, who are not authors :
            for sp in self.getSpeakerList() :
                if not self.isAuthor(sp) :
                    abs.addSpeaker(sp.clone())

        abs.setSubmitter(self.getSubmitter().getAvatar())
        abs.as_new.type = self.as_new.type

        # the track, to which the abstract belongs to
        # legacy list implementation
        for tr in self.getTrackList() :
            for newtrack in conference.getTrackList():
                if newtrack.getTitle() == tr.getTitle() :
                    abs.addTrack(newtrack)

        # overall abstract status (accepted / rejected)
        abs._currentStatus = self._currentStatus.clone(abs)
        abs.as_new.accepted_track_id = self.as_new.track.id if self.as_new.track else None
        abs.as_new.accepted_type = self.as_new.type

        for ta in self.getTrackAcceptanceList() :
            for newtrack in conference.getTrackList():
                if newtrack.getTitle() == ta.getTrack().getTitle() :
                    newta = ta.clone(newtrack)
                    abs._addTrackAcceptance(newta)
                    abs._addTrackJudgementToHistorical(newta)

        for trj in self.getTrackRejections().values() :
            for newtrack in conference.getTrackList():
                if newtrack.getTitle() == trj.getTrack().getTitle() :
                    newtrj = trj.clone(newtrack)
                    abs._addTrackRejection(newtrj)
                    abs._addTrackJudgementToHistorical(newtrj)

        for trl in self.getTrackReallocations().values() :
            for newtrack in conference.getTrackList():
                if newtrack.getTitle() == trl.getTrack().getTitle() :
                    newtrl = trl.clone(newtrack)
                    abs._addTrackReallocation(newtrl)
                    abs._addTrackJudgementToHistorical(newtrl)

        # Cloning materials
        for f in self.getAttachments().values():
            newFile = f.clone(abs, protection=False)
            abs.__addFile(newFile)

        return abs