anchor.diff:                                                {changes,Results}]})]),
                   {ok, {Seq, <<",\n">>}}
               end
  -        end, {StartSeq, Prepend0}).
  -
  -make_filter_funs(_Req, _Db, nil) -> 
  -    {ok, fun(#doc_info{revs=[#rev_info{rev=Rev}|_]}) ->
  -        {[{rev, couch_doc:rev_to_str(Rev)}]}
  -    end,
  -    fun() -> ok end};
  -make_filter_funs(Req, Db, Filter) -> 
  +        end, {StartSeq, Prepend0})
  +    after
  +        EndFilterFun()
  +    end.
  +
  +make_filter_funs(Req, Db) ->
  +    Filter = couch_httpd:qs_value(Req, "filter", ""),
       case [list_to_binary(couch_httpd:unquote(Part))
               || Part <- string:tokens(Filter, "/")] of
  +    [] ->
  +    {fun(#doc_info{revs=[#rev_info{rev=Rev}|_]}) ->
  +            {[{rev, couch_doc:rev_to_str(Rev)}]}
  +        end,
  +        fun() -> ok end};
       [DName, FName] ->
           DesignId = <<"_design/", DName/binary>>,
           #doc{body={Props}} = couch_httpd_db:couch_doc_open(Db, DesignId, nil, []),
  
positive.code:         EndFilterFun = fun() ->
              couch_query_servers:end_filter(Pid)
          end,
          {ok, FilterFun, EndFilterFun};
      _Else ->
          throw({bad_request, 
              "filter parameter must be of the form `designname/filtername`"})
  
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) ->
  