diff --git a/services/syncbase/bridge/cgo/impl.go b/services/syncbase/bridge/cgo/impl.go
index ce14e19..3eda95f 100644
--- a/services/syncbase/bridge/cgo/impl.go
+++ b/services/syncbase/bridge/cgo/impl.go
@@ -44,6 +44,7 @@
 	"v.io/v23/syncbase/util"
 	"v.io/v23/verror"
 	"v.io/v23/vom"
+	"v.io/x/lib/vlog"
 	_ "v.io/x/ref/runtime/factories/roaming"
 	"v.io/x/ref/services/syncbase/bridge"
 	"v.io/x/ref/services/syncbase/bridge/cgo/ptrmap"
@@ -98,32 +99,20 @@
 
 var globalPtrMap = ptrmap.New()
 
-// TODO(razvanm): Replace the function arguments with an options struct.
-//export v23_syncbase_Init
-func v23_syncbase_Init(cClientUnderstandVom C.v23_syncbase_Bool, cRootDir C.v23_syncbase_String, cTestLogin C.v23_syncbase_Bool) {
-	if b != nil {
-		panic("v23_syncbase_Init called again before a v23_syncbase_Shutdown")
+type (
+	initOpts struct {
+		clientUnderstandsVOM bool
+		rootDir              string
+		testLogin            bool
+		verboseLevel         int
 	}
-	// Strip all flags beyond the binary name; otherwise, v23.Init will fail when it encounters
-	// unknown flags passed by Xcode, e.g. NSTreatUnknownArgumentsAsOpen.
-	os.Args = os.Args[:1]
-	ctx, shutdown := v23.Init()
-	b = &bridge.Bridge{Ctx: ctx, Shutdown: shutdown}
-	rootDir = cRootDir.extract()
-	clientUnderstandsVOM = cClientUnderstandVom.extract()
-	testLogin = cTestLogin.extract()
-	var cErr C.v23_syncbase_VError
-	if isLoggedIn() {
-		v23_syncbase_Serve(&cErr)
-	}
-	neighborhoodAdStatus = newAdStatus()
-}
 
-type adStatus struct {
-	isAdvertising bool
-	cancel        context.CancelFunc
-	done          <-chan struct{}
-}
+	adStatus struct {
+		isAdvertising bool
+		cancel        context.CancelFunc
+		done          <-chan struct{}
+	}
+)
 
 func newAdStatus() *adStatus {
 	return &adStatus{}
@@ -143,6 +132,34 @@
 		a.cancel = nil
 		a.done = nil
 	}
+
+}
+
+//export v23_syncbase_Init
+func v23_syncbase_Init(cOpts C.v23_syncbase_InitOpts) {
+	if b != nil {
+		panic("v23_syncbase_Init called again before a v23_syncbase_Shutdown")
+	}
+	opts := cOpts.extract()
+
+	// Strip all flags beyond the binary name; otherwise, v23.Init will fail when it encounters
+	// unknown flags passed by Xcode, e.g. NSTreatUnknownArgumentsAsOpen.
+	os.Args = os.Args[:1]
+	ctx, shutdown := v23.Init()
+	if opts.verboseLevel > 0 {
+		vlog.Log.Configure(vlog.OverridePriorConfiguration(true), vlog.Level(opts.verboseLevel))
+		vlog.Info("Verbose logging turned on")
+	}
+	b = &bridge.Bridge{Ctx: ctx, Shutdown: shutdown}
+	rootDir = opts.rootDir
+	clientUnderstandsVOM = opts.clientUnderstandsVOM
+	testLogin = opts.testLogin
+	if isLoggedIn() {
+		// This cErr will always be nil since we just checked isLoggedIn.
+		var cErr C.v23_syncbase_VError
+		v23_syncbase_Serve(&cErr)
+	}
+	neighborhoodAdStatus = newAdStatus()
 }
 
 //export v23_syncbase_Serve
@@ -185,7 +202,7 @@
 }
 
 //export v23_syncbase_IsLoggedIn
-func v23_syncbase_IsLoggedIn(cIsLoggedIn *C.v23_syncbase_Bool) {
+func v23_syncbase_IsLoggedIn(cIsLoggedIn *C.bool) {
 	cIsLoggedIn.init(isLoggedIn())
 }
 
@@ -337,7 +354,7 @@
 }
 
 //export v23_syncbase_NeighborhoodIsAdvertising
-func v23_syncbase_NeighborhoodIsAdvertising(cBool *C.v23_syncbase_Bool) {
+func v23_syncbase_NeighborhoodIsAdvertising(cBool *C.bool) {
 	cBool.init(neighborhoodAdStatus.isAdvertising)
 }
 
@@ -407,7 +424,7 @@
 }
 
 //export v23_syncbase_DbExists
-func v23_syncbase_DbExists(cName C.v23_syncbase_String, cExists *C.v23_syncbase_Bool, cErr *C.v23_syncbase_VError) {
+func v23_syncbase_DbExists(cName C.v23_syncbase_String, cExists *C.bool, cErr *C.v23_syncbase_VError) {
 	name := cName.extract()
 	ctx, call := b.NewCtxCall(name, bridge.MethodDesc(wire.DatabaseDesc, "Exists"))
 	stub, err := b.GetDb(ctx, call, name)
@@ -819,7 +836,7 @@
 }
 
 //export v23_syncbase_CollectionExists
-func v23_syncbase_CollectionExists(cName, cBatchHandle C.v23_syncbase_String, cExists *C.v23_syncbase_Bool, cErr *C.v23_syncbase_VError) {
+func v23_syncbase_CollectionExists(cName, cBatchHandle C.v23_syncbase_String, cExists *C.bool, cErr *C.v23_syncbase_VError) {
 	name := cName.extract()
 	batchHandle := wire.BatchHandle(cBatchHandle.extract())
 	ctx, call := b.NewCtxCall(name, bridge.MethodDesc(wire.CollectionDesc, "Exists"))
@@ -952,7 +969,7 @@
 // Row
 
 //export v23_syncbase_RowExists
-func v23_syncbase_RowExists(cName, cBatchHandle C.v23_syncbase_String, cExists *C.v23_syncbase_Bool, cErr *C.v23_syncbase_VError) {
+func v23_syncbase_RowExists(cName, cBatchHandle C.v23_syncbase_String, cExists *C.bool, cErr *C.v23_syncbase_VError) {
 	name := cName.extract()
 	batchHandle := wire.BatchHandle(cBatchHandle.extract())
 	ctx, call := b.NewCtxCall(name, bridge.MethodDesc(wire.RowDesc, "Exists"))
diff --git a/services/syncbase/bridge/cgo/jni.go b/services/syncbase/bridge/cgo/jni.go
index 9f3baec..c60ffc2 100644
--- a/services/syncbase/bridge/cgo/jni.go
+++ b/services/syncbase/bridge/cgo/jni.go
@@ -123,7 +123,12 @@
 //export Java_io_v_syncbase_internal_Service_Init
 func Java_io_v_syncbase_internal_Service_Init(env *C.JNIEnv, cls C.jclass, initRoot C.jstring, testLogin C.jboolean) {
 	cInitRoot := newVStringFromJava(env, initRoot)
-	v23_syncbase_Init(C.v23_syncbase_Bool(1), cInitRoot, C.v23_syncbase_Bool(testLogin))
+	v23_syncbase_Init(initOpts{
+		clientUnderstandsVOM: true,
+		rootDir:              cInitRoot.extract(),
+		testLogin:            bool(testLogin),
+		verboseLevel:         0,
+	})
 }
 
 //export Java_io_v_syncbase_internal_Service_Serve
diff --git a/services/syncbase/bridge/cgo/lib.h b/services/syncbase/bridge/cgo/lib.h
index 505d180..d03b864 100644
--- a/services/syncbase/bridge/cgo/lib.h
+++ b/services/syncbase/bridge/cgo/lib.h
@@ -11,8 +11,6 @@
 ////////////////////////////////////////
 // Generic types
 
-typedef uint8_t v23_syncbase_Bool;
-
 // string
 typedef struct {
   char* p;
@@ -51,17 +49,13 @@
 ////////////////////////////////////////
 // Syncbase-specific types
 
-// syncbase.Id
-typedef struct {
-  v23_syncbase_String blessing;
-  v23_syncbase_String name;
-} v23_syncbase_Id;
 
-// []syncbase.Id
+// syncbase.discovery.AppPeer
 typedef struct {
-  v23_syncbase_Id* p;
-  int n;
-} v23_syncbase_Ids;
+  v23_syncbase_String appName;
+  v23_syncbase_String blessings;
+  bool isLost;
+} v23_syncbase_AppPeer;
 
 // syncbase.BatchOptions
 typedef struct {
@@ -95,17 +89,32 @@
   v23_syncbase_EntityTypeRow = 2
 } v23_syncbase_EntityType;
 
-// syncbase.WatchChange
+// syncbase.Id
 typedef struct {
-  v23_syncbase_EntityType entityType;
-  v23_syncbase_Id collection;
-  v23_syncbase_String row;
-  v23_syncbase_ChangeType changeType;
-  v23_syncbase_Bytes value;
-  v23_syncbase_Bytes resumeMarker;
-  bool fromSync;
-  bool continued;
-} v23_syncbase_WatchChange;
+  v23_syncbase_String blessing;
+  v23_syncbase_String name;
+} v23_syncbase_Id;
+
+// []syncbase.Id
+typedef struct {
+  v23_syncbase_Id* p;
+  int n;
+} v23_syncbase_Ids;
+
+// cgo.InitOpts
+typedef struct {
+    bool clientUnderstandsVOM;
+    v23_syncbase_String rootDir;
+    bool testLogin;
+    int verboseLevel;
+} v23_syncbase_InitOpts;
+
+// syncbase.discovery.Invite
+typedef struct {
+  v23_syncbase_Id syncgroup;
+  v23_syncbase_Strings addresses;
+  v23_syncbase_Strings blessingNames;
+} v23_syncbase_Invite;
 
 // syncbase.KeyValue
 typedef struct {
@@ -136,19 +145,17 @@
   int n;
 } v23_syncbase_SyncgroupMemberInfoMap;
 
-// syncbase.discovery.Invite
+// syncbase.WatchChange
 typedef struct {
-  v23_syncbase_Id syncgroup;
-  v23_syncbase_Strings addresses;
-  v23_syncbase_Strings blessingNames;
-} v23_syncbase_Invite;
-
-// syncbase.discovery.AppPeer
-typedef struct {
-  v23_syncbase_String appName;
-  v23_syncbase_String blessings;
-  bool isLost;
-} v23_syncbase_AppPeer;
+  v23_syncbase_EntityType entityType;
+  v23_syncbase_Id collection;
+  v23_syncbase_String row;
+  v23_syncbase_ChangeType changeType;
+  v23_syncbase_Bytes value;
+  v23_syncbase_Bytes resumeMarker;
+  bool fromSync;
+  bool continued;
+} v23_syncbase_WatchChange;
 
 ////////////////////////////////////////
 // Functions
diff --git a/services/syncbase/bridge/cgo/types.go b/services/syncbase/bridge/cgo/types.go
index 902bbd8..3ca05a1 100644
--- a/services/syncbase/bridge/cgo/types.go
+++ b/services/syncbase/bridge/cgo/types.go
@@ -28,6 +28,26 @@
 import "C"
 
 ////////////////////////////////////////////////////////////
+// C.bool
+
+func (x *C.bool) init(b bool) {
+	*x = C.bool(b)
+}
+
+func (x *C.bool) extract() bool {
+	return bool(*x)
+}
+
+////////////////////////////////////////////////////////////
+// C.v23_syncbase_AppPeer
+
+func (x *C.v23_syncbase_AppPeer) init(peer discovery.AppPeer) {
+	x.appName.init(peer.AppName)
+	x.blessings.init(peer.Blessings)
+	x.isLost = C.bool(peer.Lost)
+}
+
+////////////////////////////////////////////////////////////
 // C.v23_syncbase_BatchOptions
 
 func (x *C.v23_syncbase_BatchOptions) init(opts wire.BatchOptions) {
@@ -43,24 +63,6 @@
 }
 
 ////////////////////////////////////////////////////////////
-// C.v23_syncbase_Bool
-
-func (x *C.v23_syncbase_Bool) init(b bool) {
-	if b == false {
-		*x = 0
-	} else {
-		*x = 1
-	}
-}
-
-func (x *C.v23_syncbase_Bool) extract() bool {
-	if *x == 0 {
-		return false
-	}
-	return true
-}
-
-////////////////////////////////////////////////////////////
 // C.v23_syncbase_Bytes
 
 func init() {
@@ -208,6 +210,35 @@
 }
 
 ////////////////////////////////////////////////////////////
+// C.v23_syncbase_Invite
+
+func (x *C.v23_syncbase_Invite) init(invite discovery.Invite) {
+	x.syncgroup.init(invite.Syncgroup)
+	x.addresses.init(invite.Addresses)
+	x.blessingNames.init(invite.BlessingNames)
+}
+
+////////////////////////////////////////////////////////////
+// C.v23_syncbase_InitOpts
+
+func (x *C.v23_syncbase_InitOpts) init(opts initOpts) {
+	x.clientUnderstandsVOM.init(opts.clientUnderstandsVOM)
+	x.rootDir.init(opts.rootDir)
+	x.testLogin.init(opts.testLogin)
+	(*x).verboseLevel = C.int(opts.verboseLevel)
+}
+
+func (x *C.v23_syncbase_InitOpts) extract() initOpts {
+	return initOpts{
+		clientUnderstandsVOM: bool(x.clientUnderstandsVOM),
+		rootDir:              x.rootDir.extract(),
+		testLogin:            bool(x.testLogin),
+		verboseLevel:         int(x.verboseLevel),
+	}
+
+}
+
+////////////////////////////////////////////////////////////
 // C.v23_syncbase_KeyValue
 
 func (x *C.v23_syncbase_KeyValue) init(key string, value []byte) {
@@ -445,21 +476,3 @@
 	x.continued = C.bool(wc.Continued)
 	return nil
 }
-
-////////////////////////////////////////////////////////////
-// C.v23_syncbase_Invite
-
-func (x *C.v23_syncbase_Invite) init(invite discovery.Invite) {
-	x.syncgroup.init(invite.Syncgroup)
-	x.addresses.init(invite.Addresses)
-	x.blessingNames.init(invite.BlessingNames)
-}
-
-////////////////////////////////////////////////////////////
-// C.v23_syncbase_AppPeer
-
-func (x *C.v23_syncbase_AppPeer) init(peer discovery.AppPeer) {
-	x.appName.init(peer.AppName)
-	x.blessings.init(peer.Blessings)
-	x.isLost = C.bool(peer.Lost)
-}
