diff --git a/lib/plexi b/lib/plexi
index 91ffe47..272e144 160000
--- a/lib/plexi
+++ b/lib/plexi
@@ -1 +1 @@
-Subproject commit 91ffe473c30925fd45ddbfb6dd5c5fa917454f17
+Subproject commit 272e144e78ef5f3416daf77ece11a0e66f2b2f10
diff --git a/test/com/google/enterprise/adaptor/sharepoint/AccumulatingDocIdPusher.java b/test/com/google/enterprise/adaptor/sharepoint/AccumulatingDocIdPusher.java
index 3004d41..3e7d35c 100644
--- a/test/com/google/enterprise/adaptor/sharepoint/AccumulatingDocIdPusher.java
+++ b/test/com/google/enterprise/adaptor/sharepoint/AccumulatingDocIdPusher.java
@@ -16,25 +16,18 @@
 
 import com.google.enterprise.adaptor.Acl;
 import com.google.enterprise.adaptor.DocId;
-import com.google.enterprise.adaptor.DocIdPusher;
-import com.google.enterprise.adaptor.PushErrorHandler;
+import com.google.enterprise.adaptor.ExceptionHandler;
 
 import java.util.*;
 
-class AccumulatingDocIdPusher implements DocIdPusher {
+class AccumulatingDocIdPusher extends UnsupportedDocIdPusher {
   private List<Record> records = new ArrayList<Record>();
   private List<Map<DocId, Acl>> namedResouces
       = new ArrayList<Map<DocId, Acl>>();
 
   @Override
-  public DocId pushDocIds(Iterable<DocId> docIds)
-      throws InterruptedException {
-    return pushDocIds(docIds, null);
-  }
-
-  @Override
   public DocId pushDocIds(Iterable<DocId> docIds,
-                          PushErrorHandler handler)
+                          ExceptionHandler handler)
       throws InterruptedException {
     List<Record> records = new ArrayList<Record>();
     for (DocId docId : docIds) {
@@ -45,14 +38,8 @@
   }
 
   @Override
-  public Record pushRecords(Iterable<Record> records)
-      throws InterruptedException {
-    return pushRecords(records, null);
-  }
-
-  @Override
   public Record pushRecords(Iterable<Record> records,
-                            PushErrorHandler handler)
+                            ExceptionHandler handler)
       throws InterruptedException {
     for (Record record : records) {
       this.records.add(record);
@@ -81,7 +68,7 @@
 
   @Override
   public DocId pushNamedResources(Map<DocId, Acl> resources,
-                                  PushErrorHandler hanlder)
+                                  ExceptionHandler hanlder)
       throws InterruptedException {
     namedResouces.add(Collections.unmodifiableMap(
         new TreeMap<DocId, Acl>(resources)));
diff --git a/test/com/google/enterprise/adaptor/sharepoint/DelegatingDocIdPusher.java b/test/com/google/enterprise/adaptor/sharepoint/DelegatingDocIdPusher.java
index 3ae9d57..ade955b 100644
--- a/test/com/google/enterprise/adaptor/sharepoint/DelegatingDocIdPusher.java
+++ b/test/com/google/enterprise/adaptor/sharepoint/DelegatingDocIdPusher.java
@@ -17,7 +17,9 @@
 import com.google.enterprise.adaptor.Acl;
 import com.google.enterprise.adaptor.DocId;
 import com.google.enterprise.adaptor.DocIdPusher;
-import com.google.enterprise.adaptor.PushErrorHandler;
+import com.google.enterprise.adaptor.ExceptionHandler;
+import com.google.enterprise.adaptor.GroupPrincipal;
+import com.google.enterprise.adaptor.Principal;
 
 import java.util.*;
 
@@ -28,12 +30,12 @@
   @Override
   public DocId pushDocIds(Iterable<DocId> docIds)
       throws InterruptedException {
-    return delegate().pushDocIds(docIds, null);
+    return pushDocIds(docIds, null);
   }
 
   @Override
   public DocId pushDocIds(Iterable<DocId> docIds,
-                          PushErrorHandler handler)
+                          ExceptionHandler handler)
       throws InterruptedException {
     return delegate().pushDocIds(docIds, handler);
   }
@@ -41,12 +43,12 @@
   @Override
   public Record pushRecords(Iterable<Record> records)
       throws InterruptedException {
-    return delegate().pushRecords(records, null);
+    return pushRecords(records, null);
   }
 
   @Override
   public Record pushRecords(Iterable<Record> records,
-                            PushErrorHandler handler)
+                            ExceptionHandler handler)
       throws InterruptedException {
     return delegate().pushRecords(records, handler);
   }
@@ -54,13 +56,28 @@
   @Override
   public DocId pushNamedResources(Map<DocId, Acl> resources)
       throws InterruptedException {
-    return delegate().pushNamedResources(resources, null);
+    return pushNamedResources(resources, null);
   }
 
   @Override
   public DocId pushNamedResources(Map<DocId, Acl> resources,
-                                  PushErrorHandler handler)
+                                  ExceptionHandler handler)
       throws InterruptedException {
     return delegate().pushNamedResources(resources, handler);
   }
+
+  @Override
+  public GroupPrincipal pushGroupDefinitions(
+      Map<GroupPrincipal, ? extends Collection<Principal>> defs,
+      boolean caseSensitive) throws InterruptedException {
+    return pushGroupDefinitions(defs, caseSensitive, null);
+  }
+
+  @Override
+  public GroupPrincipal pushGroupDefinitions(
+      Map<GroupPrincipal, ? extends Collection<Principal>> defs,
+      boolean caseSensitive, ExceptionHandler handler)
+      throws InterruptedException {
+    return delegate().pushGroupDefinitions(defs, caseSensitive, handler);
+  }
 }
diff --git a/test/com/google/enterprise/adaptor/sharepoint/MockAdaptorContext.java b/test/com/google/enterprise/adaptor/sharepoint/MockAdaptorContext.java
index 53700e1..52d26a5 100644
--- a/test/com/google/enterprise/adaptor/sharepoint/MockAdaptorContext.java
+++ b/test/com/google/enterprise/adaptor/sharepoint/MockAdaptorContext.java
@@ -19,7 +19,7 @@
 import com.google.enterprise.adaptor.DocId;
 import com.google.enterprise.adaptor.DocIdEncoder;
 import com.google.enterprise.adaptor.DocIdPusher;
-import com.google.enterprise.adaptor.GetDocIdsErrorHandler;
+import com.google.enterprise.adaptor.ExceptionHandler;
 import com.google.enterprise.adaptor.SensitiveValueDecoder;
 import com.google.enterprise.adaptor.Session;
 import com.google.enterprise.adaptor.StatusSource;
@@ -91,7 +91,7 @@
   }
 
   @Override
-  public GetDocIdsErrorHandler getGetDocIdsFullErrorHandler() {
+  public ExceptionHandler getGetDocIdsFullErrorHandler() {
     throw new UnsupportedOperationException();
   }
 
@@ -106,7 +106,7 @@
   }
 
   @Override
-  public void setGetDocIdsFullErrorHandler(GetDocIdsErrorHandler handler) {
+  public void setGetDocIdsFullErrorHandler(ExceptionHandler handler) {
     throw new UnsupportedOperationException();
   }
 
@@ -121,12 +121,12 @@
   }
 
   @Override
-  public GetDocIdsErrorHandler getGetDocIdsIncrementalErrorHandler() {
+  public ExceptionHandler getGetDocIdsIncrementalErrorHandler() {
     throw new UnsupportedOperationException();
   }
 
   @Override
-  public void setGetDocIdsIncrementalErrorHandler(GetDocIdsErrorHandler h) {
+  public void setGetDocIdsIncrementalErrorHandler(ExceptionHandler h) {
     throw new UnsupportedOperationException();
   }
 }
