anchor.diff:  %% @doc Merge the r_objects contents by converting the inner dict to
   %%      a list, ensuring a sane order, and merging into a unique list.
   merge_contents(NewObject, OldObject, false) ->
  -    OldContents = lists:map(fun convert_to_dict_list/1, OldObject#r_object.contents),
  -    NewContents = lists:map(fun convert_to_dict_list/1, NewObject#r_object.contents),
  -    Result = lists:umerge(lists:usort(NewContents),
  -                          lists:usort(OldContents)),
  -    {undefined, lists:map(fun convert_from_dict_list/1, Result)};
  +    Result = lists:umerge(fun compare/2,
  +                          lists:usort(fun compare/2, NewObject#r_object.contents),
  +                          lists:usort(fun compare/2, OldObject#r_object.contents)),
  +    {undefined, Result};
  +
   %% @private with DVV enabled, use event dots in sibling metadata to
   %% remove dominated siblings and stop fake concurrency that causes
   %% sibling explsion. Also, since every sibling is iterated over (some
  
positive.code:                     %% dominate) this sibling's `dot'. That means this
                      %% is a genuinely concurrent (or sibling) value
                      %% and should be kept for the user to reconcile.
                      Content = convert_to_dict_list(C0),
                      MergeAcc#merge_acc{keep=ordsets:add_element(Content, Keep)}
              end;
          undefined ->
              %% Both CRDTs and legacy data don't have dots. Legacy data
  
negative.code:                     %% The sibling value was not a CRDT, but a
                      %% (legacy?) un-dotted user opaque value. Add it
                      %% to the list of values to keep.
                      MergeAcc#merge_acc{keep=[C0|Keep]};
                  {CRDT2, [], []} ->
                      %% The sibling was a CRDT and the CRDT accumulator
                      %% has been updated.
  