Atom merge( Atom other ) throws Exception
    {
        if ( other instanceof Fragment )
        {
            // if the other is a fragment then add it as a new row
            Fragment f = (Fragment)other;
            if ( !contains(f) )
            {
                Row r = new Row( sigla, groups, base );
                r.setNested( this.nested() );
                r.add( other );
                r.versions.or(f.versions);
                addRow( r );
            }
        }
        else 
        {
            // else if it is another table merge its rows with ours
            // versions must not intersect or throw an exception
            Table u = (Table) other;
            for ( int i=0;i<u.rows.size();i++ )
            {
                Row r = u.rows.get(i);
                addRow( r );
            }
        }
        return this;
    }