diff --git a/Makefile b/Makefile
index 9a28af5..2901a8c 100644
--- a/Makefile
+++ b/Makefile
@@ -107,6 +107,7 @@
 syncbaseAndroidFirstApp   = syncbase/first-app
 syncbaseAndroidDataModel  = syncbase/guides/data-model
 syncbaseAndroidDataFlow   = syncbase/guides/data-flow
+syncbaseAndroidDataSync   = syncbase/guides/synchronization
 
 # Scripts that 'complete' the named tutorials, creating all relevant files
 # (code, credentials, etc.) but skipping ephemeral steps like starting servers,
@@ -388,7 +389,8 @@
 	content/$(syncbaseAndroidQuickstart).md \
 	content/$(syncbaseAndroidFirstApp).md \
 	content/$(syncbaseAndroidDataModel).md \
-	content/$(syncbaseAndroidDataFlow).md
+	content/$(syncbaseAndroidDataFlow).md \
+	content/$(syncbaseAndroidDataSync).md
 
 .PHONY: test
 test: test-site test-tutorials-core test-tutorials-java test-syncbase-android
@@ -420,7 +422,7 @@
 # Test Syncbase quickstart, guides and tutorials for Android.
 # Called from v.io/x/devtools/jiri-test/internal/test/website.go.
 test-syncbase-android: build
-	$(MDRIP) --blockTimeOut 10m --subshell test $(depsOneBigSyncbaseAndroidTest)
+	$(MDRIP) --blockTimeOut 15m --subshell test $(depsOneBigSyncbaseAndroidTest)
 
 # Test tutorials against fresh external install.
 #
diff --git a/content/syncbase/guides/batches.md b/content/syncbase/guides/batches.md
index 0ee4414..5beaf2b 100644
--- a/content/syncbase/guides/batches.md
+++ b/content/syncbase/guides/batches.md
@@ -63,17 +63,17 @@
 
 ```Java
 db.runInBatch(new Database.BatchOperation() {
-    @Override
-    public void run(BatchDatabase batchDb) {
-        Collection c1 = batchDb.collection("collection1");
-        Collection c2 = batchDb.collection("collection2");
+  @Override
+  public void run(BatchDatabase batchDb) {
+    Collection c1 = batchDb.collection("collection1");
+    Collection c2 = batchDb.collection("collection2");
 
-        c1.put("myKey", "myValue");
-        c2.put("myKey", "myValue");
+    c1.put("myKey", "myValue");
+    c2.put("myKey", "myValue");
 
-        // No need to commit. RunInBatch will commit and retry if necessary.
-    }
-});
+    // No need to commit. RunInBatch will commit and retry if necessary.
+  }
+}, new Database.BatchOptions());
 ```
 
 {{# helpers.warning }}
@@ -88,7 +88,7 @@
 
 ```Java
 // WRONG: c1 is NOT part of the batch.
-Collection c1 = db.collection("collection1");
+final Collection c1 = db.collection("collection1");
 {{# helpers.codedim }}
 db.runInBatch(new Database.BatchOperation() {
     @Override
@@ -103,7 +103,7 @@
         {{# helpers.codedim }}
         // No need to commit. RunInBatch will commit and retry if necessary.
     }
-});
+}, new Database.BatchOptions());
 {{/ helpers.codedim }}
 ```
 
@@ -113,7 +113,7 @@
 to the developers to manage themselves.
 
 ```Java
-BatchDatabase batchDb = db.beginBatch();
+BatchDatabase batchDb = db.beginBatch(new Database.BatchOptions());
 
 Collection c1 = batchDb.collection("collection1");
 Collection c2 = batchDb.collection("collection2");
@@ -122,7 +122,6 @@
 c2.put("myKey", "myValue");
 
 batchDb.commit();
-
 ```
 
 {{# helpers.warning }}
@@ -137,7 +136,7 @@
 // WRONG: c1 is NOT part of the batch.
 Collection c1 = db.collection("collection1");
 {{# helpers.codedim }}
-BatchDatabase batchDb = db.beginBatch();
+BatchDatabase batchDb = db.beginBatch(new Database.BatchOptions());
 
 // c2 is part of the batch.
 Collection c2 = batchDb.collection("collection2");
diff --git a/content/syncbase/guides/synchronization.md b/content/syncbase/guides/synchronization.md
index 4a05c24..779dcf3 100644
--- a/content/syncbase/guides/synchronization.md
+++ b/content/syncbase/guides/synchronization.md
@@ -5,6 +5,29 @@
 toc: true
 = yaml =
 
+{{# helpers.hidden }}
+<!-- @setupEnvironment @test -->
+```
+export PROJECT_DIR=$(mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX")
+cp -r $JIRI_ROOT/website/tools/android_project_stubs/example/* $PROJECT_DIR
+cat - <<EOF >> $PROJECT_DIR/app/build.gradle
+dependencies {
+  compile 'io.v:syncbase:0.1.4'
+}
+EOF
+cat - <<EOF > $PROJECT_DIR/app/src/main/java/io/v/syncbase/example/DataSync.java
+package io.v.syncbase.example;
+import io.v.syncbase.*;
+import java.util.Iterator;
+public class DataSync {
+  Database db;
+  User userToInvite;
+  User userToRemove;
+  void main() {
+EOF
+```
+{{/ helpers.hidden }}
+
 # Introduction
 
 Syncbase's sync protocol is peer-to-peer whereas most other sync systems require
@@ -53,23 +76,32 @@
 
 On the inviter side, we just need to invite a user to join the collection's
 syncgroup:
+<!-- @inviteUser @test -->
 ```
+cat - <<EOF >> $PROJECT_DIR/app/src/main/java/io/v/syncbase/example/DataSync.java
 Collection collectionToShare = db.collection("myCollection");
 
-User userToInvite = new User("<email-address>");
-
-collectionToShare.getSyncgroup().inviteUser(userToInvite, AccessLevel.READ);
+collectionToShare.getSyncgroup().inviteUser(userToInvite, AccessList.AccessLevel.READ);
+EOF
 ```
 
 On the invitee side, we need to handle invite requests by registering a handler:
+<!-- @addInviteHandler @test -->
 ```
+cat - <<EOF >> $PROJECT_DIR/app/src/main/java/io/v/syncbase/example/DataSync.java
 db.addSyncgroupInviteHandler(new Database.SyncgroupInviteHandler() {
-    @Override
-    public void onInvite(SyncgroupInvite invite) {
-        // Prompt the user if desired then accept or reject the invite.
-        db.acceptSyncgroupInvite(invite);
-    }
-});
+  @Override
+  public void onInvite(SyncgroupInvite invite) {
+    // Prompt the user if desired then accept or reject the invite.
+    db.acceptSyncgroupInvite(invite, new Database.AcceptSyncgroupInviteCallback() {
+      @Override
+      public void onSuccess(Syncgroup sg) {
+        // Accepting invitation was successful.
+      }
+    });
+  }
+}, new Database.AddSyncgroupInviteHandlerOptions());
+EOF
 ```
 
 {{# helpers.info }}
@@ -91,12 +123,13 @@
 disappear. Otherwise, the shared collection on target user's database will
 become read-only and will no longer sync and receive updates.
 
+<!-- @unshareCollection @test -->
 ```
+cat - <<EOF >> $PROJECT_DIR/app/src/main/java/io/v/syncbase/example/DataSync.java
 Collection sharedCollection = db.collection("myCollection");
 
-User userToRemove = new User("<email-address>");
-
 sharedCollection.getSyncgroup().ejectUser(userToRemove);
+EOF
 ```
 
 ## Updating Access Level
@@ -109,11 +142,14 @@
 `db.getSyncgroups()` can be used to list all syncgroups. This list includes
 pre-created syncgroups for collections and other syncgroups created or joined.
 
+<!-- @getAllSyncgroups @test -->
 ```Java
+cat - <<EOF >> $PROJECT_DIR/app/src/main/java/io/v/syncbase/example/DataSync.java
 Iterator<Syncgroup> allSyncgroups = db.getSyncgroups();
 while(allSyncgroups.hasNext()) {
     Syncgroup sg = allSyncgroups.next();
 }
+EOF
 ```
 
 # Summary
@@ -125,4 +161,15 @@
 syncgroup.
 * Access-level can be one of read-only, read-write, or read-write-admin.
 
-[Data Flow]: /syncbase/guides/data-flow.html
\ No newline at end of file
+[Data Flow]: /syncbase/guides/data-flow.html
+
+{{# helpers.hidden }}
+<!-- @compileSnippets_mayTakeMinutes @test -->
+```
+cat - <<EOF >> $PROJECT_DIR/app/src/main/java/io/v/syncbase/example/DataSync.java
+  }
+}
+EOF
+cd $PROJECT_DIR && ./gradlew assembleRelease
+```
+{{/ helpers.hidden }}
\ No newline at end of file
