anchor.diff:  %%          {string(), webmachine:wrq(), context()}
   %% @doc Generate the ETag for a bucket.
   make_bucket_etag(ReqData, Context) ->
  -    {ok, {Keys, Context1}} = retrieve_keylist(Context),
  -    ETag = mochihex:to_hex(crypto:sha(term_to_binary(Keys))),
  +    {Keys, Context1} = maybe_fetch_keylist(ReqData, Context),
  +    ETag = mochihex:to_hex(
  +             crypto:sha(
  +               term_to_binary(
  +                 {Keys, catch full_schema(Context#ctx.module)}))),
       {ETag, ReqData, Context1#ctx{etag=ETag}}.
  -
  -%% @spec retrieve_keylist(context()) -> {ok, {[binary()], context()}}
  -%% @doc Get the list of keys in this bucket.  This function
  -%%      memoizes the keylist in the context so it can be
  -%%      called multiple times without duplicating work.
  -retrieve_keylist(Context=#ctx{bucket=Bucket,jiak_client=JiakClient,
  -                              bucketkeys=undefined}) ->
  -    {ok, Keys} = JiakClient:list_keys(Bucket),
  -    {ok, {Keys, Context#ctx{bucketkeys=Keys}}};
  -retrieve_keylist(Context=#ctx{bucketkeys=Keys}) ->
  -    {ok, {Keys, Context}}.
   
   %% @spec make_object_etag(webmachine:wrq(), context()) ->
   %%          {string(), webmachine:wrq(), context()}
  
positive.code:                          binary_to_list(jiak_object:vclock(JiakObject)),
                           NewReqData),
       Context1}.    
  
  add_container_link(Bucket,ReqData) ->
      Val = io_lib:format("</~s/~s>; rel=\"up\"",
  
negative.code:                  {"schema", "false"} -> [];
                   _ -> [{schema, {struct, full_schema(Mod)}}]
               end,
      {Keys, Context1} = maybe_fetch_keylist(ReqData, Context),
      case Keys of
          stream ->
              JSONSpec = {struct, Schema},
              {{stream, {mochijson2:encode(JSONSpec), stream_keys(Context1)}},
               ReqData, Context1};
          false ->
              JSONSpec = {struct, Schema},
              {mochijson2:encode(JSONSpec), ReqData, Context1};
          _ ->
              NewReqData = lists:foldl(
                             fun(K,RD) ->
                                     add_link_head(Bucket,K,"contained",RD)
                             end,
                             ReqData, Keys),
              JSONSpec = {struct, [{keys,Keys}|Schema]},
              {mochijson2:encode(JSONSpec), NewReqData, Context1}
      end;
  produce_body(ReqData, Context=#ctx{module=Module,bucket=Bucket}) ->
  