anchor.diff:  handle_message({rexi_EXIT, Reason}, Worker, State) ->
       fabric_view:handle_worker_exit(State, Worker, Reason);
   
  +% Temporary upgrade clause - Case 24236
  +handle_message({complete, Key}, Worker, State) when is_tuple(Key) ->
  +    handle_message({complete, [{seq, Key}]}, Worker, State);
  +
   handle_message(_, _, #collector{limit=0} = State) ->
       {stop, State};
   
  -handle_message(#change{key=Key} = Row0, {Worker, From}, St) ->
  +handle_message(#change{} = Row, {Worker, From}, St) ->
  +    Change = {change, [
  +        {seq, Row#change.key},
  +        {id, Row#change.id},
  +        {changes, Row#change.value},
  +        {deleted, Row#change.deleted},
  +        {doc, Row#change.doc}
  +    ]},
  +    handle_message(Change, {Worker, From}, St);
  +
  +handle_message({change, Props}, {Worker, From}, St) ->
       #collector{
           query_args = #changes_args{include_docs=IncludeDocs},
           callback = Callback,
  
positive.code:         user_acc = AccIn
      } = St,
      true = fabric_dict:is_key(Worker, S0),
      S1 = fabric_dict:store(Worker, Key, S0),
      % Temporary hack for FB 23637
      Interval = erlang:get(changes_seq_interval),
      if (Interval == undefined) orelse (Limit rem Interval == 0) ->
          Row = Row0#change{key = pack_seqs(S1)};
      true ->
          Row = Row0#change{key = null}
      end,
      {Go, Acc} = Callback(changes_row(Row, IncludeDocs), AccIn),
      rexi:stream_ack(From),
      {Go, St#collector{counters=S1, limit=Limit-1, user_acc=Acc}};
  
  
negative.code:     rexi:stream_ack(From),
      {ok, St#collector{counters=S1}};
  
  handle_message({complete, Props}, Worker, State) ->
      Key = couch_util:get_value(seq, Props),
      #collector{
          counters = S0,
          total_rows = Completed % override
  