anchor.diff:                  proplists:get_value(<<"conflicts">>, RowValueProps, []),
               deleted_conflict_revs =
                   proplists:get_value(<<"deleted_conflicts">>, RowValueProps, []),
  -            deleted = proplists:get_value(<<"deleted">>, RowValueProps, false)}
  -        end, proplists:get_value(<<"rows">>, Results)),
  +            deleted = proplists:get_value(<<"deleted">>, RowValueProps, false)
  +        }
  +    end, proplists:get_value(<<"rows">>, Results));
  +get_doc_info_list(DbSource, StartSeq) ->
  +    {ok, {_Count, DocInfoList}} = couch_db:enum_docs_since(DbSource, StartSeq, 
  +    fun (_, _, {100, DocInfoList}) ->
  +            {stop, {100, DocInfoList}};
  +        (DocInfo, _, {Count, DocInfoList}) -> 
  +            {ok, {Count+1, [DocInfo|DocInfoList]}} 
  +    end, {0, []}),
  +    lists:reverse(DocInfoList).
  +
  +enum_docs_since(DbSource, DbTarget, StartSeq, InAcc) ->
  +    DocInfoList = get_doc_info_list(DbSource, StartSeq),
       case DocInfoList of
       [] ->
           {ok, InAcc};
       _ ->
  -        Acc2 = enum_docs0(InFun, DocInfoList, InAcc),
  +        Stats = enum_docs_parallel(DbSource, DbTarget, DocInfoList),
  +        OldStats = element(2, InAcc),
  +        TotalStats = [
  +            {<<"missing_checked">>, 
  +                proplists:get_value(<<"missing_checked">>, OldStats, 0) +
  +                proplists:get_value(<<"missing_checked">>, Stats, 0)},
  +            {<<"missing_found">>, 
  +                proplists:get_value(<<"missing_found">>, OldStats, 0) +
  +                proplists:get_value(<<"missing_found">>, Stats, 0)},
  +            {<<"docs_read">>, 
  +                proplists:get_value(<<"docs_read">>, OldStats, 0) +
  +                proplists:get_value(<<"docs_read">>, Stats, 0)},
  +            {<<"docs_written">>, 
  +                proplists:get_value(<<"docs_written">>, OldStats, 0) +
  +                proplists:get_value(<<"docs_written">>, Stats, 0)}
  +        ],
  +        
           #doc_info{update_seq=LastSeq} = lists:last(DocInfoList),
  -        enum_docs_since(Db, LastSeq, InFun, Acc2)
  -    end;
  -enum_docs_since(DbSource, StartSeq, Fun, Acc) ->
  -    couch_db:enum_docs_since(DbSource, StartSeq, Fun, Acc).
  +        enum_docs_since(DbSource, DbTarget, LastSeq, {LastSeq, TotalStats})
  +    end.
   
   get_missing_revs(#http_db{uri=DbUrl, headers=Headers}, DocIdRevsList) ->
       {ResponseMembers} = do_http_request(DbUrl ++ "_missing_revs", post, Headers,
  
positive.code:         ?JSON_DECODE(ResponseBody)
      end.
  
  enum_docs0(_InFun, [], Acc) ->
      Acc;
  enum_docs0(InFun, [DocInfo | Rest], Acc) ->
      case InFun(DocInfo, 0, Acc) of
      {ok, Acc2} -> enum_docs0(InFun, Rest, Acc2);
      {stop, Acc2} -> Acc2
      end.
  
  fix_url(UrlBin) ->
      Url = binary_to_list(UrlBin),
  
negative.code: close_db(Db)->
      couch_db:close(Db).
  
  get_doc_info_list(#http_db{uri=DbUrl, headers=Headers}, StartSeq) ->
      Url = DbUrl ++ "_all_docs_by_seq?count=100&startkey=" 
          ++ integer_to_list(StartSeq),
      {Results} = do_http_request(Url, get, Headers),
      lists:map(fun({RowInfoList}) ->
          {RowValueProps} = proplists:get_value(<<"value">>, RowInfoList),
          #doc_info{
  