diff --git a/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java b/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
index 22fc5eb..25365d7 100644
--- a/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
+++ b/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
@@ -1494,18 +1494,9 @@
         response.setAcl(new Acl.Builder().setInheritFrom(rootFolderDocId)
             .setInheritanceType(Acl.InheritanceType.PARENT_OVERRIDES)
             .build());
-        final Map<DocId, Acl> map = Collections.singletonMap(rootFolderDocId,
-            acl.setInheritanceType(Acl.InheritanceType.PARENT_OVERRIDES)
-            .build());
-        executor.execute(new Runnable() {
-          @Override public void run() {
-            try {
-              context.getDocIdPusher().pushNamedResources(map);
-            } catch (InterruptedException ie) {
-              log.log(Level.WARNING, "Error pushing named resource", ie);
-	    }
-          }
-        });
+        context.getAsyncDocIdPusher().pushNamedResource(rootFolderDocId,
+                acl.setInheritanceType(Acl.InheritanceType.PARENT_OVERRIDES)
+                    .build());
       }
 
       response.addMetadata(METADATA_OBJECT_TYPE,
diff --git a/test/com/google/enterprise/adaptor/sharepoint/AccumulatingAsyncDocIdPusher.java b/test/com/google/enterprise/adaptor/sharepoint/AccumulatingAsyncDocIdPusher.java
new file mode 100644
index 0000000..b592142
--- /dev/null
+++ b/test/com/google/enterprise/adaptor/sharepoint/AccumulatingAsyncDocIdPusher.java
@@ -0,0 +1,66 @@
+// Copyright 2014 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.enterprise.adaptor.sharepoint;
+
+import com.google.enterprise.adaptor.Acl;
+import com.google.enterprise.adaptor.AsyncDocIdPusher;
+import com.google.enterprise.adaptor.DocId;
+import com.google.enterprise.adaptor.DocIdPusher;
+
+import java.util.Collections;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class AccumulatingAsyncDocIdPusher implements AsyncDocIdPusher{
+  private static final Logger log
+      = Logger.getLogger(AccumulatingAsyncDocIdPusher.class.getName());
+
+  private final DocIdPusher pusher;
+  AccumulatingAsyncDocIdPusher(DocIdPusher pusher) {
+    if (pusher == null) {
+      throw new NullPointerException();
+    }
+    this.pusher = pusher;
+  }
+  @Override
+  public void pushDocId(DocId docid) {
+    try {
+      pusher.pushDocIds(Collections.singletonList(docid));
+    } catch (InterruptedException e) {
+      log.log(Level.WARNING, "Interrupted during pushDocId", e);
+      Thread.currentThread().interrupt();
+    }
+  }
+
+  @Override
+  public void pushRecord(DocIdPusher.Record record) {
+    try {
+      pusher.pushRecords(Collections.singletonList(record));
+    } catch (InterruptedException e) {
+      log.log(Level.WARNING, "Interrupted during pushRecord", e);
+      Thread.currentThread().interrupt();
+    }
+  }
+
+  @Override
+  public void pushNamedResource(DocId docid, Acl acl) {
+    try {
+      pusher.pushNamedResources(Collections.singletonMap(docid, acl));
+    } catch (InterruptedException e) {
+      log.log(Level.WARNING, "Interrupted during pushNamedResource", e);
+      Thread.currentThread().interrupt();
+    }
+  }
+}
diff --git a/test/com/google/enterprise/adaptor/sharepoint/MockAdaptorContext.java b/test/com/google/enterprise/adaptor/sharepoint/MockAdaptorContext.java
index f96f8c5..7eb2f6f 100644
--- a/test/com/google/enterprise/adaptor/sharepoint/MockAdaptorContext.java
+++ b/test/com/google/enterprise/adaptor/sharepoint/MockAdaptorContext.java
@@ -62,6 +62,8 @@
     }
   };
   private PollingIncrementalLister pollingIncrementalLister;
+  
+  private final AccumulatingAsyncDocIdPusher asynPusher;
 
   public MockAdaptorContext(Config config, DocIdPusher pusher) {
     if (config == null) {
@@ -69,6 +71,7 @@
     }
     this.config = config;
     this.pusher = pusher;
+    this.asynPusher = new AccumulatingAsyncDocIdPusher(pusher);
   }
 
   @Override
@@ -152,6 +155,6 @@
 
   @Override
   public AsyncDocIdPusher getAsyncDocIdPusher() {
-    throw new UnsupportedOperationException();
+    return asynPusher;
   }
 }
