void merge( FragList fl, ArrayList<Version> sigla, ArrayList<Group> groups, 
        BitSet constraint ) throws Exception
    {
        if ( !fl.isEmpty() && isEmpty() )
            this.fragments = fl.fragments;
        else if ( !fl.isEmpty() && !isEmpty() )
        {
            // ensure that the edit script is fresh
            float sim = similarity( fl );
            if ( sim >= Atom.THRESHOLD_SIM )
                mergeByAtom( fl, sigla, constraint);
            else
                mergeAsTable( fl, sigla, groups, constraint );
        }
    }