anchor.diff:              get_rest_db_updated() % clean out any remaining update messages
           end;
       true ->
  -        {ok, Info} = couch_db:get_db_info(Db),
           CurrentEtag = couch_httpd:make_etag(Info),
           couch_httpd:etag_respond(Req, CurrentEtag, fun() ->
               % send the etag
  
positive.code: 
  handle_changes_req(#httpd{method='GET',path_parts=[DbName|_]}=Req, Db) ->
      {FilterFun, EndFilterFun} = make_filter_funs(Req, Db),
      {Dir, StartSeq} = case couch_httpd:qs_value(Req, "descending", "false") of 
          "false" -> 
              {fwd, list_to_integer(couch_httpd:qs_value(Req, "since", "0"))}; 
          "true" -> 
              {rev, 1000000000000000}; % super big value, should use current db seq
          _Bad -> throw({bad_request, "descending must be true or false"})
      end,
      ResponseType = couch_httpd:qs_value(Req, "feed", "normal"),
  
negative.code:     end.
  
  changes_enumerator(DocInfos, {Db, _, _, FilterFun, Resp, "continuous", IncludeDocs}) ->
      [#doc_info{id=Id, high_seq=Seq, revs=[#rev_info{rev=#rev_info{deleted=Del}=Rev}|_]}|_] = DocInfos,
      Results0 = [FilterFun(DocInfo) || DocInfo <- DocInfos],
      Results = [Result || Result <- Results0, Result /= null],
      case Results of
      [] ->
          {ok, {Db, Seq, nil, FilterFun, Resp, "continuous", IncludeDocs}};
      _ ->
          send_chunk(Resp, [?JSON_ENCODE(changes_row(Db, Seq, Id, Del, Results, Rev, IncludeDocs))
              |"\n"]),
          {ok, {Db, Seq, nil, FilterFun, Resp, "continuous", IncludeDocs}}
      end;
  changes_enumerator(DocInfos, {Db, _, Prepend, FilterFun, Resp, _, IncludeDocs}) ->
      [#doc_info{id=Id, high_seq=Seq, revs=[#rev_info{rev=#rev_info{deleted=Del}=Rev}|_]}|_] = DocInfos,
      Results0 = [FilterFun(DocInfo) || DocInfo <- DocInfos],
      Results = [Result || Result <- Results0, Result /= null],
      case Results of
  