anchor.diff:  tester_write_read(_Config) ->
       tester:test(?MODULE, prop_write_read, 3, 10000).
   
  --spec prop_add_del_on_list_not_existing(Key::client_key(), ToAdd::[client_value()], ToRemove::[client_value()]) -> true | no_return().
  -prop_add_del_on_list_not_existing(Key, ToAdd, ToRemove) ->
  -    OldValue = case api_tx:read(Key) of
  -                   {ok, Value} -> Value;
  -                   _ -> []
  -               end,
  -    prop_add_del_on_list2(Key, OldValue, ToAdd, ToRemove).
  -
  -tester_add_del_on_list_not_existing(_Config) ->
  -    tester:test(?MODULE, prop_add_del_on_list_not_existing, 3, 10000).
  -
  --spec prop_add_del_on_list(Key::client_key(), Initial::client_value(), ToAdd::[client_value()], ToRemove::[client_value()]) -> true | no_return().
  -prop_add_del_on_list(Key, Initial, ToAdd, ToRemove) ->
  -    ?equals(api_tx:write(Key, Initial), {ok}),
  -    prop_add_del_on_list2(Key, Initial, ToAdd, ToRemove).
  -
  --spec prop_add_del_on_list2(Key::client_key(), Initial::client_value(), ToAdd::client_value(), ToRemove::client_value()) -> true | no_return().
  -prop_add_del_on_list2(Key, Initial, ToAdd, ToRemove) ->
  +-spec prop_add_del_on_list2(Key::client_key(), Initial::client_value(), OldExists::boolean(), ToAdd::client_value(), ToRemove::client_value()) -> true | no_return().
  +prop_add_del_on_list2(Key, Initial, OldExists, ToAdd, ToRemove) ->
       if (not erlang:is_list(Initial)) orelse
              (not erlang:is_list(ToAdd)) orelse
              (not erlang:is_list(ToRemove)) ->
  -           ?equals(api_tx:add_del_on_list(Key, ToAdd, ToRemove), {fail, not_a_list});
  +           ?equals(api_tx:add_del_on_list(Key, ToAdd, ToRemove), {fail, not_a_list}),
  +           Result = api_tx:read(Key),
  +           if OldExists -> ?equals(Result, {ok, Initial});
  +              true      -> ?equals(Result, {fail, not_found})
  +           end;
          true ->
              ?equals(api_tx:add_del_on_list(Key, ToAdd, ToRemove), {ok}),
  -           {ok, List} = api_tx:read(Key),
  +           Result = api_tx:read(Key),
  +           ?equals_pattern(Result, {ok, _List}),
  +           {ok, List} = Result,
              SortedList = lists:sort(fun util:'=:<'/2, List),
              ?equals(SortedList, lists:sort(fun util:'=:<'/2, util:minus_first(lists:append(Initial, ToAdd), ToRemove)))
       end.
   
  +-spec prop_add_del_on_list_not_existing(Key::client_key(), ToAdd::[client_value()], ToRemove::[client_value()]) -> true | no_return().
  +prop_add_del_on_list_not_existing(Key, ToAdd, ToRemove) ->
  +    case api_tx:read(Key) of
  +        {ok, OldValue} -> OldExists = true;
  +        _ -> OldValue = [], OldExists = false
  +    end,
  +    prop_add_del_on_list2(Key, OldValue, OldExists, ToAdd, ToRemove).
  +
  +tester_add_del_on_list_not_existing(_Config) ->
  +    tester:test(?MODULE, prop_add_del_on_list_not_existing, 3, 10000).
  +
  +-spec prop_add_del_on_list(Key::client_key(), Initial::client_value(), ToAdd::[client_value()], ToRemove::[client_value()]) -> true | no_return().
  +prop_add_del_on_list(Key, Initial, ToAdd, ToRemove) ->
  +    ?equals(api_tx:write(Key, Initial), {ok}),
  +    prop_add_del_on_list2(Key, Initial, true, ToAdd, ToRemove).
  +
   tester_add_del_on_list(_Config) ->
       tester:test(?MODULE, prop_add_del_on_list, 4, 10000).
   
   -spec prop_add_del_on_list_maybe_invalid(Key::client_key(), Initial::client_value(), ToAdd::client_value(), ToRemove::client_value()) -> true | no_return().
   prop_add_del_on_list_maybe_invalid(Key, Initial, ToAdd, ToRemove) ->
       ?equals(api_tx:write(Key, Initial), {ok}),
  -    prop_add_del_on_list2(Key, Initial, ToAdd, ToRemove).
  +    prop_add_del_on_list2(Key, Initial, true, ToAdd, ToRemove).
   
   tester_add_del_on_list_maybe_invalid(_Config) ->
       tester:test(?MODULE, prop_add_del_on_list_maybe_invalid, 4, 10000).
  +
  +-spec prop_add_on_nr2(Key::client_key(), Existing::boolean(), Initial::client_value(), ToAdd::client_value()) -> true | no_return().
  +prop_add_on_nr2(Key, Existing, Initial, ToAdd) ->
  +    if (not erlang:is_number(Initial)) orelse
  +           (not erlang:is_number(ToAdd)) ->
  +           ?equals(api_tx:add_on_nr(Key, ToAdd), {fail, not_a_number}),
  +           Result = api_tx:read(Key),
  +           if Existing -> ?equals(Result, {ok, Initial});
  +              true     -> ?equals(Result, {fail, not_found})
  +           end;
  +       true ->
  +           ?equals(api_tx:add_on_nr(Key, ToAdd), {ok}),
  +           Result = api_tx:read(Key),
  +           ?equals_pattern(Result, {ok, _Number}),
  +           {ok, Number} = Result,
  +           case Existing of
  +               false -> ?equals(Number, ToAdd);
  +               % note: Initial+ToAdd could be float when Initial is not and thus Number is neither
  +               true when ToAdd == 0 -> ?equals(Number, Initial);
  +               _     -> ?equals(Number, (Initial + ToAdd))
  +           end
  +    end.
   
   -spec prop_add_on_nr_not_existing(Key::client_key(), ToAdd::number()) -> true | no_return().
   prop_add_on_nr_not_existing(Key, ToAdd) ->
  
positive.code:            ?equals(api_tx:read(Key), {ok, RealOldValue})
      end.
  
  tester_test_and_set(_Config) ->
      tester:test(?MODULE, prop_test_and_set, 4, 10000).
  
negative.code:             tester_add_on_nr,
              tester_add_on_nr_maybe_invalid,
              tester_test_and_set_not_existing,
              tester_test_and_set,
              tester_tlog_add_del_on_list_not_existing,
              tester_tlog_add_del_on_list,
              tester_tlog_add_del_on_list_maybe_invalid,
              tester_tlog_add_on_nr_not_existing,
              tester_tlog_add_on_nr,
              tester_tlog_add_on_nr_maybe_invalid
             ].
  suite() -> [ {timetrap, {seconds, 200}} ].
  
  