anchor.diff:          EndFilterFun = fun() ->
               couch_query_servers:end_filter(Pid)
           end,
  -        {ok, FilterFun, EndFilterFun};
  +        {FilterFun, EndFilterFun};
       _Else ->
           throw({bad_request, 
               "filter parameter must be of the form `designname/filtername`"})
  
positive.code:     after 0 -> updated
      end.
  
  keep_sending_changes(#httpd{user_ctx=UserCtx,path_parts=[DbName|_]}=Req, Resp, Db, StartSeq, Prepend, Timeout, TimeoutFun, FilterFun) ->
      {ok, {EndSeq, Prepend2}} = send_changes(Req, Resp, Db, StartSeq, Prepend, FilterFun),
      couch_db:close(Db),
      case wait_db_updated(Timeout, TimeoutFun) of
      updated ->
          {ok, Db2} = couch_db:open(DbName, [{user_ctx, UserCtx}]),
          keep_sending_changes(Req, Resp, Db2, EndSeq, Prepend2, Timeout, TimeoutFun, FilterFun);
      stop ->
          send_chunk(Resp, io_lib:format("\n],\n\"last_seq\":~w}\n", [EndSeq])),
          send_chunk(Resp, "")
      end.
  
  send_changes(Req, Resp, Db, StartSeq, Prepend0, FilterFun) ->
      Style = list_to_existing_atom(
              couch_httpd:qs_value(Req, "style", "main_only")),
      couch_db:changes_since(Db, Style, StartSeq,
          fun([#doc_info{id=Id, high_seq=Seq}|_]=DocInfos, {_, Prepend}) ->
              Results0 = [FilterFun(DocInfo) || DocInfo <- DocInfos],
              Results = [Result || Result <- Results0, Result /= null],
  
negative.code: 
  handle_changes_req(#httpd{method='GET',path_parts=[DbName|_]}=Req, Db) ->
      StartSeq = list_to_integer(couch_httpd:qs_value(Req, "since", "0")),
      {ok, Resp} = start_json_response(Req, 200),
      send_chunk(Resp, "{\"results\":[\n"),
      case couch_httpd:qs_value(Req, "continuous", "false") of
      "true" ->
          Self = self(),
          {ok, Notify} = couch_db_update_notifier:start_link(
              fun({_, DbName0}) when DbName0 == DbName ->
                  Self ! db_updated;
              (_) ->
                  ok
              end),
          {Timeout, TimeoutFun} = get_changes_timeout(Req, Resp),
          couch_stats_collector:track_process_count(Self,
                              {httpd, clients_requesting_changes}),
          try
              keep_sending_changes(Req, Resp, Db, StartSeq, <<"">>, Timeout, TimeoutFun)
          after
              couch_db_update_notifier:stop(Notify),
              get_rest_db_updated() % clean out any remaining update messages
          end;
  
      "false" ->
          {ok, {LastSeq, _Prepend}} =
                  send_changes(Req, Resp, Db, StartSeq, <<"">>),
          send_chunk(Resp, io_lib:format("\n],\n\"last_seq\":~w}\n", [LastSeq])),
          send_chunk(Resp, "")
      end;
  
  handle_changes_req(#httpd{path_parts=[_,<<"_changes">>]}=Req, _Db) ->
  