diff --git a/syncbase/src/main/java/io/v/syncbase/Database.java b/syncbase/src/main/java/io/v/syncbase/Database.java
index e86141f..fc67c83 100644
--- a/syncbase/src/main/java/io/v/syncbase/Database.java
+++ b/syncbase/src/main/java/io/v/syncbase/Database.java
@@ -393,6 +393,7 @@
      */
     public static class AddWatchChangeHandlerOptions {
         public byte[] resumeMarker;
+        boolean showUserdataCollectionRow;
     }
 
     /**
@@ -428,7 +429,7 @@
     /**
      * Notifies {@code h} of initial state, and of all subsequent changes to this database.
      */
-    public void addWatchChangeHandler(final WatchChangeHandler h, AddWatchChangeHandlerOptions opts) {
+    public void addWatchChangeHandler(final WatchChangeHandler h, final AddWatchChangeHandlerOptions opts) {
         // Note: Eventually we'll add a watch variant that takes a query, where the query can be
         // constructed using some sort of query builder API.
         // TODO(sadovsky): Support specifying resumeMarker. Note, watch-from-resumeMarker may be
@@ -451,7 +452,7 @@
                                         io.v.syncbase.core.WatchChange.EntityType.ROW &&
                                 coreWatchChange.collection.name.equals(Syncbase.USERDATA_NAME) &&
                                 coreWatchChange.row.startsWith(Syncbase.USERDATA_COLLECTION_PREFIX);
-                        if (!isRoot && !isUserdataCollectionRow) {
+                        if (!isRoot && (opts.showUserdataCollectionRow || !isUserdataCollectionRow)) {
                             mBatch.add(new WatchChange(coreWatchChange));
                         }
                         if (!coreWatchChange.continued) {
diff --git a/syncbase/src/main/java/io/v/syncbase/Syncbase.java b/syncbase/src/main/java/io/v/syncbase/Syncbase.java
index 0f7caab..e026642 100644
--- a/syncbase/src/main/java/io/v/syncbase/Syncbase.java
+++ b/syncbase/src/main/java/io/v/syncbase/Syncbase.java
@@ -266,7 +266,10 @@
                         } catch(VError e) {
                             syncgroup.createIfMissing(ImmutableList.of(sUserdataCollection));
                         }
-                        sDatabase.addWatchChangeHandler(new UserdataWatchHandler());
+                        Database.AddWatchChangeHandlerOptions opts = new Database
+                                .AddWatchChangeHandlerOptions();
+                        opts.showUserdataCollectionRow = true;
+                        sDatabase.addWatchChangeHandler(new UserdataWatchHandler(), opts);
                     }
                     sOpts.callbackExecutor.execute(new Runnable() {
                         @Override
@@ -298,18 +301,20 @@
         }
 
         private void onWatchChange(Iterator<WatchChange> changes) {
-            WatchChange watchChange = changes.next();
-            if (watchChange.getCollectionId().getName().equals(USERDATA_NAME) &&
-                    watchChange.getEntityType() == WatchChange.EntityType.ROW &&
-                    watchChange.getChangeType() == WatchChange.ChangeType.PUT &&
-                    watchChange.getRowKey().startsWith(USERDATA_COLLECTION_PREFIX)) {
-                try {
-                    String encodedId = watchChange.getRowKey().
-                            substring(Syncbase.USERDATA_COLLECTION_PREFIX.length());
-                    sDatabase.getSyncgroup(Id.decode(encodedId)).join();
-                } catch (VError vError) {
-                    vError.printStackTrace();
-                    System.err.println(vError.toString());
+            while (changes.hasNext()) {
+                WatchChange watchChange = changes.next();
+                if (watchChange.getCollectionId().getName().equals(USERDATA_NAME) &&
+                        watchChange.getEntityType() == WatchChange.EntityType.ROW &&
+                        watchChange.getChangeType() == WatchChange.ChangeType.PUT &&
+                        watchChange.getRowKey().startsWith(USERDATA_COLLECTION_PREFIX)) {
+                    try {
+                        String encodedId = watchChange.getRowKey().
+                                substring(Syncbase.USERDATA_COLLECTION_PREFIX.length());
+                        sDatabase.getSyncgroup(Id.decode(encodedId)).join();
+                    } catch (VError vError) {
+                        vError.printStackTrace();
+                        System.err.println(vError.toString());
+                    }
                 }
             }
         }
