anchor.diff:                       {read, {Key, Type}}
                end,
                Objects),
  -    case gr_snapshot_read(Clock, Args) of
  -        {ok, {_TxId, Result, CommitTime}} ->
  -            {ok, Result, CommitTime};
  -        {error, Reason} -> {error, Reason}
  +    case Args of
  +        [_Op] -> %% Single object read = read latest value
  +            case clocksi_execute_tx(Clock, Args) of
  +                {ok, {_TxId, Result, CommitTime}} ->
  +                    {ok, Result, CommitTime};
  +                {error, Reason} -> {error, Reason}
  +            end;
  +        [_|_] -> %% Read Multiple objects  = read from a snapshot
  +            %% Snapshot includes all updates committed at time GST
  +            %% from local and remore replicas
  +            case gr_snapshot_read(Clock, Args) of
  +                {ok, {_TxId, Result, CommitTime}} ->
  +                    {ok, Result, CommitTime};
  +                {error, Reason} -> {error, Reason}
  +            end
       end.
   -endif.
   -endif.
  
positive.code: 
  %% @doc The append/2 function adds an operation to the log of the CRDT
  %%      object stored at some key.
  -spec append(key(), type(), {op(),term()}) -> 
                      {ok, {txid(), [], snapshot_time()}} | {error, term()}.
  append(Key, Type, {OpParams, Actor}) ->
      case materializer:check_operations([{update,
  
negative.code:             gr_snapshot_read(ClientClock, Args)
      end.
  -endif.
  