anchor.diff:          {'EXIT', _} ->
               {error, corrupted_json};
           {struct, Body} ->
  -            case tag_lookup(Body, [<<"id">>, <<"urls">>, <<"last-modified">>], []) of
  -                {ok, [Id, Urls, LastModified]} ->
  +            case tag_lookup(Body,
  +                            [<<"id">>, <<"urls">>, <<"last-modified">>, <<"user-data">>],
  +                            []) of
  +                {ok, [Id, Urls, LastModified, UserData]} ->
                       {ok, #tagcontent{id = Id,
                                        last_modified = LastModified,
  -                                     urls = Urls}};
  +                                     urls = Urls,
  +                                     user = UserData}};
                   _ -> {error, invalid_object}
               end
       end.
  
positive.code:     case lists:keysearch(Key, 1, JsonBody) of
          {value, {_, Attrib}} ->
              tag_lookup(JsonBody, Rest, [Attrib|Results]);
          _ -> {error, invalid_object}
      end.
  
  -spec parse_tagcontent(binary()) -> {'error', _} | {'ok', tagcontent()}.
  
negative.code: -type replica() :: {timer:timestamp(), nonempty_string()}.
  -record(tagcontent, {id :: binary(),
                       last_modified :: binary(),
                       urls :: [binary()],
                       user :: [{binary(), binary()}]}).
  -type tagcontent() :: #tagcontent{}.
  -record(state, {tag, % :: binary(),
                  data :: 'false'  | 'notfound' | 'deleted' | {'error', _}
  