anchor.diff:          false ->
               orddict:new()
       end;
  -% value(removed, ORDict0) ->
  -%     ORDict1 = orddict:filter(fun(_Elem, Tokens) ->
  -%                                      ValidTokens = [Token || {Token, true} <- orddict:to_list(Tokens)],
  -%                                      length(ValidTokens) > 0
  -%                              end, ORDict0),
  -%     orddict:fetch_keys(ORDict1);
  +value(removed, ORSet) ->
  +    gb_trees_ext:fold(fun(Elem, Tokens, Acc0) ->
  +                case length(removed_tokens(Tokens)) > 0 of
  +                    true ->
  +                        Acc0 ++ [Elem];
  +                    false ->
  +                        Acc0
  +                end
  +        end, [], ORSet);
   value(_,ORSet) ->
       value(ORSet).
  -
  -value(none, Acc0, _ORSet) ->
  -    Acc0;
  -value({Key, Value, Iter}, Acc0, ORSet) ->
  -    Acc = case length(valid_tokens(Value)) > 0 of
  -        true ->
  -            Acc0 ++ [Key];
  -        false ->
  -            Acc0
  -    end,
  -    Next = gb_trees:next(Iter),
  -    value(Next, Acc, ORSet).
   
   -spec update(orset_op(), actor(), orset()) ->
       {ok, orset()} | {error, {precondition, {not_present, member()}}}.
  
positive.code: 
  valid_tokens(Tokens) ->
      [Token || {Token, false} <- orddict:to_list(Tokens)].
  
  %% ===================================================================
  %% EUnit tests
  
negative.code:     ORSet.
  
  % -spec merge(orset(), orset()) -> orset().
  merge(ORSet1, ORSet2) ->
      MergeFun = fun(TokensA, TokensB) ->
              orddict:merge(fun(_Token, BoolA, BoolB) ->
                  BoolA or BoolB
              end, TokensA, TokensB)
      end,
      gb_trees_ext:merge(ORSet1, ORSet2, MergeFun).
  
  -spec equal(orset(), orset()) -> boolean().
  equal(ORDictA, ORDictB) ->
      gb_trees_ext:equal(ORDictA, ORDictB).
  
  %% @doc the precondition context is a fragment of the CRDT that
  %% operations with pre-conditions can be applied too.  In the case of
  