diff --git a/syncbase/src/main/java/io/v/syncbase/Database.java b/syncbase/src/main/java/io/v/syncbase/Database.java
index 4837017..1fea773 100644
--- a/syncbase/src/main/java/io/v/syncbase/Database.java
+++ b/syncbase/src/main/java/io/v/syncbase/Database.java
@@ -413,7 +413,10 @@
                     @Override
                     public void onChange(io.v.syncbase.core.WatchChange coreWatchChange) {
                         // TODO(razvanm): Ignore changes to userdata collection.
-                        mBatch.add(new WatchChange(coreWatchChange));
+                        if (coreWatchChange.entityType !=
+                                io.v.syncbase.core.WatchChange.EntityType.ROOT) {
+                            mBatch.add(new WatchChange(coreWatchChange));
+                        }
                         if (!coreWatchChange.continued) {
                             final SettableFuture<Boolean> setFuture = SettableFuture.create();
                             if (!mGotFirstBatch) {
diff --git a/syncbase/src/main/java/io/v/syncbase/WatchChange.java b/syncbase/src/main/java/io/v/syncbase/WatchChange.java
index 46c236c..5160de1 100644
--- a/syncbase/src/main/java/io/v/syncbase/WatchChange.java
+++ b/syncbase/src/main/java/io/v/syncbase/WatchChange.java
@@ -13,7 +13,6 @@
  */
 public class WatchChange {
     public enum EntityType {
-        ROOT,
         COLLECTION,
         ROW
     }
@@ -33,9 +32,7 @@
     private final boolean mContinued;
 
     WatchChange(io.v.syncbase.core.WatchChange change) {
-        if (change.entityType == io.v.syncbase.core.WatchChange.EntityType.ROOT) {
-            mEntityType = EntityType.ROOT;
-        } else if (change.entityType == io.v.syncbase.core.WatchChange.EntityType.COLLECTION) {
+        if (change.entityType == io.v.syncbase.core.WatchChange.EntityType.COLLECTION) {
             mEntityType = EntityType.COLLECTION;
         } else if (change.entityType == io.v.syncbase.core.WatchChange.EntityType.ROW) {
             mEntityType = EntityType.ROW;
diff --git a/syncbase/src/test/java/io/v/syncbase/SyncbaseTest.java b/syncbase/src/test/java/io/v/syncbase/SyncbaseTest.java
index 311ce91..72a2431 100644
--- a/syncbase/src/test/java/io/v/syncbase/SyncbaseTest.java
+++ b/syncbase/src/test/java/io/v/syncbase/SyncbaseTest.java
@@ -188,18 +188,13 @@
             @Override
             public void onInitialState(Iterator<WatchChange> values) {
                 // TODO(razvanm): Check the entire contents of each change.
-                // 1st change: the root entity.
+                // 1st change: the collection entity for the "c" collection.
                 assertTrue(values.hasNext());
-                WatchChange watchChange = values.next();
-                assertEquals(WatchChange.EntityType.ROOT, watchChange.getEntityType());
-                assertEquals(WatchChange.ChangeType.PUT, watchChange.getChangeType());
-                // 2nd change: the collection entity for the "c" collection.
-                assertTrue(values.hasNext());
-                watchChange = (WatchChange) values.next();
+                WatchChange watchChange = (WatchChange) values.next();
                 assertEquals(WatchChange.EntityType.COLLECTION, watchChange.getEntityType());
                 assertEquals(WatchChange.ChangeType.PUT, watchChange.getChangeType());
                 assertEquals("c", watchChange.getCollectionId().getName());
-                // 3nd change: the row for the "foo" key.
+                // 2nd change: the row for the "foo" key.
                 assertTrue(values.hasNext());
                 watchChange = (WatchChange) values.next();
                 assertEquals(WatchChange.EntityType.ROW, watchChange.getEntityType());
@@ -208,12 +203,18 @@
                 assertEquals("foo", watchChange.getRowKey());
                 // TODO(razvanm): Uncomment after the POJO start working.
                 //assertEquals(1, watchChange.getValue());
-                // 4nd change: the collection entity for the userdata collection.
+                // 3rd change: the collection entity for the userdata collection.
                 assertTrue(values.hasNext());
                 watchChange = (WatchChange) values.next();
                 assertEquals(WatchChange.EntityType.COLLECTION, watchChange.getEntityType());
                 assertEquals(WatchChange.ChangeType.PUT, watchChange.getChangeType());
-                assertFalse(values.hasNext());
+                // 4th change: the userdata collection has a row for "c"'s syncgroup.
+                assertTrue(values.hasNext());
+                watchChange = (WatchChange) values.next();
+                assertEquals(WatchChange.EntityType.ROW, watchChange.getEntityType());
+                assertEquals(WatchChange.ChangeType.PUT, watchChange.getChangeType());
+                assertEquals("userdata__", watchChange.getCollectionId().getName());
+                assertTrue(watchChange.getRowKey().endsWith("c"));
                 waitOnInitialState.set(null);
             }
 
