anchor.diff:          {'DOWN', _, _, _, _} ->
               ok = gen_server:call(Cp, {worker_done, self()}, infinity);
           {changes, ChangesManager, Changes, ReportSeq} ->
  -            IdRevs = find_missing(Changes, Target),
  +            %% get docinfo of missing ids
  +            MissingDocInfoList = find_missing(Changes, Target),
               NumChecked = length(Changes),
  +            %% use ptr in docinfo to fetch document from storage
               {ok, DataRepd} = local_process_batch(
  -                               IdRevs, Cp, Source, Target, #batch{}),
  -            ok = gen_server:call(Cp, {report_seq_done, ReportSeq, NumChecked, length(IdRevs), DataRepd}, infinity),
  +                               MissingDocInfoList, Cp, Source, Target, #batch{}),
  +            ok = gen_server:call(Cp, {report_seq_done, ReportSeq, NumChecked, length(MissingDocInfoList), DataRepd}, infinity),
               ?xdcr_debug("Worker reported completion of seq ~p", [ReportSeq]),
               queue_fetch_loop(Source, Target, Cp, ChangesManager)
       end.
  
positive.code:                                {[], 0}, DocInfos),
      {ok, Missing} = couch_api_wrap:get_missing_revs(Target, IdRevs),
  
      ?xdcr_debug("after conflict resolution at target (~p), out of all ~p docs "
                  "the number of docs we need to replicate is: ~p",
                  [Target#httpdb.url, AllRevsCount, length(Missing)]),
      Missing.
  
negative.code:     %% return total data flushed
      {ok, DataFlushed + DataFlushed2}.
  
  
  %% fetch doc using doc info
  fetch_doc(Source, #doc_info{body_ptr = _BodyPtr} = DocInfo, DocHandler, Acc) ->
      couch_api_wrap:open_doc(Source, DocInfo, [deleted], DocHandler, Acc).
  
  local_doc_handler({ok, Doc}, {Target, DocList, Cp}) ->
      {ok, {Target, [Doc | DocList], Cp}};
  