diff --git a/go/src/v.io/x/sensorlog/internal/measure/syncgroup_test.go b/go/src/v.io/x/sensorlog/internal/measure/syncgroup_test.go
index 6f7044d..9653863 100644
--- a/go/src/v.io/x/sensorlog/internal/measure/syncgroup_test.go
+++ b/go/src/v.io/x/sensorlog/internal/measure/syncgroup_test.go
@@ -20,7 +20,7 @@
 	_, ctxMeasured, sbName, _, cleanup := sbtu.SetupOrDieCustom("one", "one:sb", nil)
 	defer cleanup()
 
-	// Open app/db (create both) as measured.
+	// Open (create) db as measured.
 	db, err := sbutil.CreateOrOpenDB(ctxMeasured, sbName, sbmodel.MeasuredCollections)
 	if err != nil {
 		t.Fatalf("CreateOrOpenDB should have succeeded, got error: %v", err)
diff --git a/go/src/v.io/x/sensorlog/internal/measure/watcher_test.go b/go/src/v.io/x/sensorlog/internal/measure/watcher_test.go
index 9bba516..9b6d9e6 100644
--- a/go/src/v.io/x/sensorlog/internal/measure/watcher_test.go
+++ b/go/src/v.io/x/sensorlog/internal/measure/watcher_test.go
@@ -31,7 +31,7 @@
 	_, ctxMeasured, sbName, _, cleanup := sbtu.SetupOrDieCustom("one", "one:sb", nil)
 	defer cleanup()
 
-	// Open app/db (create both) as measured. Keep write permission on StreamDef.
+	// Open (create) db as measured. Keep write permission on StreamDef.
 	db, err := sbutil.CreateOrOpenDB(ctxMeasured, sbName, watchCollections)
 	if err != nil {
 		t.Fatalf("CreateOrOpenDB should have succeeded, got error: %v", err)
@@ -80,7 +80,7 @@
 	_, ctxMeasured, sbName, _, cleanup := sbtu.SetupOrDieCustom("one", "one:sb", nil)
 	defer cleanup()
 
-	// Open app/db (create both) as measured. Keep write permission on StreamDef.
+	// Open (create) db as measured. Keep write permission on StreamDef.
 	db, err := sbutil.CreateOrOpenDB(ctxMeasured, sbName, watchCollections)
 	if err != nil {
 		t.Fatalf("CreateOrOpenDB should have succeeded, got error: %v", err)
diff --git a/go/src/v.io/x/sensorlog/internal/sbutil/syncbase.go b/go/src/v.io/x/sensorlog/internal/sbutil/syncbase.go
index d3d843f..e076030 100644
--- a/go/src/v.io/x/sensorlog/internal/sbutil/syncbase.go
+++ b/go/src/v.io/x/sensorlog/internal/sbutil/syncbase.go
@@ -10,6 +10,7 @@
 	"v.io/v23/context"
 	"v.io/v23/security"
 	"v.io/v23/security/access"
+	wire "v.io/v23/services/syncbase"
 	"v.io/v23/syncbase"
 	"v.io/v23/verror"
 	"v.io/x/sensorlog/internal/config"
@@ -17,7 +18,7 @@
 )
 
 // CreateOrOpenDB opens the Sensor Log database hosted on specified Syncbase
-// instance, creating it if missing, initializing specified collections.
+// instance, creating it if missing, and initializing specified collections.
 func CreateOrOpenDB(ctx *context.T, sbService string, collections []sbmodel.CollectionSpec) (syncbase.Database, error) {
 	aclFull := access.Permissions{}
 	// Allow everyone to resolve to allow joining syncgroups.
@@ -32,25 +33,22 @@
 	AddPermsForPrincipal(&aclReadOnly, v23.GetPrincipal(ctx), access.Read, access.Admin)
 
 	sbs := syncbase.NewService(sbService)
-	app := sbs.App(config.AppName)
-	if err := createIfMissing(ctx, app, aclFull); err != nil {
-		return nil, err
-	}
-
+	// TODO(sadovsky): Refactor to reflect the change that eliminates the explicit
+	// app layer. For now, we simply use AppName as database Id.Blessing.
 	// TODO(ivanpi): Add schema version.
-	db := app.Database(config.DBName, nil)
+	db := sbs.DatabaseForId(wire.Id{Blessing: config.AppName, Name: config.DBName}, nil)
 	if err := createIfMissing(ctx, db, aclFull); err != nil {
 		return nil, err
 	}
 
 	// TODO(ivanpi): Add schemas when available.
-	for _, ts := range collections {
-		tb := db.Collection(ts.Prototype.Collection())
+	for _, cs := range collections {
+		c := db.Collection(cs.Prototype.Collection())
 		acl := aclReadOnly
-		if !ts.ReadOnly {
+		if !cs.ReadOnly {
 			acl = aclFull
 		}
-		if err := createIfMissing(ctx, tb, acl); err != nil {
+		if err := createIfMissing(ctx, c, acl); err != nil {
 			return nil, err
 		}
 	}
@@ -58,8 +56,8 @@
 	return db, nil
 }
 
-// creatable is satisfied by Syncbase hierarchy layers (app, db, collection)
-// that can be created and tested for existence.
+// creatable is satisfied by Syncbase hierarchy layers (db, collection) that can
+// be created and tested for existence.
 type creatable interface {
 	Create(ctx *context.T, acl access.Permissions) error
 	Exists(ctx *context.T) (bool, error)
diff --git a/go/src/v.io/x/sensorlog/internal/sbutil/syncbase_test.go b/go/src/v.io/x/sensorlog/internal/sbutil/syncbase_test.go
index a31fa52..7f248e2 100644
--- a/go/src/v.io/x/sensorlog/internal/sbutil/syncbase_test.go
+++ b/go/src/v.io/x/sensorlog/internal/sbutil/syncbase_test.go
@@ -22,33 +22,16 @@
 	defer cleanup()
 	ctxGuest := sbtu.NewCtx(ctxOwner, rootPrincipal, "two")
 
-	// Try to open app/db (create both) as guest, fail with ErrNoAccess.
+	// Try to open (create) db as guest, fail with ErrNoAccess.
 	if _, err := sbutil.CreateOrOpenDB(ctxGuest, sbName, sbmodel.MasterCollections); verror.ErrorID(err) != verror.ErrNoAccess.ID {
 		t.Errorf("CreateOrOpenDB should have failed with ErrNoAccess, got error: %v", err)
 	}
-	// Open app/db (create both) as owner.
+	// Open (create) db as owner.
 	dbOwner, err := sbutil.CreateOrOpenDB(ctxOwner, sbName, sbmodel.MasterCollections)
 	if err != nil {
 		t.Fatalf("CreateOrOpenDB should have succeeded, got error: %v", err)
 	}
-	// Open existing app/db as guest.
-	if _, err := sbutil.CreateOrOpenDB(ctxGuest, sbName, sbmodel.MasterCollections); err != nil {
-		t.Errorf("CreateOrOpenDB should have succeeded, got error: %v", err)
-	}
-	// Destroy db (but not app) to simulate interrupted creation.
-	if err := dbOwner.Destroy(ctxOwner); err != nil {
-		t.Errorf("dbOwner.Destroy should have succeeded, got error: %v", err)
-	}
-	// Try to open app/db (create db) as guest, fail with ErrNoAccess.
-	if _, err := sbutil.CreateOrOpenDB(ctxGuest, sbName, sbmodel.MasterCollections); verror.ErrorID(err) != verror.ErrNoAccess.ID {
-		t.Errorf("CreateOrOpenDB should have failed with ErrNoAccess, got error: %v", err)
-	}
-	// Open app/db (recreate db) as owner.
-	dbOwner, err = sbutil.CreateOrOpenDB(ctxOwner, sbName, sbmodel.MasterCollections)
-	if err != nil {
-		t.Fatalf("CreateOrOpenDB should have succeeded, got error: %v", err)
-	}
-	// Open recreated app/db as guest.
+	// Open db as guest.
 	dbGuest, err := sbutil.CreateOrOpenDB(ctxGuest, sbName, sbmodel.MasterCollections)
 	if err != nil {
 		t.Errorf("CreateOrOpenDB should have succeeded, got error: %v", err)
@@ -63,10 +46,10 @@
 		t.Errorf("Unexpected database permissions: got %v, want %v", got, want)
 	}
 	// Check that all collections exist.
-	for _, ts := range sbmodel.MasterCollections {
-		tb := dbGuest.Collection(ts.Prototype.Collection())
-		if exists, err := tb.Exists(ctxGuest); err != nil || !exists {
-			t.Errorf("Expected collection %s to exist, got: %v (error: %v)", tb.Name(), exists, err)
+	for _, cs := range sbmodel.MasterCollections {
+		c := dbGuest.Collection(cs.Prototype.Collection())
+		if exists, err := c.Exists(ctxGuest); err != nil || !exists {
+			t.Errorf("Expected collection %s to exist, got: %v (error: %v)", c.Name(), exists, err)
 		}
 	}
 }
@@ -75,7 +58,7 @@
 	_, ctxOwner, sbName, _, cleanup := sbtu.SetupOrDieCustom("one", "one:sb", nil)
 	defer cleanup()
 
-	// Open app/db (create both) as owner.
+	// Open (create) db as owner.
 	dbOwner, err := sbutil.CreateOrOpenDB(ctxOwner, sbName, sbmodel.MeasuredCollections)
 	if err != nil {
 		t.Fatalf("CreateOrOpenDB should have succeeded, got error: %v", err)
@@ -89,19 +72,19 @@
 		Add(security.BlessingPattern("root:one"), string(access.Admin), string(access.Read))
 
 	// Check that all collections have correct permissions (full or readonly).
-	for _, ts := range sbmodel.MeasuredCollections {
-		tb := dbOwner.Collection(ts.Prototype.Collection())
-		if exists, err := tb.Exists(ctxOwner); err != nil || !exists {
-			t.Errorf("Expected collection %s to exist, got: %v (error: %v)", tb.Name(), exists, err)
+	for _, cs := range sbmodel.MeasuredCollections {
+		c := dbOwner.Collection(cs.Prototype.Collection())
+		if exists, err := c.Exists(ctxOwner); err != nil || !exists {
+			t.Errorf("Expected collection %s to exist, got: %v (error: %v)", c.Name(), exists, err)
 		}
 		want := expectPermsFull
-		if ts.ReadOnly {
+		if cs.ReadOnly {
 			want = expectPermsReadOnly
 		}
-		if got, err := tb.GetPermissions(ctxOwner); err != nil {
+		if got, err := c.GetPermissions(ctxOwner); err != nil {
 			t.Errorf("GetPermissions should have succeeded, got error: %v", err)
 		} else if got, want = got.Normalize(), want.Normalize(); !reflect.DeepEqual(got, want) {
-			t.Errorf("Unexpected collection %s permissions: got %v, want %v", tb.Name(), got, want)
+			t.Errorf("Unexpected collection %s permissions: got %v, want %v", c.Name(), got, want)
 		}
 	}
 }
