diff --git a/src/couchdb/couch_view_updater.erl b/src/couchdb/couch_view_updater.erl
index 51f06b4..73a61fc 100644
--- a/src/couchdb/couch_view_updater.erl
+++ b/src/couchdb/couch_view_updater.erl
@@ -166,16 +166,17 @@ do_maps(#group{query_server = Qs} = Group, MapQueue, WriteQueue) ->
         couch_work_queue:close(WriteQueue),
         couch_query_servers:stop_doc_map(Group#group.query_server);
     {ok, Queue} ->
-        lists:foreach(
-            fun({Seq, #doc{id = Id, deleted = true}}) ->
+        Items = lists:foldl(
+            fun({Seq, #doc{id = Id, deleted = true}}, Acc) ->
                 Item = {Seq, Id, []},
-                ok = couch_work_queue:queue(WriteQueue, Item);
-            ({Seq, #doc{id = Id, deleted = false} = Doc}) ->
+                [Item | Acc];
+            ({Seq, #doc{id = Id, deleted = false} = Doc}, Acc) ->
                 {ok, Result} = couch_query_servers:map_doc_raw(Qs, Doc),
                 Item = {Seq, Id, Result},
-                ok = couch_work_queue:queue(WriteQueue, Item)
+                [Item | Acc]
             end,
-            Queue),
+            [], Queue),
+        ok = couch_work_queue:queue(WriteQueue, Items),
         do_maps(Group, MapQueue, WriteQueue)
     end.
 
@@ -183,7 +184,8 @@ do_writes(Parent, Owner, Group, WriteQueue, InitialBuild, ViewEmptyKVs) ->
     case couch_work_queue:dequeue(WriteQueue) of
     closed ->
         Parent ! {new_group, Group};
-    {ok, Queue} ->
+    {ok, Queue0} ->
+        Queue = lists:flatten(Queue0),
         {ViewKVs, DocIdViewIdKeys} = lists:foldr(
             fun({_Seq, Id, []}, {ViewKVsAcc, DocIdViewIdKeysAcc}) ->
                 {ViewKVsAcc, [{Id, []} | DocIdViewIdKeysAcc]};