anchor.diff:  
   dirty_read(Table, Key) when is_atom(Table) ->
       try
  -        return_atomic_list(mnesia_table_read_access(dirty_read, [Table, Key]))
  +        mnesia:dirty_read(Table, Key)
       catch
           exit:{aborted, {no_exists,_}} ->    ?ClientErrorNoLogging({"Table does not exist",Table});
           exit:{aborted, {no_exists,_,_}} ->  ?ClientErrorNoLogging({"Table does not exist",Table});
  
positive.code:     end;
  update_xt({Table,_}, Item, Lock, ?NoRec, New, Trigger, User, TrOpts) when is_atom(Table), is_tuple(New) ->
      case mnesia:read(Table, element(?KeyIdx,New)) of
          [] ->       mnesia_table_write_access(write, [Table, New, write]),
                      Trigger(?NoRec, New, Table, User, TrOpts),
                      {Item,New};
          [New] ->    Trigger(New, New, Table, User, TrOpts),
                      {Item,New};
          [Current] ->  
              case Lock of
                  none -> mnesia_table_write_access(write, [Table, New, write]),
                          Trigger(Current, New, Table, User, TrOpts),
                          {Item,New};
                  _ ->    ?ConcurrencyExceptionNoLogging({"Key already exists", {Item,Current}})
  
negative.code:     end.
  
  %% ----- Private functions ------------------------------------
  mnesia_atomic(Fun, [_|_] = Args)
    when Fun == write; Fun == delete; Fun == delete_object ->
      case apply(mnesia, Fun, Args) of
          ok -> ?TOUCH_SNAP(hd(Args)),
                ok;
          Error -> Error
      end.
  
  %% ----- TESTS ------------------------------------------------
  