anchor.diff:                      %% removed). Because in such case exact mapping
                       %% doesn't really matter, because we'll backfill
                       %% new nodes and it doesn't matter which.
  -                    NewNotCommon = sets:to_list(sets:subtract(CandidateNodesSet, KeepNodesSet)),
  -                    NewMap = lists:foldl(
  -                               fun ({CurrentNode, CandidateNode}, MapAcc) ->
  -                                       misc:rewrite_value(CandidateNode, CurrentNode, MapAcc)
  -                               end,
  -                               CandidateMap, lists:zip(sets:to_list(CurrentNotCommon), NewNotCommon)),
  -                    [NewMap]
  +                    CandidateNotCommon = sets:to_list(sets:subtract(CandidateNodesSet, KeepNodesSet)),
  +
  +                    rewrite_map(CandidateMap, CandidateTags, CurrentTags,
  +                                lists:zip(CandidateNotCommon, sets:to_list(CurrentNotCommon)))
               end
       end.
   
  
positive.code:             CurrentNotCommon = sets:subtract(KeepNodesSet, CandidateNodesSet),
              case sets:size(CurrentNotCommon) of
                  0 ->
                      [CandidateMap];
                  1 ->
                      [NewNode] = sets:to_list(CurrentNotCommon),
                      [OldNode] = sets:to_list(sets:subtract(CandidateNodesSet, KeepNodesSet)),
                      NewMap = misc:rewrite_value(OldNode, NewNode, CandidateMap),
                      [NewMap];
                  2 ->
                      [NewNodeA, NewNodeB] = sets:to_list(CurrentNotCommon),
                      [OldNodeA, OldNodeB] = sets:to_list(sets:subtract(CandidateNodesSet, KeepNodesSet)),
                      NewMapA = misc:rewrite_value(OldNodeB, NewNodeB,
                                                   misc:rewrite_value(OldNodeA, NewNodeA, CandidateMap)),
                      NewMapB = misc:rewrite_value(OldNodeA, NewNodeB,
                                                   misc:rewrite_value(OldNodeB, NewNodeA, CandidateMap)),
                      [NewMapA, NewMapB];
                  _ ->
                      %% just try some random mapping just in case. It
                      %% will work nicely if NewNode-s are all being
  
negative.code:             generate_map_star(Map, Nodes, Options)
      end.
  
  is_compatible_past_star_map(OptionsPast0, OptionsNow0, NumReplicas) ->
      OptionsPast = lists:keydelete(tags, 1, OptionsPast0),
      OptionsNow = lists:keydelete(tags, 1, OptionsNow0),
  
      case OptionsNow =:= OptionsPast of
          true ->
              true;
  