anchor.diff:  view_changes_cb(heartbeat, {_, _, _, Callback, Args}=Acc) ->
       Callback(timeout, Args#changes_args.feed),
       {ok, Acc};
  -view_changes_cb({{Seq, _Key, DocId}, _VAl},
  +view_changes_cb({{Seq, _Key, DocId}, Val},
                   {Prepend, OldLimit, Db0, Callback, Args}=Acc) ->
  +
  +    %% is the key removed from the index?
  +    Removed = case Val of
  +        {[{<<"_removed">>, true}]} -> true;
  +        _ -> false
  +    end,
   
       #changes_args{
           feed = ResponseType,
  
positive.code:                 || #rev_info{rev=R} <- Revs]
      end,
  
      {[{<<"seq">>, Seq}, {<<"id">>, Id}, {<<"changes">>, Changes}] ++
       deleted_item(Del) ++ case InDoc of
              true ->
                  Opts = case Conflicts of
  
negative.code:     case couch_db:get_doc_info(Db, DocId) of
          {ok, DocInfo} ->
              %% get change row
              {Deleted, ChangeRow} = view_change_row(Db, DocInfo, Args),
  
              case Removed of
                  true when Deleted /= true ->
                      %% the key has been removed from the view but the
                      %% document hasn't been deleted so ignore it.
                      {ok, Acc};
                  _ ->
                      %% emit change row
                      Callback({change, ChangeRow, Prepend}, ResponseType),
  
                      %% if we achieved the limit, stop here, else continue.
                      NewLimit = OldLimit + 1,
                      if Limit > NewLimit ->
                              {ok, {<<",\n">>, NewLimit, Db, Callback, Args}};
                          true ->
                              {stop, {<<"">>, NewLimit, Db, Callback, Args}}
                      end
              end;
          {error, not_found} ->
              %% doc not found, continue
  