diff --git a/browser/src/identity.js b/browser/src/identity.js
index 1c9c832..624c07d 100644
--- a/browser/src/identity.js
+++ b/browser/src/identity.js
@@ -19,14 +19,14 @@
 }
 
 Identity.blessingForUsername = function(username) {
-  return 'dev.v.io/u/' + username;
+  return 'dev.v.io:u:' + username;
 };
 
 function autoUsername() {
   return uuid.v4();
 }
 
-var ACCOUNT_REGEX = /(dev\.v\.io\/u\/([^\/]+)).*/;
+var ACCOUNT_REGEX = /(dev\.v\.io:u:([^:]+)).*/;
 
 function processAccountName(accountName) {
   if (!accountName || accountName === 'unknown') {
diff --git a/browser/src/invitation-manager.js b/browser/src/invitation-manager.js
index 4eed040..c799bd4 100644
--- a/browser/src/invitation-manager.js
+++ b/browser/src/invitation-manager.js
@@ -104,7 +104,7 @@
       return this.sgmPromise.then(function(sgm) {
         return sgm.addCollaborator(owner, tripSgName(tripId), collaborator)
           .catch(function(err) {
-            if (err instanceof verror.NoExistError &&
+            if (/*err instanceof verror.NoExistError &&*/
                 owner === self.username) {
               return self.createTripSyncgroup(tripId, collaborator);
             } else {
@@ -123,9 +123,9 @@
           if (trip.owner) {
             self.joinTripSyncgroup(trip.owner, tripId)
               .catch(function(err) {
-                if (!(err instanceof verror.NoExistError)) {
+                /*if (!(err instanceof verror.NoExistError)) {
                   throw err;
-                }
+                }*/
               }).catch(self.onError);
           }
         });
diff --git a/browser/src/vanadium-wrapper/syncbase-wrapper.js b/browser/src/vanadium-wrapper/syncbase-wrapper.js
index daaff83..112a0f6 100644
--- a/browser/src/vanadium-wrapper/syncbase-wrapper.js
+++ b/browser/src/vanadium-wrapper/syncbase-wrapper.js
@@ -395,12 +395,12 @@
         joinOrCreate: function(spec) {
           return sgp.join()
             .catch(function(err) {
-              if (err instanceof verror.NoExistError) {
+              //if (err instanceof verror.NoExistError) {
                 debug.log('Syncbase: syncgroup ' + name + ' does not exist.');
                 return sgp.createOrJoin(spec);
-              } else {
+              /*} else {
                 throw err;
-              }
+              }*/
             });
         }
       };
