diff --git a/app/build.gradle b/app/build.gradle
index b25aaf2..e0ce402 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -79,5 +79,5 @@
             'com.google.guava:guava:19.0'
     )
     firebaseCompile 'com.firebase:firebase-client-android:2.5.2'
-    syncbaseCompile 'io.v:vanadium-android:2.1.2'
+    syncbaseCompile 'io.v:vanadium-android:2.1.3'
 }
diff --git a/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseMain.java b/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseMain.java
index d487d33..d20c44e 100644
--- a/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseMain.java
+++ b/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseMain.java
@@ -87,24 +87,28 @@
                     Futures.catchingAsync(joinListSyncgroup(listId),
                             SyncgroupJoinFailedException.class, new
                                     AsyncFunction<SyncgroupJoinFailedException, SyncgroupSpec>() {
-                        public ListenableFuture<SyncgroupSpec> apply(@Nullable
-                                                                     SyncgroupJoinFailedException
-                                                                             input) throws
-                                Exception {
-                            Log.d(TAG, "Join failed. Sleeping and trying again: " + listId);
-                            return sExecutor.schedule(new Callable<SyncgroupSpec>() {
+                                        public ListenableFuture<SyncgroupSpec> apply(@Nullable
+                                                                                     SyncgroupJoinFailedException
+                                                                                             input) throws
+                                                Exception {
+                                            Log.d(TAG, "Join failed. Sleeping and trying again: "
+                                                    + listId);
+                                            return sExecutor.schedule(new Callable<SyncgroupSpec>
+                                                    () {
 
-                                @Override
-                                public SyncgroupSpec call() throws Exception {
-                                    Log.d(TAG, "Sleep done. Trying again: " + listId);
+                                                @Override
+                                                public SyncgroupSpec call() throws Exception {
+                                                    Log.d(TAG, "Sleep done. Trying again: " +
+                                                            listId);
 
-                                    // If this errors, then we will not get another chance to see
-                                    // this syncgroup until the app is restarted.
-                                    return joinListSyncgroup(listId).get();
-                                }
-                            }, RETRY_DELAY, TimeUnit.MILLISECONDS);
-                        }
-                    });
+                                                    // If this errors, then we will not get
+                                                    // another chance to see
+                                                    // this syncgroup until the app is restarted.
+                                                    return joinListSyncgroup(listId).get();
+                                                }
+                                            }, RETRY_DELAY, TimeUnit.MILLISECONDS);
+                                        }
+                                    });
 
                     MainListTracker listTracker = new MainListTracker(getVContext(), getDatabase(),
                             listId, listener);
@@ -138,22 +142,28 @@
     public void addTodoList(final ListSpec listSpec) {
         final String listName = LISTS_PREFIX + mIdGenerator.generateTailId();
         final Collection listCollection = getDatabase().getCollection(getVContext(), listName);
+
+        // TODO(alexfandrianto): Syncgroup creation is slow if you specify a cloud and are offline.
+        // We'll try to connect to the cloud and then time out our RPC. The error is swallowed, so
+        // we'll just think there's a blank space of time. Maybe we should just write to these
+        // collections anyway. If https://github.com/vanadium/issues/issues/1326 is done, however,
+        // we won't need to change this code.
         Futures.addCallback(listCollection.create(getVContext(), null),
                 new TrappingCallback<Void>(getErrorReporter()) {
                     @Override
                     public void onSuccess(@Nullable Void result) {
                         Futures.addCallback(createListSyncgroup(listCollection.id()),
                                 new TrappingCallback<Void>(getErrorReporter()) {
-                            @Override
-                            public void onSuccess(@Nullable Void result) {
-                                // These can happen in either order.
-                                trap(getUserCollection().put(getVContext(), listName, null,
-                                        VdlAny.class));
-                                trap(listCollection.put(getVContext(),
-                                        SyncbaseTodoList.LIST_METADATA_ROW_NAME, listSpec,
-                                        ListSpec.class));
-                            }
-                        });
+                                    @Override
+                                    public void onSuccess(@Nullable Void result) {
+                                        // These can happen in either order.
+                                        trap(getUserCollection().put(getVContext(), listName, null,
+                                                VdlAny.class));
+                                        trap(listCollection.put(getVContext(),
+                                                SyncbaseTodoList.LIST_METADATA_ROW_NAME, listSpec,
+                                                ListSpec.class));
+                                    }
+                                });
                     }
                 });
     }
@@ -161,7 +171,9 @@
     private ListenableFuture<SyncgroupSpec> joinListSyncgroup(String listId) {
         SyncgroupMemberInfo memberInfo = getDefaultMemberInfo();
         String sgName = computeListSyncgroupName(listId);
-        return getDatabase().getSyncgroup(sgName).join(getVContext(), memberInfo);
+        String blessingStr = getPersonalBlessingsString(getVContext());
+        return getDatabase().getSyncgroup(new Id(blessingStr, sgName)).join(getVContext(),
+                CLOUD_NAME, CLOUD_BLESSING, memberInfo);
     }
 
     private ListenableFuture<Void> createListSyncgroup(Id id) {
@@ -173,10 +185,12 @@
         SyncgroupMemberInfo memberInfo = getDefaultMemberInfo();
 
         SyncgroupSpec spec = new SyncgroupSpec(
-                "TODOs User Data Collection", permissions,
+                "TODOs User Data Collection", CLOUD_NAME, permissions,
                 ImmutableList.of(new CollectionRow(id, "")),
                 ImmutableList.of(MOUNTPOINT), false);
-        return getDatabase().getSyncgroup(sgName).create(getVContext(), spec, memberInfo);
+        String blessingStr = getPersonalBlessingsString(getVContext());
+        return getDatabase().getSyncgroup(new Id(blessingStr, sgName)).create(getVContext(),
+                spec, memberInfo);
     }
 
     @Override
diff --git a/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java b/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java
index 455f637..4e0d795 100644
--- a/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java
+++ b/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java
@@ -52,6 +52,7 @@
 import io.v.v23.security.access.Constants;
 import io.v.v23.security.access.Permissions;
 import io.v.v23.services.syncbase.CollectionRow;
+import io.v.v23.services.syncbase.Id;
 import io.v.v23.services.syncbase.SyncgroupJoinFailedException;
 import io.v.v23.services.syncbase.SyncgroupMemberInfo;
 import io.v.v23.services.syncbase.SyncgroupSpec;
@@ -77,8 +78,8 @@
             PROXY = "proxy",
             DATABASE = "db",
             BLESSINGS_KEY = "blessings",
-            USER_COLLECTION_SYNCGROUP_SUFFIX = "/%%sync/sg_",
-            LIST_COLLECTION_SYNCGROUP_SUFFIX = "/%%sync/list_",
+            USER_COLLECTION_SYNCGROUP_SUFFIX = "sg_",
+            LIST_COLLECTION_SYNCGROUP_SUFFIX = "list_",
             DEFAULT_BLESSING_STRING = "dev.v.io:o:608941808256-43vtfndets79kf5hac8ieujto8837660" +
                     ".apps.googleusercontent.com:";
     protected static final long
@@ -88,8 +89,8 @@
             USER_COLLECTION_NAME = "userdata",
             MOUNTPOINT = "/ns.dev.v.io:8101/tmp/todos/users/",
             CLOUD_NAME = MOUNTPOINT + "cloud",
-            // TODO(alexfandrianto): This shouldn't be me running the cloud.
-            CLOUD_BLESSING = "dev.v.io:u:alexfandrianto@google.com";
+    // TODO(alexfandrianto): This shouldn't be me running the cloud.
+    CLOUD_BLESSING = "dev.v.io:u:alexfandrianto@google.com";
 
     // BlessingPattern initialization has to be deferred until after V23 init due to native binding.
     private static final Supplier<AccessList> OPEN_ACL = Suppliers.memoize(
@@ -187,6 +188,10 @@
         return V.getPrincipal(ctx).blessingStore().defaultBlessings();
     }
 
+    protected static String getPersonalBlessingsString(VContext ctx) {
+        return getPersonalBlessings(ctx).toString();
+    }
+
     protected static String getEmailFromBlessings(Blessings blessings) {
         String[] split = blessings.toString().split(":");
         return split[split.length - 1];
@@ -243,21 +248,8 @@
     private static void ensureUserCollectionExists() throws VException {
         synchronized (sUserCollectionMutex) {
             if (sUserCollection == null) {
-                // The reason the following doesn't work yet is that collections cross-share.
-                // https://github.com/vanadium/issues/issues/1320
-                //Collection userCollection = sDatabase.getCollection(sVContext,
-                //        USER_COLLECTION_NAME);
-
-                // The reason the following workaround doesn't work is the blessing is too long.
-                // https://github.com/vanadium/issues/issues/1322
-                // Collection userCollection = sDatabase.getCollection(
-                //        new Id(getPersonalBlessings(sVContext).toString(), USER_COLLECTION_NAME));
-
-                // TODO(alexfandrianto): Replace this with one of the above solutions when possible.
-                // This solution is forced to use the email and replace invalid characters.
-                String email = getPersonalEmail(sVContext).replace(".", "_").replace("@", "_AT_");
-                Collection userCollection = sDatabase.getCollection(sVContext,
-                        USER_COLLECTION_NAME + "_" + email);
+                Collection userCollection = sDatabase.getCollection(
+                        new Id(getPersonalBlessingsString(sVContext), USER_COLLECTION_NAME));
                 try {
                     VFutures.sync(userCollection.create(sVContext, null));
                 } catch (ExistException e) {
@@ -302,19 +294,20 @@
 
                 Permissions permissions = computePermissionsFromBlessings(clientBlessings);
 
-                String sgName = CLOUD_NAME + USER_COLLECTION_SYNCGROUP_SUFFIX + email;
+                String sgName = USER_COLLECTION_SYNCGROUP_SUFFIX + Math.abs(email.hashCode());
 
                 final SyncgroupMemberInfo memberInfo = getDefaultMemberInfo();
-                final Syncgroup sgHandle = sDatabase.getSyncgroup(sgName);
+                final Syncgroup sgHandle = sDatabase.getSyncgroup(new Id(clientBlessings.toString
+                        (), sgName));
 
                 try {
                     Log.d(TAG, "Trying to join the syncgroup: " + sgName);
-                    VFutures.sync(sgHandle.join(sVContext, memberInfo));
+                    VFutures.sync(sgHandle.join(sVContext, CLOUD_NAME, CLOUD_BLESSING, memberInfo));
                     Log.d(TAG, "JOINED the syncgroup: " + sgName);
                 } catch (SyncgroupJoinFailedException e) {
                     Log.w(TAG, "Failed join. Trying to create the syncgroup: " + sgName, e);
                     SyncgroupSpec spec = new SyncgroupSpec(
-                            "TODOs User Data Collection", permissions,
+                            "TODOs User Data Collection", CLOUD_NAME, permissions,
                             ImmutableList.of(new CollectionRow(sUserCollection.id(), "")),
                             ImmutableList.of(MOUNTPOINT), false);
                     try {
@@ -342,7 +335,7 @@
     }
 
     protected String computeListSyncgroupName(String listId) {
-        return CLOUD_NAME + LIST_COLLECTION_SYNCGROUP_SUFFIX + listId;
+        return LIST_COLLECTION_SYNCGROUP_SUFFIX + listId;
     }
 
     private static volatile boolean sInitialized;
@@ -477,7 +470,8 @@
             }
             final String timestamp = DateTimeFormat.forPattern("yyyy-MM-dd").print(new DateTime());
             try {
-                return sRemoteInspectors.invite("invited-on-"+timestamp, Duration.standardDays(1));
+                return sRemoteInspectors.invite("invited-on-" + timestamp, Duration.standardDays
+                        (1));
             } catch (VException e) {
                 return "Unable to setup remote inspection: " + e;
             }
diff --git a/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseTodoList.java b/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseTodoList.java
index 6c12a7b..f735fc4 100644
--- a/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseTodoList.java
+++ b/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseTodoList.java
@@ -38,6 +38,7 @@
 import io.v.v23.security.access.AccessList;
 import io.v.v23.security.access.Constants;
 import io.v.v23.security.access.Permissions;
+import io.v.v23.services.syncbase.Id;
 import io.v.v23.services.syncbase.SyncgroupSpec;
 import io.v.v23.syncbase.ChangeType;
 import io.v.v23.syncbase.Collection;
@@ -204,7 +205,8 @@
     }
 
     private Syncgroup getListSyncgroup() {
-        return getDatabase().getSyncgroup(computeListSyncgroupName(mList.id().getName()));
+        return getDatabase().getSyncgroup(new Id(getPersonalBlessingsString(getVContext()),
+                computeListSyncgroupName(mList.id().getName())));
     }
 
     @Override
