diff --git a/cmd/gclogs/doc.go b/cmd/gclogs/doc.go
index b46e899..eddfe2f 100644
--- a/cmd/gclogs/doc.go
+++ b/cmd/gclogs/doc.go
@@ -74,33 +74,6 @@
    If true, dump all stored traces on runtime shutdown.
  -v23.vtrace.sample-rate=0
    Rate (from 0.0 to 1.0) to sample vtrace traces.
- -vanadium.i18n_catalogue=
-   18n catalogue files to load, comma separated
- -veyron.acl.file=map[]
-   specify an acl file as <name>:<aclfile>
- -veyron.acl.literal=
-   explicitly specify the runtime acl as a JSON-encoded access.Permissions.
-   Overrides all --veyron.acl.file flags.
- -veyron.credentials=
-   directory to use for storing security credentials
- -veyron.namespace.root=[/ns.dev.v.io:8101]
-   local namespace root; can be repeated to provided multiple roots
- -veyron.proxy=
-   object name of proxy service to use to export services across network
-   boundaries
- -veyron.tcp.address=
-   address to listen on
- -veyron.tcp.protocol=wsh
-   protocol to listen with
- -veyron.vtrace.cache_size=1024
-   The number of vtrace traces to store in memory.
- -veyron.vtrace.collect_regexp=
-   Spans and annotations that match this regular expression will trigger trace
-   collection.
- -veyron.vtrace.dump_on_shutdown=true
-   If true, dump all stored traces on runtime shutdown.
- -veyron.vtrace.sample_rate=0
-   Rate (from 0.0 to 1.0) to sample vtrace traces.
  -vmodule=
    comma-separated list of pattern=N settings for file-filtered logging
 */
diff --git a/cmd/gclogs/main.go b/cmd/gclogs/main.go
index b8e066f..9c62ff3 100644
--- a/cmd/gclogs/main.go
+++ b/cmd/gclogs/main.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go . -help
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go . -help
 
 package main
 
diff --git a/cmd/mgmt/dummy.go b/cmd/mgmt/dummy.go
deleted file mode 100644
index 9476b6f..0000000
--- a/cmd/mgmt/dummy.go
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package mgmt
diff --git a/cmd/mounttable/doc.go b/cmd/mounttable/doc.go
index 64fc04b..51b8ac1 100644
--- a/cmd/mounttable/doc.go
+++ b/cmd/mounttable/doc.go
@@ -56,28 +56,6 @@
    If true, dump all stored traces on runtime shutdown.
  -v23.vtrace.sample-rate=0
    Rate (from 0.0 to 1.0) to sample vtrace traces.
- -vanadium.i18n_catalogue=
-   18n catalogue files to load, comma separated
- -veyron.credentials=
-   directory to use for storing security credentials
- -veyron.namespace.root=[/ns.dev.v.io:8101]
-   local namespace root; can be repeated to provided multiple roots
- -veyron.proxy=
-   object name of proxy service to use to export services across network
-   boundaries
- -veyron.tcp.address=
-   address to listen on
- -veyron.tcp.protocol=wsh
-   protocol to listen with
- -veyron.vtrace.cache_size=1024
-   The number of vtrace traces to store in memory.
- -veyron.vtrace.collect_regexp=
-   Spans and annotations that match this regular expression will trigger trace
-   collection.
- -veyron.vtrace.dump_on_shutdown=true
-   If true, dump all stored traces on runtime shutdown.
- -veyron.vtrace.sample_rate=0
-   Rate (from 0.0 to 1.0) to sample vtrace traces.
  -vmodule=
    comma-separated list of pattern=N settings for file-filtered logging
 
diff --git a/cmd/mounttable/main.go b/cmd/mounttable/main.go
index 3af5487..e33dc99 100644
--- a/cmd/mounttable/main.go
+++ b/cmd/mounttable/main.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
 
 package main
 
diff --git a/cmd/namespace/doc.go b/cmd/namespace/doc.go
index c87d044..729d6c4 100644
--- a/cmd/namespace/doc.go
+++ b/cmd/namespace/doc.go
@@ -62,28 +62,6 @@
    If true, dump all stored traces on runtime shutdown.
  -v23.vtrace.sample-rate=0
    Rate (from 0.0 to 1.0) to sample vtrace traces.
- -vanadium.i18n_catalogue=
-   18n catalogue files to load, comma separated
- -veyron.credentials=
-   directory to use for storing security credentials
- -veyron.namespace.root=[/ns.dev.v.io:8101]
-   local namespace root; can be repeated to provided multiple roots
- -veyron.proxy=
-   object name of proxy service to use to export services across network
-   boundaries
- -veyron.tcp.address=
-   address to listen on
- -veyron.tcp.protocol=wsh
-   protocol to listen with
- -veyron.vtrace.cache_size=1024
-   The number of vtrace traces to store in memory.
- -veyron.vtrace.collect_regexp=
-   Spans and annotations that match this regular expression will trigger trace
-   collection.
- -veyron.vtrace.dump_on_shutdown=true
-   If true, dump all stored traces on runtime shutdown.
- -veyron.vtrace.sample_rate=0
-   Rate (from 0.0 to 1.0) to sample vtrace traces.
  -vmodule=
    comma-separated list of pattern=N settings for file-filtered logging
 
diff --git a/cmd/namespace/main.go b/cmd/namespace/main.go
index 3af5487..e33dc99 100644
--- a/cmd/namespace/main.go
+++ b/cmd/namespace/main.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
 
 package main
 
diff --git a/cmd/principal/doc.go b/cmd/principal/doc.go
index 65c1932..5a534c3 100644
--- a/cmd/principal/doc.go
+++ b/cmd/principal/doc.go
@@ -74,33 +74,6 @@
    If true, dump all stored traces on runtime shutdown.
  -v23.vtrace.sample-rate=0
    Rate (from 0.0 to 1.0) to sample vtrace traces.
- -vanadium.i18n_catalogue=
-   18n catalogue files to load, comma separated
- -veyron.acl.file=map[]
-   specify an acl file as <name>:<aclfile>
- -veyron.acl.literal=
-   explicitly specify the runtime acl as a JSON-encoded access.Permissions.
-   Overrides all --veyron.acl.file flags.
- -veyron.credentials=
-   directory to use for storing security credentials
- -veyron.namespace.root=[/ns.dev.v.io:8101]
-   local namespace root; can be repeated to provided multiple roots
- -veyron.proxy=
-   object name of proxy service to use to export services across network
-   boundaries
- -veyron.tcp.address=
-   address to listen on
- -veyron.tcp.protocol=wsh
-   protocol to listen with
- -veyron.vtrace.cache_size=1024
-   The number of vtrace traces to store in memory.
- -veyron.vtrace.collect_regexp=
-   Spans and annotations that match this regular expression will trigger trace
-   collection.
- -veyron.vtrace.dump_on_shutdown=true
-   If true, dump all stored traces on runtime shutdown.
- -veyron.vtrace.sample_rate=0
-   Rate (from 0.0 to 1.0) to sample vtrace traces.
  -vmodule=
    comma-separated list of pattern=N settings for file-filtered logging
 
diff --git a/cmd/principal/main.go b/cmd/principal/main.go
index 67fb4e1..a5b2305 100644
--- a/cmd/principal/main.go
+++ b/cmd/principal/main.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
 
 package main
 
@@ -27,8 +27,8 @@
 	"v.io/v23/security"
 	"v.io/v23/vom"
 	"v.io/x/lib/cmdline"
+	vsecurity "v.io/x/ref/lib/security"
 	_ "v.io/x/ref/profiles/static"
-	vsecurity "v.io/x/ref/security"
 )
 
 var (
@@ -262,7 +262,7 @@
 			// Send blessings to a "server" started by a "recvblessings" command, either
 			// with the --remote-arg-file flag, or with --remote-key and --remote-token flags.
 			if len(remoteKey) > 0 {
-				granter := &granter{p, with, extension, caveats, remoteKey}
+				granter := &granter{with, extension, caveats, remoteKey}
 				return blessOverNetwork(ctx, tobless, granter, remoteToken)
 			}
 
@@ -1017,14 +1017,16 @@
 func (allowAnyone) Authorize(*context.T) error { return nil }
 
 type granter struct {
-	p         security.Principal
 	with      security.Blessings
 	extension string
 	caveats   []security.Caveat
 	serverKey string
 }
 
-func (g *granter) Grant(server security.Blessings) (security.Blessings, error) {
+func (g *granter) Grant(ctx *context.T) (security.Blessings, error) {
+	call := security.GetCall(ctx)
+	server := call.RemoteBlessings()
+	p := call.LocalPrincipal()
 	if got := fmt.Sprintf("%v", server.PublicKey()); got != g.serverKey {
 		// If the granter returns an error, the RPC framework should
 		// abort the RPC before sending the request to the server.
@@ -1032,7 +1034,7 @@
 		// imposter server.
 		return security.Blessings{}, fmt.Errorf("key mismatch: Remote end has public key %v, want %v", got, g.serverKey)
 	}
-	return g.p.Bless(server.PublicKey(), g.with, g.extension, g.caveats[0], g.caveats[1:]...)
+	return p.Bless(server.PublicKey(), g.with, g.extension, g.caveats[0], g.caveats[1:]...)
 }
 func (*granter) RPCCallOpt() {}
 
diff --git a/cmd/principal/principal_v23_test.go b/cmd/principal/principal_v23_test.go
index 655fec8..952bec0 100644
--- a/cmd/principal/principal_v23_test.go
+++ b/cmd/principal/principal_v23_test.go
@@ -382,7 +382,7 @@
 func V23TestForkWithoutVDLPATH(t *v23tests.T) {
 	var (
 		parent = t.NewTempDir()
-		bin    = t.BuildGoPkg("v.io/x/ref/cmd/principal").WithEnv("VANADIUM_ROOT=''", "VDLPATH=''")
+		bin    = t.BuildGoPkg("v.io/x/ref/cmd/principal").WithEnv("V23_ROOT=''", "VDLPATH=''")
 	)
 	if err := bin.Start("create", parent, "parent").Wait(os.Stdout, os.Stderr); err != nil {
 		t.Fatalf("create %q failed: %v", parent, err)
@@ -536,7 +536,7 @@
 	bin.Start("create", aliceDir, "alice").WaitOrDie(os.Stdout, os.Stderr)
 	// The second argument and the "want" line below were generated by:
 	//   import "encoding/base64"
-	//   import "v.io/x/ref/security"
+	//   import "v.io/x/ref/lib/security"
 	//
 	//    key, _, _ := security.NewPrincipalKey()
 	//    der, _ := key.MarshalBinary()
diff --git a/cmd/servicerunner/main.go b/cmd/servicerunner/main.go
index 3df6a21..fb6abaa 100644
--- a/cmd/servicerunner/main.go
+++ b/cmd/servicerunner/main.go
@@ -20,8 +20,8 @@
 	"v.io/x/ref/envvar"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/profiles"
-	identityd "v.io/x/ref/services/identity/modules"
-	mounttable "v.io/x/ref/services/mounttable/lib"
+	"v.io/x/ref/services/identity/identitylib"
+	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test/expect"
 	"v.io/x/ref/test/modules"
 )
@@ -45,9 +45,9 @@
 	if err != nil {
 		return fmt.Errorf("root failed: %v", err)
 	}
-	mt, err := mounttable.NewMountTableDispatcher("")
+	mt, err := mounttablelib.NewMountTableDispatcher("")
 	if err != nil {
-		return fmt.Errorf("mounttable.NewMountTableDispatcher failed: %s", err)
+		return fmt.Errorf("mounttablelib.NewMountTableDispatcher failed: %s", err)
 	}
 	eps, err := server.Listen(lspec)
 	if err != nil {
@@ -123,11 +123,11 @@
 	defer proxyShutdown()
 	vars["PROXY_NAME"] = proxyEndpoint.Name()
 
-	h, err = sh.Start(WSPRCommand, nil, "--v23.tcp.protocol=ws", "--v23.tcp.address=127.0.0.1:0", "--v23.proxy=test/proxy", "--identd=test/identd")
+	h, err = sh.Start(WSPRDCommand, nil, "--v23.tcp.protocol=ws", "--v23.tcp.address=127.0.0.1:0", "--v23.proxy=test/proxy", "--identd=test/identd")
 	panicOnError(err)
 	panicOnError(updateVars(h, vars, "WSPR_ADDR"))
 
-	h, err = sh.Start(identityd.TestIdentitydCommand, nil, "--v23.tcp.protocol=ws", "--v23.tcp.address=127.0.0.1:0", "--v23.proxy=test/proxy", "--http-addr=localhost:0")
+	h, err = sh.Start(identitylib.TestIdentitydCommand, nil, "--v23.tcp.protocol=ws", "--v23.tcp.address=127.0.0.1:0", "--v23.proxy=test/proxy", "--http-addr=localhost:0")
 	panicOnError(err)
 	panicOnError(updateVars(h, vars, "TEST_IDENTITYD_NAME", "TEST_IDENTITYD_HTTP_ADDR"))
 
diff --git a/cmd/servicerunner/servicerunner b/cmd/servicerunner/servicerunner
deleted file mode 100755
index 938287a..0000000
--- a/cmd/servicerunner/servicerunner
+++ /dev/null
Binary files differ
diff --git a/cmd/servicerunner/wspr.go b/cmd/servicerunner/wspr.go
index 9bc3acb..a972136 100644
--- a/cmd/servicerunner/wspr.go
+++ b/cmd/servicerunner/wspr.go
@@ -11,7 +11,7 @@
 
 	"v.io/v23"
 
-	"v.io/x/ref/services/wsprd/wspr"
+	"v.io/x/ref/services/wspr/wsprlib"
 	"v.io/x/ref/test/modules"
 )
 
@@ -20,10 +20,10 @@
 	identd *string = flag.CommandLine.String("identd", "", "identd server name. Must be set.")
 )
 
-const WSPRCommand = "wsprd"
+const WSPRDCommand = "wsprd"
 
 func init() {
-	modules.RegisterChild(WSPRCommand, modules.Usage(flag.CommandLine), startWSPR)
+	modules.RegisterChild(WSPRDCommand, modules.Usage(flag.CommandLine), startWSPR)
 }
 
 func startWSPR(stdin io.Reader, stdout, stderr io.Writer, env map[string]string, args ...string) error {
@@ -31,7 +31,7 @@
 	defer shutdown()
 
 	l := v23.GetListenSpec(ctx)
-	proxy := wspr.NewWSPR(ctx, *port, &l, *identd, nil)
+	proxy := wsprlib.NewWSPR(ctx, *port, &l, *identd, nil)
 	defer proxy.Shutdown()
 
 	addr := proxy.Listen()
diff --git a/cmd/uniqueid/doc.go b/cmd/uniqueid/doc.go
index 6c4c7a5..1b6e4df 100644
--- a/cmd/uniqueid/doc.go
+++ b/cmd/uniqueid/doc.go
@@ -60,33 +60,6 @@
    If true, dump all stored traces on runtime shutdown.
  -v23.vtrace.sample-rate=0
    Rate (from 0.0 to 1.0) to sample vtrace traces.
- -vanadium.i18n_catalogue=
-   18n catalogue files to load, comma separated
- -veyron.acl.file=map[]
-   specify an acl file as <name>:<aclfile>
- -veyron.acl.literal=
-   explicitly specify the runtime acl as a JSON-encoded access.Permissions.
-   Overrides all --veyron.acl.file flags.
- -veyron.credentials=
-   directory to use for storing security credentials
- -veyron.namespace.root=[/ns.dev.v.io:8101]
-   local namespace root; can be repeated to provided multiple roots
- -veyron.proxy=
-   object name of proxy service to use to export services across network
-   boundaries
- -veyron.tcp.address=
-   address to listen on
- -veyron.tcp.protocol=wsh
-   protocol to listen with
- -veyron.vtrace.cache_size=1024
-   The number of vtrace traces to store in memory.
- -veyron.vtrace.collect_regexp=
-   Spans and annotations that match this regular expression will trigger trace
-   collection.
- -veyron.vtrace.dump_on_shutdown=true
-   If true, dump all stored traces on runtime shutdown.
- -veyron.vtrace.sample_rate=0
-   Rate (from 0.0 to 1.0) to sample vtrace traces.
  -vmodule=
    comma-separated list of pattern=N settings for file-filtered logging
 
diff --git a/cmd/uniqueid/main.go b/cmd/uniqueid/main.go
index 3f8a16a..e072764 100644
--- a/cmd/uniqueid/main.go
+++ b/cmd/uniqueid/main.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
 
 package main
 
diff --git a/cmd/mgmt/vbash b/cmd/vbash
similarity index 95%
rename from cmd/mgmt/vbash
rename to cmd/vbash
index e2c7bbf..33029ac 100755
--- a/cmd/mgmt/vbash
+++ b/cmd/vbash
@@ -32,7 +32,7 @@
 
 set -e
 
-readonly BIN_PACKAGES=(v.io/x/ref/cmd/principal v.io/x/ref/security/agent/agentd)
+readonly BIN_PACKAGES=(v.io/x/ref/cmd/principal v.io/x/ref/services/agent/agentd)
 BIN_NAMES=(${BIN_PACKAGES[@]})
 for (( i=0; i<${#BIN_PACKAGES[@]}; i++ )); do
   BIN_NAMES[$i]=$(basename "${BIN_PACKAGES[$i]}")
@@ -69,7 +69,7 @@
 # Globals:
 #   BIN_NAMES
 #   BIN_PACKAGES
-#   VANADIUM_ROOT
+#   V23_ROOT
 # Arguments:
 #   destination for binaries
 #   source of binaries
@@ -88,11 +88,11 @@
   # If source is not specified, try to build latest version of the binaries and copy
   # them from the repository.
   if [[ -z "${BIN_SOURCE}" ]]; then
-    if [[ -z "${VANADIUM_ROOT}" ]]; then
-      echo 'WARNING: VANADIUM_ROOT is not specified, cannot build fresh binaries'
+    if [[ -z "${V23_ROOT}" ]]; then
+      echo 'WARNING: V23_ROOT is not specified, cannot build fresh binaries'
       return
     fi
-    local -r REPO_BIN_DIR="${VANADIUM_ROOT}/release/go/bin"
+    local -r REPO_BIN_DIR="${V23_ROOT}/release/go/bin"
     echo "Building and Fetching binaries:${bin_names_str} from build repository: ${REPO_BIN_DIR} ..."
     for package in "${BIN_PACKAGES[@]}"; do
        local bin_name=$(basename "${package}")
diff --git a/cmd/vdl/doc.go b/cmd/vdl/doc.go
index b580843..2b34150 100644
--- a/cmd/vdl/doc.go
+++ b/cmd/vdl/doc.go
@@ -267,8 +267,8 @@
 
 Setting VDLROOT is optional.
 
-If VDLROOT is empty, we try to construct it out of the VANADIUM_ROOT environment
-variable.  It is an error if both VDLROOT and VANADIUM_ROOT are empty.
+If VDLROOT is empty, we try to construct it out of the V23_ROOT environment
+variable.  It is an error if both VDLROOT and V23_ROOT are empty.
 
 Vdl Vdl.Config - help topic
 
diff --git a/cmd/vdl/main.go b/cmd/vdl/main.go
index 0defd24..fb695a3 100644
--- a/cmd/vdl/main.go
+++ b/cmd/vdl/main.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
 
 package main
 
@@ -145,8 +145,8 @@
 
 Setting VDLROOT is optional.
 
-If VDLROOT is empty, we try to construct it out of the VANADIUM_ROOT environment
-variable.  It is an error if both VDLROOT and VANADIUM_ROOT are empty.
+If VDLROOT is empty, we try to construct it out of the V23_ROOT environment
+variable.  It is an error if both VDLROOT and V23_ROOT are empty.
 `,
 }
 
diff --git a/cmd/vom/doc.go b/cmd/vom/doc.go
index bcc38a3..7c24a80 100644
--- a/cmd/vom/doc.go
+++ b/cmd/vom/doc.go
@@ -59,33 +59,6 @@
    If true, dump all stored traces on runtime shutdown.
  -v23.vtrace.sample-rate=0
    Rate (from 0.0 to 1.0) to sample vtrace traces.
- -vanadium.i18n_catalogue=
-   18n catalogue files to load, comma separated
- -veyron.acl.file=map[]
-   specify an acl file as <name>:<aclfile>
- -veyron.acl.literal=
-   explicitly specify the runtime acl as a JSON-encoded access.Permissions.
-   Overrides all --veyron.acl.file flags.
- -veyron.credentials=
-   directory to use for storing security credentials
- -veyron.namespace.root=[/ns.dev.v.io:8101]
-   local namespace root; can be repeated to provided multiple roots
- -veyron.proxy=
-   object name of proxy service to use to export services across network
-   boundaries
- -veyron.tcp.address=
-   address to listen on
- -veyron.tcp.protocol=wsh
-   protocol to listen with
- -veyron.vtrace.cache_size=1024
-   The number of vtrace traces to store in memory.
- -veyron.vtrace.collect_regexp=
-   Spans and annotations that match this regular expression will trigger trace
-   collection.
- -veyron.vtrace.dump_on_shutdown=true
-   If true, dump all stored traces on runtime shutdown.
- -veyron.vtrace.sample_rate=0
-   Rate (from 0.0 to 1.0) to sample vtrace traces.
  -vmodule=
    comma-separated list of pattern=N settings for file-filtered logging
 
diff --git a/cmd/vom/vom.go b/cmd/vom/vom.go
index 2e2d2ce..7a99a60 100644
--- a/cmd/vom/vom.go
+++ b/cmd/vom/vom.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
 
 package main
 
diff --git a/cmd/vomtestgen/doc.go b/cmd/vomtestgen/doc.go
index 3fc4f34..67e37b3 100644
--- a/cmd/vomtestgen/doc.go
+++ b/cmd/vomtestgen/doc.go
@@ -73,33 +73,6 @@
    If true, dump all stored traces on runtime shutdown.
  -v23.vtrace.sample-rate=0
    Rate (from 0.0 to 1.0) to sample vtrace traces.
- -vanadium.i18n_catalogue=
-   18n catalogue files to load, comma separated
- -veyron.acl.file=map[]
-   specify an acl file as <name>:<aclfile>
- -veyron.acl.literal=
-   explicitly specify the runtime acl as a JSON-encoded access.Permissions.
-   Overrides all --veyron.acl.file flags.
- -veyron.credentials=
-   directory to use for storing security credentials
- -veyron.namespace.root=[/ns.dev.v.io:8101]
-   local namespace root; can be repeated to provided multiple roots
- -veyron.proxy=
-   object name of proxy service to use to export services across network
-   boundaries
- -veyron.tcp.address=
-   address to listen on
- -veyron.tcp.protocol=wsh
-   protocol to listen with
- -veyron.vtrace.cache_size=1024
-   The number of vtrace traces to store in memory.
- -veyron.vtrace.collect_regexp=
-   Spans and annotations that match this regular expression will trigger trace
-   collection.
- -veyron.vtrace.dump_on_shutdown=true
-   If true, dump all stored traces on runtime shutdown.
- -veyron.vtrace.sample_rate=0
-   Rate (from 0.0 to 1.0) to sample vtrace traces.
  -vmodule=
    comma-separated list of pattern=N settings for file-filtered logging
 */
diff --git a/cmd/vomtestgen/main.go b/cmd/vomtestgen/main.go
index fa43955..6305464 100644
--- a/cmd/vomtestgen/main.go
+++ b/cmd/vomtestgen/main.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go . -help
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go . -help
 
 package main
 
diff --git a/cmd/vrpc/doc.go b/cmd/vrpc/doc.go
index fe7da61..caf236a 100644
--- a/cmd/vrpc/doc.go
+++ b/cmd/vrpc/doc.go
@@ -56,28 +56,6 @@
    If true, dump all stored traces on runtime shutdown.
  -v23.vtrace.sample-rate=0
    Rate (from 0.0 to 1.0) to sample vtrace traces.
- -vanadium.i18n_catalogue=
-   18n catalogue files to load, comma separated
- -veyron.credentials=
-   directory to use for storing security credentials
- -veyron.namespace.root=[/ns.dev.v.io:8101]
-   local namespace root; can be repeated to provided multiple roots
- -veyron.proxy=
-   object name of proxy service to use to export services across network
-   boundaries
- -veyron.tcp.address=
-   address to listen on
- -veyron.tcp.protocol=wsh
-   protocol to listen with
- -veyron.vtrace.cache_size=1024
-   The number of vtrace traces to store in memory.
- -veyron.vtrace.collect_regexp=
-   Spans and annotations that match this regular expression will trigger trace
-   collection.
- -veyron.vtrace.dump_on_shutdown=true
-   If true, dump all stored traces on runtime shutdown.
- -veyron.vtrace.sample_rate=0
-   Rate (from 0.0 to 1.0) to sample vtrace traces.
  -vmodule=
    comma-separated list of pattern=N settings for file-filtered logging
 
diff --git a/cmd/vrpc/vrpc.go b/cmd/vrpc/vrpc.go
index 3a1e2af..a00f86e 100644
--- a/cmd/vrpc/vrpc.go
+++ b/cmd/vrpc/vrpc.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
 
 package main
 
diff --git a/cmd/vrun/vrun.go b/cmd/vrun/vrun.go
index 4bdafd1..a61e720 100644
--- a/cmd/vrun/vrun.go
+++ b/cmd/vrun/vrun.go
@@ -11,24 +11,23 @@
 	"syscall"
 	"time"
 
-	"v.io/x/lib/cmdline"
-	"v.io/x/ref/envvar"
-	"v.io/x/ref/security/agent"
-	"v.io/x/ref/security/agent/keymgr"
-	isecurity "v.io/x/ref/services/security"
-
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/security"
+	"v.io/x/lib/cmdline"
 	"v.io/x/lib/vlog"
+	"v.io/x/ref/envvar"
+	"v.io/x/ref/services/agent"
+	"v.io/x/ref/services/agent/keymgr"
+	"v.io/x/ref/services/role"
 
 	_ "v.io/x/ref/profiles"
 )
 
 var (
 	durationFlag time.Duration
-	name         string
-	role         string
+	nameFlag     string
+	roleFlag     string
 )
 
 var cmdVrun = &cmdline.Command{
@@ -44,8 +43,8 @@
 	syscall.CloseOnExec(4)
 
 	cmdVrun.Flags.DurationVar(&durationFlag, "duration", 1*time.Hour, "Duration for the blessing.")
-	cmdVrun.Flags.StringVar(&name, "name", "", "Name to use for the blessing. Uses the command name if unset.")
-	cmdVrun.Flags.StringVar(&role, "role", "", "Role object from which to request the blessing. If set, the blessings from this role server are used and --name is ignored. If not set, the default blessings of the calling principal are extended with --name.")
+	cmdVrun.Flags.StringVar(&nameFlag, "name", "", "Name to use for the blessing. Uses the command name if unset.")
+	cmdVrun.Flags.StringVar(&roleFlag, "role", "", "Role object from which to request the blessing. If set, the blessings from this role server are used and --name is ignored. If not set, the default blessings of the calling principal are extended with --name.")
 
 	os.Exit(cmdVrun.Main())
 }
@@ -61,11 +60,11 @@
 	if err != nil {
 		return err
 	}
-	if len(role) == 0 {
-		if len(name) == 0 {
-			name = filepath.Base(args[0])
+	if len(roleFlag) == 0 {
+		if len(nameFlag) == 0 {
+			nameFlag = filepath.Base(args[0])
 		}
-		if err := bless(ctx, principal, name); err != nil {
+		if err := bless(ctx, principal, nameFlag); err != nil {
 			return err
 		}
 	} else {
@@ -73,14 +72,14 @@
 		// with RoleSuffix. This is to avoid accidentally granting role
 		// access to anything else that might have been blessed by the
 		// same principal.
-		if err := bless(ctx, principal, isecurity.RoleSuffix); err != nil {
+		if err := bless(ctx, principal, role.RoleSuffix); err != nil {
 			return err
 		}
 		rCtx, err := v23.SetPrincipal(ctx, principal)
 		if err != nil {
 			return err
 		}
-		if err := setupRoleBlessings(rCtx, role); err != nil {
+		if err := setupRoleBlessings(rCtx, roleFlag); err != nil {
 			return err
 		}
 	}
@@ -165,8 +164,8 @@
 	return principal, conn, nil
 }
 
-func setupRoleBlessings(ctx *context.T, role string) error {
-	b, err := isecurity.RoleClient(role).SeekBlessings(ctx)
+func setupRoleBlessings(ctx *context.T, roleStr string) error {
+	b, err := role.RoleClient(roleStr).SeekBlessings(ctx)
 	if err != nil {
 		return err
 	}
diff --git a/cmd/vrun/vrun_v23_test.go b/cmd/vrun/vrun_v23_test.go
index 0af9b25..b064186 100644
--- a/cmd/vrun/vrun_v23_test.go
+++ b/cmd/vrun/vrun_v23_test.go
@@ -11,9 +11,8 @@
 	"os"
 
 	"v.io/v23/security"
-
 	"v.io/x/ref/envvar"
-	vsecurity "v.io/x/ref/security"
+	vsecurity "v.io/x/ref/lib/security"
 	"v.io/x/ref/test/v23tests"
 )
 
@@ -22,7 +21,7 @@
 		clientAgent, serverAgent = createClientAndServerAgents(t)
 		tmpdir                   = t.NewTempDir()
 		vrun                     = t.BuildGoPkg("v.io/x/ref/cmd/vrun").Path()
-		pingpong                 = t.BuildGoPkg("v.io/x/ref/security/agent/pingpong").Path()
+		pingpong                 = t.BuildGoPkg("v.io/x/ref/services/agent/internal/pingpong").Path()
 		serverName               = serverAgent.Start(pingpong).ExpectVar("NAME")
 
 		tests = []struct {
@@ -62,7 +61,7 @@
 // The client will have a single blessing "pingpongd/client", blessed by the server.
 func createClientAndServerAgents(i *v23tests.T) (client, server *v23tests.Binary) {
 	var (
-		agentd    = i.BuildGoPkg("v.io/x/ref/security/agent/agentd")
+		agentd    = i.BuildGoPkg("v.io/x/ref/services/agent/agentd")
 		clientDir = i.NewTempDir()
 		serverDir = i.NewTempDir()
 	)
diff --git a/envvar/envvar.go b/envvar/envvar.go
index e53c3ba..6a755a7 100644
--- a/envvar/envvar.go
+++ b/envvar/envvar.go
@@ -18,7 +18,7 @@
 	// Typically only one of Credentials or AgentEndpoint will be set
 	// in a process. If both are set, then Credentials takes preference.
 	//
-	// See v.io/x/ref/security.CreatePersistentPrincipal.
+	// See v.io/x/ref/lib/security.CreatePersistentPrincipal.
 	Credentials = "V23_CREDENTIALS"
 
 	// NamespacePrefix is the prefix of all environment variables that define
@@ -62,10 +62,7 @@
 func ClearCredentials() error {
 	for _, v := range []string{
 		Credentials,
-		// Old environment variables, remove when
-		// https://github.com/veyron/release-issues/issues/1367
-		// is closed.
-		"VEYRON_CREDENTIALS",
+		// Remove when https://github.com/veyron/release-issues/issues/1597 is closed.
 		"VEYRON_AGENT_FD",
 	} {
 		if err := os.Unsetenv(v); err != nil {
@@ -74,33 +71,3 @@
 	}
 	return nil
 }
-
-// Helper function to ease the transition from VEYRON_CREDENTIALS to
-// V23_CREDENTIALS.  Remove before release (and after updating all binaries so
-// that they respect V23_CREDENTIALS).
-func DoNotUse_GetCredentials() string {
-	if dir := os.Getenv(Credentials); len(dir) > 0 {
-		return dir
-	}
-	return os.Getenv("VEYRON_CREDENTIALS")
-}
-
-// Helper function to ease the transition from NAMESPACE_ROOT to V23_NAMESPACE.
-// Once all binaries have been updated to respect V23_NAMESPACE, this function
-// can be removed and calls replaced with:
-// othervars = append(othervars, NamespacePrefix+"="+root)
-func DoNotUse_AppendNamespaceRoot(root string, othervars []string) []string {
-	return append(othervars,
-		NamespacePrefix+"="+root,
-		"NAMESPACE_ROOT="+root)
-}
-
-// Helper function to ease the transition from VEYRON_CREDENTIALS to
-// V23_CREDENTIALS.  Once all binaries have been updated to respect
-// V23_CREDENTIALS, this function can be removed and calls replaced with:
-// othervars = append(othervars, Credentials + "="+value
-func DoNotUse_AppendCredentials(value string, othervars []string) []string {
-	return append(othervars,
-		Credentials+"="+value,
-		"VEYRON_CREDENTIALS="+value)
-}
diff --git a/examples/rps/common/common.go b/examples/rps/internal/common.go
similarity index 95%
rename from examples/rps/common/common.go
rename to examples/rps/internal/common.go
index f71a277..d6a875c 100644
--- a/examples/rps/common/common.go
+++ b/examples/rps/internal/common.go
@@ -2,9 +2,9 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package common factors out common utility functions that both the
-// rock paper scissors clients and servers invoke.
-package common
+// Package internal defines common functions used by both rock paper scissors
+// clients and servers.
+package internal
 
 import (
 	"bytes"
@@ -14,12 +14,11 @@
 	"os"
 	"time"
 
-	"v.io/x/ref/examples/rps"
-
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
 	"v.io/x/lib/vlog"
+	"v.io/x/ref/examples/rps"
 )
 
 // CreateName creates a name using the username and hostname.
diff --git a/examples/rps/rpsbot/impl_test.go b/examples/rps/rpsbot/impl_test.go
index 420e0f2..d321a31 100644
--- a/examples/rps/rpsbot/impl_test.go
+++ b/examples/rps/rpsbot/impl_test.go
@@ -22,7 +22,7 @@
 	"v.io/v23/options"
 	"v.io/v23/rpc"
 	"v.io/x/ref/examples/rps"
-	mounttable "v.io/x/ref/services/mounttable/lib"
+	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/modules"
 )
@@ -38,9 +38,9 @@
 	if err != nil {
 		return fmt.Errorf("root failed: %v", err)
 	}
-	mt, err := mounttable.NewMountTableDispatcher("")
+	mt, err := mounttablelib.NewMountTableDispatcher("")
 	if err != nil {
-		return fmt.Errorf("mounttable.NewMountTableDispatcher failed: %s", err)
+		return fmt.Errorf("mounttablelib.NewMountTableDispatcher failed: %s", err)
 	}
 	eps, err := server.Listen(lspec)
 	if err != nil {
diff --git a/examples/rps/rpsbot/judge.go b/examples/rps/rpsbot/judge.go
index af54726..aa68af5 100644
--- a/examples/rps/rpsbot/judge.go
+++ b/examples/rps/rpsbot/judge.go
@@ -14,7 +14,7 @@
 	"v.io/v23/context"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/examples/rps"
-	"v.io/x/ref/examples/rps/common"
+	"v.io/x/ref/examples/rps/internal"
 	"v.io/x/ref/lib/stats"
 	"v.io/x/ref/lib/stats/counter"
 )
@@ -229,7 +229,7 @@
 	// Send the score card to the score keepers.
 	scoreCtx, cancel := context.WithTimeout(ctx, 30*time.Second)
 	defer cancel()
-	keepers, err := common.FindScoreKeepers(scoreCtx)
+	keepers, err := internal.FindScoreKeepers(scoreCtx)
 	if err != nil || len(keepers) == 0 {
 		vlog.Infof("No score keepers: %v", err)
 		return
diff --git a/examples/rps/rpsbot/main.go b/examples/rps/rpsbot/main.go
index 764eaf6..8a0fa15 100644
--- a/examples/rps/rpsbot/main.go
+++ b/examples/rps/rpsbot/main.go
@@ -19,13 +19,12 @@
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/x/lib/vlog"
-
-	"v.io/x/ref/lib/signals"
-	_ "v.io/x/ref/profiles/roaming"
-	sflag "v.io/x/ref/security/flag"
-
 	"v.io/x/ref/examples/rps"
-	"v.io/x/ref/examples/rps/common"
+	"v.io/x/ref/examples/rps/internal"
+	"v.io/x/ref/lib/security/securityflag"
+	"v.io/x/ref/lib/signals"
+
+	_ "v.io/x/ref/profiles/roaming"
 )
 
 var (
@@ -37,7 +36,7 @@
 	ctx, shutdown := v23.Init()
 	defer shutdown()
 
-	auth := sflag.NewAuthorizerOrDie()
+	auth := securityflag.NewAuthorizerOrDie()
 	server, err := v23.NewServer(ctx)
 	if err != nil {
 		vlog.Fatalf("NewServer failed: %v", err)
@@ -52,7 +51,7 @@
 		vlog.Fatalf("Listen(%v) failed: %v", listenSpec, err)
 	}
 	if *name == "" {
-		*name = common.CreateName()
+		*name = internal.CreateName()
 	}
 	names := []string{
 		fmt.Sprintf("rps/judge/%s", *name),
diff --git a/examples/rps/rpsbot/player.go b/examples/rps/rpsbot/player.go
index 8d08e10..40a7720 100644
--- a/examples/rps/rpsbot/player.go
+++ b/examples/rps/rpsbot/player.go
@@ -11,7 +11,7 @@
 	"v.io/v23/context"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/examples/rps"
-	"v.io/x/ref/examples/rps/common"
+	"v.io/x/ref/examples/rps/internal"
 	"v.io/x/ref/lib/stats"
 	"v.io/x/ref/lib/stats/counter"
 )
@@ -44,7 +44,7 @@
 }
 
 func (p *Player) InitiateGame(ctx *context.T) error {
-	judge, err := common.FindJudge(ctx)
+	judge, err := internal.FindJudge(ctx)
 	if err != nil {
 		vlog.Infof("FindJudge: %v", err)
 		return err
@@ -57,7 +57,7 @@
 	vlog.VI(1).Infof("Created gameID %q on %q", gameID, judge)
 
 	for {
-		opponent, err := common.FindPlayer(ctx)
+		opponent, err := internal.FindPlayer(ctx)
 		if err != nil {
 			vlog.Infof("FindPlayer: %v", err)
 			return err
@@ -139,7 +139,7 @@
 			vlog.VI(1).Infof("Player 1 played %q. Player 2 played %q. Winner: %v %s",
 				rr.Moves[0], rr.Moves[1], rr.Winner, rr.Comment)
 		case rps.JudgeActionScore:
-			vlog.VI(1).Infof("Score card: %s", common.FormatScoreCard(v.Value))
+			vlog.VI(1).Infof("Score card: %s", internal.FormatScoreCard(v.Value))
 		default:
 			vlog.Infof("unexpected message type: %T", in)
 		}
diff --git a/examples/rps/rpsbot/scorekeeper.go b/examples/rps/rpsbot/scorekeeper.go
index fe67bce..197ebd7 100644
--- a/examples/rps/rpsbot/scorekeeper.go
+++ b/examples/rps/rpsbot/scorekeeper.go
@@ -9,7 +9,7 @@
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/examples/rps"
-	"v.io/x/ref/examples/rps/common"
+	"v.io/x/ref/examples/rps/internal"
 	"v.io/x/ref/lib/stats"
 	"v.io/x/ref/lib/stats/counter"
 )
@@ -31,7 +31,7 @@
 func (k *ScoreKeeper) Record(call rpc.ServerCall, score rps.ScoreCard) error {
 	b, _ := security.RemoteBlessingNames(call.Context())
 	vlog.VI(1).Infof("Received ScoreCard from %v:", b)
-	vlog.VI(1).Info(common.FormatScoreCard(score))
+	vlog.VI(1).Info(internal.FormatScoreCard(score))
 	k.numRecords.Incr(1)
 	return nil
 }
diff --git a/examples/rps/rpsplayer/main.go b/examples/rps/rpsplayer/main.go
index 3adea96..56122fb 100644
--- a/examples/rps/rpsplayer/main.go
+++ b/examples/rps/rpsplayer/main.go
@@ -22,12 +22,11 @@
 	"v.io/v23/security"
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
+	"v.io/x/ref/examples/rps"
+	"v.io/x/ref/examples/rps/internal"
+	"v.io/x/ref/lib/security/securityflag"
 
 	_ "v.io/x/ref/profiles/roaming"
-	sflag "v.io/x/ref/security/flag"
-
-	"v.io/x/ref/examples/rps"
-	"v.io/x/ref/examples/rps/common"
 )
 
 var (
@@ -121,9 +120,9 @@
 		vlog.Fatalf("Listen(%v) failed: %v", listenSpec, err)
 	}
 	if *name == "" {
-		*name = common.CreateName()
+		*name = internal.CreateName()
 	}
-	if err := server.Serve(fmt.Sprintf("rps/player/%s", *name), rps.PlayerServer(&impl{ch: ch}), sflag.NewAuthorizerOrDie()); err != nil {
+	if err := server.Serve(fmt.Sprintf("rps/player/%s", *name), rps.PlayerServer(&impl{ch: ch}), securityflag.NewAuthorizerOrDie()); err != nil {
 		vlog.Fatalf("Serve failed: %v", err)
 	}
 	vlog.Infof("Listening on endpoint /%s", ep)
@@ -240,7 +239,7 @@
 			score := v.Value
 			fmt.Println()
 			fmt.Println("==== GAME SUMMARY ====")
-			fmt.Print(common.FormatScoreCard(score))
+			fmt.Print(internal.FormatScoreCard(score))
 			fmt.Println("======================")
 			if rps.WinnerTag(playerNum) == score.Winner {
 				fmt.Println("You won! :)")
diff --git a/examples/rps/rpsscorekeeper/main.go b/examples/rps/rpsscorekeeper/main.go
index 14d8a67..329782d 100644
--- a/examples/rps/rpsscorekeeper/main.go
+++ b/examples/rps/rpsscorekeeper/main.go
@@ -16,12 +16,11 @@
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
+	"v.io/x/ref/examples/rps"
+	"v.io/x/ref/examples/rps/internal"
+	"v.io/x/ref/lib/security/securityflag"
 
 	_ "v.io/x/ref/profiles/roaming"
-	sflag "v.io/x/ref/security/flag"
-
-	"v.io/x/ref/examples/rps"
-	"v.io/x/ref/examples/rps/common"
 )
 
 type impl struct {
@@ -57,12 +56,12 @@
 	if err != nil {
 		vlog.Fatalf("os.Hostname failed: %v", err)
 	}
-	if err := server.Serve(fmt.Sprintf("rps/scorekeeper/%s", hostname), rps.ScoreKeeperServer(rpsService), sflag.NewAuthorizerOrDie()); err != nil {
+	if err := server.Serve(fmt.Sprintf("rps/scorekeeper/%s", hostname), rps.ScoreKeeperServer(rpsService), securityflag.NewAuthorizerOrDie()); err != nil {
 		vlog.Fatalf("Serve failed: %v", err)
 	}
 	vlog.Infof("Listening on endpoint /%s", ep)
 
 	for score := range ch {
-		fmt.Print("======================\n", common.FormatScoreCard(score))
+		fmt.Print("======================\n", internal.FormatScoreCard(score))
 	}
 }
diff --git a/examples/tunnel/tunnelutil/forward.go b/examples/tunnel/internal/forward.go
similarity index 98%
rename from examples/tunnel/tunnelutil/forward.go
rename to examples/tunnel/internal/forward.go
index 6d98883..d87886a 100644
--- a/examples/tunnel/tunnelutil/forward.go
+++ b/examples/tunnel/internal/forward.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package tunnelutil
+package internal
 
 import (
 	"fmt"
diff --git a/examples/tunnel/tunnelutil/terminal.go b/examples/tunnel/internal/terminal.go
similarity index 78%
rename from examples/tunnel/tunnelutil/terminal.go
rename to examples/tunnel/internal/terminal.go
index de51af0..db08dba 100644
--- a/examples/tunnel/tunnelutil/terminal.go
+++ b/examples/tunnel/internal/terminal.go
@@ -2,9 +2,9 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package tunnelutil contains a set of common types and functions
-// used by both tunnel service clients and servers.
-package tunnelutil
+// Package internal defines common types and functions used by both tunnel
+// clients and servers.
+package internal
 
 import (
 	"errors"
@@ -16,7 +16,7 @@
 	"v.io/x/lib/vlog"
 )
 
-// Used with ioctl TIOCGWINSZ and TIOCSWINSZ.
+// Winsize defines the window size used by ioctl TIOCGWINSZ and TIOCSWINSZ.
 type Winsize struct {
 	Row    uint16
 	Col    uint16
@@ -52,6 +52,10 @@
 	return ws, nil
 }
 
+// EnterRawTerminalMode uses stty to enter the terminal into raw mode; stdin is
+// unbuffered, local echo of input characters is disabled, and special signal
+// characters are disabled.  Returns a string which may be passed to
+// RestoreTerminalSettings to restore to the original terminal settings.
 func EnterRawTerminalMode() string {
 	var savedBytes []byte
 	var err error
@@ -88,6 +92,8 @@
 	return string(saved)
 }
 
+// RestoreTerminalSettings uses stty to restore the terminal to the original
+// settings, taking the saved settings returned by EnterRawTerminalMode.
 func RestoreTerminalSettings(saved string) {
 	args := []string{
 		"-F", "/dev/tty",
diff --git a/examples/tunnel/tunneld/impl.go b/examples/tunnel/tunneld/impl.go
index 32f7627..08442c3 100644
--- a/examples/tunnel/tunneld/impl.go
+++ b/examples/tunnel/tunneld/impl.go
@@ -19,7 +19,7 @@
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/examples/tunnel"
-	"v.io/x/ref/examples/tunnel/tunnelutil"
+	"v.io/x/ref/examples/tunnel/internal"
 )
 
 // T implements tunnel.TunnelServerMethods
@@ -36,7 +36,7 @@
 	b, _ := security.RemoteBlessingNames(call.Context())
 	name := fmt.Sprintf("RemoteBlessings:%v LocalAddr:%v RemoteAddr:%v", b, conn.LocalAddr(), conn.RemoteAddr())
 	vlog.Infof("TUNNEL START: %v", name)
-	err = tunnelutil.Forward(conn, call.SendStream(), call.RecvStream())
+	err = internal.Forward(conn, call.SendStream(), call.RecvStream())
 	vlog.Infof("TUNNEL END  : %v (%v)", name, err)
 	return err
 }
@@ -167,8 +167,8 @@
 }
 
 func setWindowSize(fd uintptr, row, col uint16) {
-	ws := tunnelutil.Winsize{Row: row, Col: col}
-	if err := tunnelutil.SetWindowSize(fd, ws); err != nil {
+	ws := internal.Winsize{Row: row, Col: col}
+	if err := internal.SetWindowSize(fd, ws); err != nil {
 		vlog.Infof("Failed to set window size: %v", err)
 	}
 }
diff --git a/examples/tunnel/tunneld/main.go b/examples/tunnel/tunneld/main.go
index fb20a8b..55edc16 100644
--- a/examples/tunnel/tunneld/main.go
+++ b/examples/tunnel/tunneld/main.go
@@ -6,47 +6,27 @@
 package main
 
 import (
-	"errors"
+	"flag"
 	"fmt"
-	"net"
-	"os"
-	"strings"
 
 	"v.io/v23"
 	"v.io/x/lib/vlog"
-
-	"v.io/x/ref/lib/signals"
-	_ "v.io/x/ref/profiles/roaming"
-	sflag "v.io/x/ref/security/flag"
-
 	"v.io/x/ref/examples/tunnel"
+	"v.io/x/ref/lib/security/securityflag"
+	"v.io/x/ref/lib/signals"
+
+	_ "v.io/x/ref/profiles/roaming"
 )
 
-// firstHardwareAddrInUse returns the hwaddr of the first network interface
-// that is up, excluding loopback.
-func firstHardwareAddrInUse() (string, error) {
-	interfaces, err := net.Interfaces()
-	if err != nil {
-		return "", err
-	}
-	for _, i := range interfaces {
-		if !strings.HasPrefix(i.Name, "lo") && i.Flags&net.FlagUp != 0 {
-			name := i.HardwareAddr.String()
-			if len(name) == 0 {
-				continue
-			}
-			vlog.Infof("Using %q (from %v)", name, i.Name)
-			return name, nil
-		}
-	}
-	return "", errors.New("No usable network interfaces")
-}
+var (
+	name = flag.String("name", "", "name at which to publish the server")
+)
 
 func main() {
 	ctx, shutdown := v23.Init()
 	defer shutdown()
 
-	auth := sflag.NewAuthorizerOrDie()
+	auth := securityflag.NewAuthorizerOrDie()
 	server, err := v23.NewServer(ctx)
 	if err != nil {
 		vlog.Fatalf("NewServer failed: %v", err)
@@ -57,35 +37,15 @@
 	if _, err := server.Listen(listenSpec); err != nil {
 		vlog.Fatalf("Listen(%v) failed: %v", listenSpec, err)
 	}
-	hwaddr, err := firstHardwareAddrInUse()
-	if err != nil {
-		vlog.Fatalf("Couldn't find a good hw address: %v", err)
-	}
-	hostname, err := os.Hostname()
-	if err != nil {
-		vlog.Fatalf("os.Hostname failed: %v", err)
-	}
-	names := []string{
-		fmt.Sprintf("tunnel/hostname/%s", hostname),
-		fmt.Sprintf("tunnel/hwaddr/%s", hwaddr),
-	}
-	published := false
-	if err := server.Serve(names[0], tunnel.TunnelServer(&T{}), auth); err != nil {
-		vlog.Infof("Serve(%v) failed: %v", names[0], err)
-	}
-	published = true
-	for _, n := range names[1:] {
-		server.AddName(n)
-	}
-	if !published {
-		vlog.Fatalf("Failed to publish with any of %v", names)
+	if err := server.Serve(*name, tunnel.TunnelServer(&T{}), auth); err != nil {
+		vlog.Fatalf("Serve(%v) failed: %v", *name, err)
 	}
 	status := server.Status()
 	vlog.Infof("Listening on: %v", status.Endpoints)
 	if len(status.Endpoints) > 0 {
 		fmt.Printf("NAME=%s\n", status.Endpoints[0].Name())
 	}
-	vlog.Infof("Published as %v", names)
+	vlog.Infof("Published as %q", *name)
 
 	<-signals.ShutdownOnSignals(ctx)
 }
diff --git a/examples/tunnel/tunneld/tunneld_v23_test.go b/examples/tunnel/tunneld/tunneld_v23_test.go
index 62ee886..e153e8a 100644
--- a/examples/tunnel/tunneld/tunneld_v23_test.go
+++ b/examples/tunnel/tunneld/tunneld_v23_test.go
@@ -9,9 +9,7 @@
 import (
 	"bytes"
 	"io/ioutil"
-	"os"
 	"path/filepath"
-	"regexp"
 
 	"v.io/x/ref/envvar"
 	"v.io/x/ref/test/v23tests"
@@ -25,20 +23,14 @@
 	mounttableBin := t.BuildV23Pkg("v.io/x/ref/cmd/mounttable")
 
 	// Start tunneld with a known endpoint.
-	tunnelEndpoint := tunneldBin.Start("--v23.tcp.address=127.0.0.1:0").ExpectVar("NAME")
+	tunnelEndpoint := tunneldBin.Start("--v23.tcp.address=127.0.0.1:0", "--name=tunnel/test").ExpectVar("NAME")
 
 	// Run remote command with the endpoint.
 	if want, got := "HELLO ENDPOINT\n", vsh.Start(tunnelEndpoint, "echo", "HELLO", "ENDPOINT").Output(); want != got {
 		t.Fatalf("unexpected output, got %s, want %s", got, want)
 	}
 
-	// Run remote command with the object name.
-	hostname, err := os.Hostname()
-	if err != nil {
-		t.Fatalf("Hostname() failed: %v", err)
-	}
-
-	if want, got := "HELLO NAME\n", vsh.Start("tunnel/hostname/"+hostname, "echo", "HELLO", "NAME").Output(); want != got {
+	if want, got := "HELLO NAME\n", vsh.Start("tunnel/test", "echo", "HELLO", "NAME").Output(); want != got {
 		t.Fatalf("unexpected output, got %s, want %s", got, want)
 	}
 
@@ -66,20 +58,13 @@
 
 	// Verify that all published names are there.
 	root, _ := t.GetVar(envvar.NamespacePrefix)
-	inv := mounttableBin.Start("glob", root, "tunnel/*/*")
+	inv := mounttableBin.Start("glob", root, "tunnel/test")
 
-	// Expect two entries: one for the tunnel hostname and one for its hwaddr.
-	matches := inv.ExpectSetEventuallyRE(
-		"tunnel/hostname/"+regexp.QuoteMeta(hostname)+" (.*) \\(Deadline .*\\)",
-		"tunnel/hwaddr/.* (.*) \\(Deadline .*\\)")
+	// Expect one entry: the tunnel name.
+	matches := inv.ExpectSetEventuallyRE("tunnel/test" + " (.*) \\(Deadline .*\\)")
 
 	// The full endpoint should be the one we saw originally.
 	if got, want := matches[0][1], tunnelEndpoint; "/"+got != want {
 		t.Fatalf("expected tunnel endpoint %s to be %s, but it was not", got, want)
 	}
-
-	// The hwaddr endpoint should be the same as the hostname endpoint.
-	if matches[0][1] != matches[1][1] {
-		t.Fatalf("expected hwaddr and hostname tunnel endpoints to match, but they did not (%s != %s)", matches[0][1], matches[1][1])
-	}
 }
diff --git a/examples/tunnel/vsh/iomanager.go b/examples/tunnel/vsh/iomanager.go
index 47b7501..de41910 100644
--- a/examples/tunnel/vsh/iomanager.go
+++ b/examples/tunnel/vsh/iomanager.go
@@ -14,7 +14,7 @@
 
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/examples/tunnel"
-	"v.io/x/ref/examples/tunnel/tunnelutil"
+	"v.io/x/ref/examples/tunnel/internal"
 )
 
 func runIOManager(stdin io.Reader, stdout, stderr io.Writer, stream tunnel.TunnelShellClientCall) error {
@@ -125,7 +125,7 @@
 func (m *ioManager) handleWindowResize(winch <-chan os.Signal, outchan chan<- tunnel.ClientShellPacket, wg *sync.WaitGroup) {
 	defer wg.Done()
 	for _ = range winch {
-		ws, err := tunnelutil.GetWindowSize()
+		ws, err := internal.GetWindowSize()
 		if err != nil {
 			vlog.Infof("GetWindowSize failed: %v", err)
 			continue
diff --git a/examples/tunnel/vsh/main.go b/examples/tunnel/vsh/main.go
index 64fdef4..a08c0c3 100644
--- a/examples/tunnel/vsh/main.go
+++ b/examples/tunnel/vsh/main.go
@@ -18,12 +18,11 @@
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/x/lib/vlog"
+	"v.io/x/ref/examples/tunnel"
+	"v.io/x/ref/examples/tunnel/internal"
+	"v.io/x/ref/lib/signals"
 
 	_ "v.io/x/ref/profiles"
-
-	"v.io/x/ref/examples/tunnel"
-	"v.io/x/ref/examples/tunnel/tunnelutil"
-	"v.io/x/ref/lib/signals"
 )
 
 var (
@@ -106,8 +105,8 @@
 		return 1
 	}
 	if opts.UsePty {
-		saved := tunnelutil.EnterRawTerminalMode()
-		defer tunnelutil.RestoreTerminalSettings(saved)
+		saved := internal.EnterRawTerminalMode()
+		defer internal.RestoreTerminalSettings(saved)
 	}
 	runIOManager(os.Stdin, os.Stdout, os.Stderr, stream)
 
@@ -131,7 +130,7 @@
 func shellOptions(cmd string) (opts tunnel.ShellOpts) {
 	opts.UsePty = (len(cmd) == 0 || *forcePty) && !*disablePty
 	opts.Environment = environment()
-	ws, err := tunnelutil.GetWindowSize()
+	ws, err := internal.GetWindowSize()
 	if err != nil {
 		vlog.VI(1).Infof("GetWindowSize failed: %v", err)
 	} else {
@@ -206,7 +205,7 @@
 		name := fmt.Sprintf("%v-->%v-->(%v)-->%v", conn.RemoteAddr(), conn.LocalAddr(), oname, raddr)
 		go func() {
 			vlog.VI(1).Infof("TUNNEL START: %v", name)
-			errf := tunnelutil.Forward(conn, stream.SendStream(), stream.RecvStream())
+			errf := internal.Forward(conn, stream.SendStream(), stream.RecvStream())
 			err := stream.Finish()
 			vlog.VI(1).Infof("TUNNEL END  : %v (%v, %v)", name, errf, err)
 		}()
diff --git a/lib/exec/child.go b/lib/exec/child.go
index b80033c..4cb59a0 100644
--- a/lib/exec/child.go
+++ b/lib/exec/child.go
@@ -13,12 +13,11 @@
 	"unicode/utf8"
 
 	"v.io/v23/verror"
-	"v.io/x/ref/lib/exec/consts"
 )
 
 var (
-	ErrNoVersion          = verror.Register(pkgPath+".ErrNoVersion", verror.NoRetry, "{1:}{2:} "+consts.ExecVersionVariable+" environment variable missing{:_}")
-	ErrUnsupportedVersion = verror.Register(pkgPath+".ErrUnsupportedVersion", verror.NoRetry, "{1:}{2:} Unsupported version of v.io/x/ref/lib/exec request by "+consts.ExecVersionVariable+" environment variable{:_}")
+	ErrNoVersion          = verror.Register(pkgPath+".ErrNoVersion", verror.NoRetry, "{1:}{2:} "+ExecVersionVariable+" environment variable missing{:_}")
+	ErrUnsupportedVersion = verror.Register(pkgPath+".ErrUnsupportedVersion", verror.NoRetry, "{1:}{2:} Unsupported version of v.io/x/ref/lib/exec request by "+ExecVersionVariable+" environment variable{:_}")
 
 	errDifferentStatusSent = verror.Register(pkgPath+".errDifferentStatusSent", verror.NoRetry, "{1:}{2:} A different status: {3} has already been sent{:_}")
 	errPartialRead         = verror.Register(pkgPath+".PartialRead", verror.NoRetry, "{1:}{2:} partial read{:_}")
@@ -124,11 +123,11 @@
 func createChildHandle() (*ChildHandle, error) {
 	// TODO(cnicolaou): need to use major.minor.build format for
 	// version #s.
-	switch os.Getenv(consts.ExecVersionVariable) {
+	switch os.Getenv(ExecVersionVariable) {
 	case "":
 		return nil, verror.New(ErrNoVersion, nil)
 	case version1:
-		os.Setenv(consts.ExecVersionVariable, "")
+		os.Setenv(ExecVersionVariable, "")
 	default:
 		return nil, verror.New(ErrUnsupportedVersion, nil)
 	}
diff --git a/lib/exec/consts.go b/lib/exec/consts.go
new file mode 100644
index 0000000..f275d78
--- /dev/null
+++ b/lib/exec/consts.go
@@ -0,0 +1,14 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package exec
+
+// ExecVersionVariable is the name of the environment variable used by the exec
+// package to communicate the protocol version between the parent and child.  It
+// takes care to clear this variable from the child process' environment as soon
+// as it can, however, there may still be some situations where an application
+// may need to test for its presence or ensure that it doesn't appear in a set
+// of environment variables; exposing the name of this variable is intended to
+// support such situations.
+const ExecVersionVariable = "V23_EXEC_VERSION"
diff --git a/lib/exec/consts/consts.go b/lib/exec/consts/consts.go
deleted file mode 100644
index d6a1f1d..0000000
--- a/lib/exec/consts/consts.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package consts defines constants used by the exec library.
-package consts
-
-// The exec package uses this environment variable to communicate
-// the version of the protocol being used between the parent and child.
-// It takes care to clear this variable from the child process'
-// environment as soon as it can, however, there may still be some
-// situations where an application may need to test for its presence
-// or ensure that it doesn't appear in a set of environment variables;
-// exposing the name of this variable is intended to support such
-// situations.
-const ExecVersionVariable = "V23_EXEC_VERSION"
diff --git a/lib/exec/exec_test.go b/lib/exec/exec_test.go
index 0eaf7af..10cdb50 100644
--- a/lib/exec/exec_test.go
+++ b/lib/exec/exec_test.go
@@ -19,7 +19,6 @@
 
 	"v.io/v23/verror"
 	vexec "v.io/x/ref/lib/exec"
-	"v.io/x/ref/lib/exec/consts"
 	// Use mock timekeeper to avoid actually sleeping during the test.
 	"v.io/x/ref/test/timekeeper"
 )
@@ -459,9 +458,9 @@
 }
 
 func verifyNoExecVariable() {
-	version := os.Getenv(consts.ExecVersionVariable)
+	version := os.Getenv(vexec.ExecVersionVariable)
 	if len(version) != 0 {
-		log.Fatalf("Version variable %q has a value: %s", consts.ExecVersionVariable, version)
+		log.Fatalf("Version variable %q has a value: %s", vexec.ExecVersionVariable, version)
 	}
 }
 
@@ -475,9 +474,9 @@
 	}
 	defer os.Exit(0)
 
-	version := os.Getenv(consts.ExecVersionVariable)
+	version := os.Getenv(vexec.ExecVersionVariable)
 	if len(version) == 0 {
-		log.Fatalf("Version variable %q has no value", consts.ExecVersionVariable)
+		log.Fatalf("Version variable %q has no value", vexec.ExecVersionVariable)
 	}
 
 	// Write errors to stderr or using log. since the parent
diff --git a/lib/exec/noprotocol_test.go b/lib/exec/noprotocol_test.go
index 78564c9..ba0444b 100644
--- a/lib/exec/noprotocol_test.go
+++ b/lib/exec/noprotocol_test.go
@@ -14,7 +14,6 @@
 
 	"v.io/v23/verror"
 	vexec "v.io/x/ref/lib/exec"
-	"v.io/x/ref/lib/exec/consts"
 )
 
 func TestNoExecProtocol(t *testing.T) {
@@ -27,11 +26,11 @@
 	if got, want := ph.WaitForReady(time.Minute), vexec.ErrNotUsingProtocol.ID; verror.ErrorID(got) != want {
 		t.Fatalf("got %v, want %v", got, want)
 	}
-	re := regexp.MustCompile(fmt.Sprintf(".*%s=.*", consts.ExecVersionVariable))
+	re := regexp.MustCompile(fmt.Sprintf(".*%s=.*", vexec.ExecVersionVariable))
 	scanner := bufio.NewScanner(stdout)
 	for scanner.Scan() {
 		if re.MatchString(scanner.Text()) {
-			t.Fatalf("%s passed to child", consts.ExecVersionVariable)
+			t.Fatalf("%s passed to child", vexec.ExecVersionVariable)
 		}
 	}
 }
diff --git a/lib/exec/parent.go b/lib/exec/parent.go
index d011cfb..8431820 100644
--- a/lib/exec/parent.go
+++ b/lib/exec/parent.go
@@ -21,7 +21,6 @@
 
 	"v.io/x/lib/vlog"
 
-	"v.io/x/ref/lib/exec/consts"
 	"v.io/x/ref/lib/timekeeper"
 )
 
@@ -127,12 +126,12 @@
 // Start starts the child process, sharing a secret with it and
 // setting up a communication channel over which to read its status.
 func (p *ParentHandle) Start() error {
-	// Make sure that there are no instances of the consts.ExecVersionVariable
+	// Make sure that there are no instances of the ExecVersionVariable
 	// already in the environment (which can happen when a subprocess
 	// creates a subprocess etc)
 	nenv := make([]string, 0, len(p.c.Env)+1)
 	for _, e := range p.c.Env {
-		if strings.HasPrefix(e, consts.ExecVersionVariable+"=") {
+		if strings.HasPrefix(e, ExecVersionVariable+"=") {
 			continue
 		}
 		nenv = append(nenv, e)
@@ -142,7 +141,7 @@
 		return p.c.Start()
 	}
 
-	p.c.Env = append(nenv, consts.ExecVersionVariable+"="+version1)
+	p.c.Env = append(nenv, ExecVersionVariable+"="+version1)
 
 	// Create anonymous pipe for communicating data between the child
 	// and the parent.
diff --git a/lib/flags/buildinfo/buildinfo.go b/lib/flags/buildinfo/buildinfo.go
deleted file mode 100644
index 133ba1a..0000000
--- a/lib/flags/buildinfo/buildinfo.go
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package buildinfo
-
-import (
-	"encoding/json"
-	"runtime"
-)
-
-// These variables are filled in at link time, using:
-//  -ldflags "-X v.io/x/ref/lib/flags/buildinfo.<varname> <value>"
-var timestamp, username, platform string
-
-// T describes binary metadata.
-type T struct {
-	GoVersion, BuildTimestamp, BuildUser, BuildPlatform string
-}
-
-var info T
-
-func init() {
-	info = T{
-		GoVersion:      runtime.Version(),
-		BuildTimestamp: timestamp,
-		BuildUser:      username,
-		BuildPlatform:  platform,
-	}
-}
-
-// Info returns metadata about the current binary.
-func Info() *T {
-	return &info
-}
-
-// String returns the binary metadata as a JSON-encoded string, under the
-// expectation that clients may want to parse it for specific bits of metadata.
-func (t *T) String() string {
-	jsonT, err := json.Marshal(t)
-	if err != nil {
-		return ""
-	}
-	return string(jsonT)
-}
diff --git a/lib/flags/buildinfo/doc.go b/lib/flags/buildinfo/doc.go
deleted file mode 100644
index 622215e..0000000
--- a/lib/flags/buildinfo/doc.go
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package buildinfo provides build-time metadata about the binary.
-package buildinfo
diff --git a/lib/flags/flags.go b/lib/flags/flags.go
index f28d1dd..20b0b3b 100644
--- a/lib/flags/flags.go
+++ b/lib/flags/flags.go
@@ -12,8 +12,8 @@
 	"sync"
 
 	"v.io/v23/verror"
+	"v.io/x/lib/buildinfo"
 	"v.io/x/ref/envvar"
-	"v.io/x/ref/lib/flags/buildinfo"
 )
 
 const pkgPath = "v.io/x/ref/lib/flags"
@@ -264,7 +264,7 @@
 	var (
 		f             = &RuntimeFlags{}
 		_, roots      = envvar.NamespaceRoots()
-		creds         = envvar.DoNotUse_GetCredentials()
+		creds         = os.Getenv(envvar.Credentials)
 		i18nCatalogue = os.Getenv(envvar.I18nCatalogueFiles)
 	)
 	if len(roots) == 0 {
@@ -283,17 +283,6 @@
 	fs.IntVar(&f.Vtrace.CacheSize, "v23.vtrace.cache-size", 1024, "The number of vtrace traces to store in memory.")
 	fs.StringVar(&f.Vtrace.CollectRegexp, "v23.vtrace.collect-regexp", "", "Spans and annotations that match this regular expression will trigger trace collection.")
 
-	// TODO(ashankar): Older names: To be removed:
-	// See: https://github.com/veyron/release-issues/issues/1421
-	fs.Var(&f.namespaceRootsFlag, "veyron.namespace.root", "local namespace root; can be repeated to provided multiple roots")
-	fs.StringVar(&f.Credentials, "veyron.credentials", creds, "directory to use for storing security credentials")
-	fs.StringVar(&f.I18nCatalogue, "vanadium.i18n_catalogue", i18nCatalogue, "18n catalogue files to load, comma separated")
-
-	fs.Float64Var(&f.Vtrace.SampleRate, "veyron.vtrace.sample_rate", 0.0, "Rate (from 0.0 to 1.0) to sample vtrace traces.")
-	fs.BoolVar(&f.Vtrace.DumpOnShutdown, "veyron.vtrace.dump_on_shutdown", true, "If true, dump all stored traces on runtime shutdown.")
-	fs.IntVar(&f.Vtrace.CacheSize, "veyron.vtrace.cache_size", 1024, "The number of vtrace traces to store in memory.")
-	fs.StringVar(&f.Vtrace.CollectRegexp, "veyron.vtrace.collect_regexp", "", "Spans and annotations that match this regular expression will trigger trace collection.")
-
 	return f
 }
 
@@ -301,10 +290,6 @@
 	f := &AccessListFlags{}
 	fs.Var(&f.fileFlag, "v23.permissions.file", "specify an acl file as <name>:<aclfile>")
 	fs.StringVar(&f.literal, "v23.permissions.literal", "", "explicitly specify the runtime acl as a JSON-encoded access.Permissions. Overrides all --v23.permissions.file flags.")
-	// TODO(ashankar): Older names: To be removed:
-	// See: https://github.com/veyron/release-issues/issues/1421
-	fs.Var(&f.fileFlag, "veyron.acl.file", "specify an acl file as <name>:<aclfile>")
-	fs.StringVar(&f.literal, "veyron.acl.literal", "", "explicitly specify the runtime acl as a JSON-encoded access.Permissions. Overrides all --veyron.acl.file flags.")
 	return f
 }
 
@@ -354,11 +339,6 @@
 	fs.Var(&f.addresses, "v23.tcp.address", "address to listen on")
 	fs.StringVar(&f.ListenProxy, "v23.proxy", "", "object name of proxy service to use to export services across network boundaries")
 
-	// TODO(ashankar): Older names: To be removed:
-	// See: https://github.com/veyron/release-issues/issues/1421
-	fs.Var(&f.protocol, "veyron.tcp.protocol", "protocol to listen with")
-	fs.Var(&f.addresses, "veyron.tcp.address", "address to listen on")
-	fs.StringVar(&f.ListenProxy, "veyron.proxy", "", "object name of proxy service to use to export services across network boundaries")
 	return f
 }
 
diff --git a/security/audit/auditor.go b/lib/security/audit/auditor.go
similarity index 100%
rename from security/audit/auditor.go
rename to lib/security/audit/auditor.go
diff --git a/security/audit/auditor_test.go b/lib/security/audit/auditor_test.go
similarity index 98%
rename from security/audit/auditor_test.go
rename to lib/security/audit/auditor_test.go
index 848e207..a6cdc35 100644
--- a/security/audit/auditor_test.go
+++ b/lib/security/audit/auditor_test.go
@@ -8,7 +8,7 @@
 	"testing"
 	"time"
 
-	"v.io/x/ref/security/audit"
+	"v.io/x/ref/lib/security/audit"
 )
 
 func TestEntryString(t *testing.T) {
diff --git a/security/audit/principal.go b/lib/security/audit/principal.go
similarity index 98%
rename from security/audit/principal.go
rename to lib/security/audit/principal.go
index 2c502bb..3afb385 100644
--- a/security/audit/principal.go
+++ b/lib/security/audit/principal.go
@@ -11,7 +11,7 @@
 	"v.io/v23/verror"
 )
 
-const pkgPath = "v.io/x/ref/security/audit"
+const pkgPath = "v.io/x/ref/lib/security/audit"
 
 var (
 	errCantAuditCall = verror.Register(pkgPath+".errCantAuditCall", verror.NoRetry, "{1:}{2:} failed to audit call to {3}{:_}")
diff --git a/security/audit/principal_test.go b/lib/security/audit/principal_test.go
similarity index 99%
rename from security/audit/principal_test.go
rename to lib/security/audit/principal_test.go
index 87d6797..cc5a81b 100644
--- a/security/audit/principal_test.go
+++ b/lib/security/audit/principal_test.go
@@ -17,7 +17,7 @@
 
 	"v.io/v23/security"
 	"v.io/v23/verror"
-	"v.io/x/ref/security/audit"
+	"v.io/x/ref/lib/security/audit"
 )
 
 func TestAuditingPrincipal(t *testing.T) {
diff --git a/security/blessingroots.go b/lib/security/blessingroots.go
similarity index 98%
rename from security/blessingroots.go
rename to lib/security/blessingroots.go
index d765905..009df29 100644
--- a/security/blessingroots.go
+++ b/lib/security/blessingroots.go
@@ -10,10 +10,9 @@
 	"sort"
 	"sync"
 
-	"v.io/x/ref/security/serialization"
-
 	"v.io/v23/security"
 	"v.io/v23/verror"
+	"v.io/x/ref/lib/security/serialization"
 )
 
 // blessingRoots implements security.BlessingRoots.
diff --git a/security/blessingroots_test.go b/lib/security/blessingroots_test.go
similarity index 100%
rename from security/blessingroots_test.go
rename to lib/security/blessingroots_test.go
diff --git a/security/blessingstore.go b/lib/security/blessingstore.go
similarity index 99%
rename from security/blessingstore.go
rename to lib/security/blessingstore.go
index cba2d00..bebf3ef 100644
--- a/security/blessingstore.go
+++ b/lib/security/blessingstore.go
@@ -14,11 +14,10 @@
 	"sort"
 	"sync"
 
-	"v.io/x/ref/security/serialization"
-
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
+	"v.io/x/ref/lib/security/serialization"
 )
 
 var (
diff --git a/security/blessingstore_test.go b/lib/security/blessingstore_test.go
similarity index 100%
rename from security/blessingstore_test.go
rename to lib/security/blessingstore_test.go
diff --git a/security/doc.go b/lib/security/doc.go
similarity index 100%
rename from security/doc.go
rename to lib/security/doc.go
diff --git a/security/principal.go b/lib/security/principal.go
similarity index 99%
rename from security/principal.go
rename to lib/security/principal.go
index 71bb6bc..003f23a 100644
--- a/security/principal.go
+++ b/lib/security/principal.go
@@ -13,7 +13,7 @@
 	"v.io/v23/verror"
 )
 
-const pkgPath = "v.io/x/ref/security"
+const pkgPath = "v.io/x/ref/lib/security"
 
 var (
 	errCantCreateSigner      = verror.Register(pkgPath+".errCantCreateSigner", verror.NoRetry, "{1:}{2:} failed to create serialization.Signer{:_}")
diff --git a/security/principal_test.go b/lib/security/principal_test.go
similarity index 100%
rename from security/principal_test.go
rename to lib/security/principal_test.go
diff --git a/security/flag/flag.go b/lib/security/securityflag/flag.go
similarity index 91%
rename from security/flag/flag.go
rename to lib/security/securityflag/flag.go
index f8fbb97..48ee109 100644
--- a/security/flag/flag.go
+++ b/lib/security/securityflag/flag.go
@@ -2,9 +2,9 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package flag defines a method for parsing AccessList flags and constructing
-// a security.Authorizer based on them.
-package flag
+// Package securityflag defines a method for parsing AccessList flags and
+// constructing a security.Authorizer based on them.
+package securityflag
 
 import (
 	"bytes"
@@ -14,11 +14,10 @@
 	"v.io/v23/security"
 	"v.io/v23/security/access"
 	"v.io/v23/verror"
-
 	"v.io/x/ref/lib/flags"
 )
 
-const pkgPath = "v.io/x/ref/security/flag"
+const pkgPath = "v.io/x/ref/lib/security/securityflag"
 
 var (
 	errCantOpenPermissionsFile = verror.Register(pkgPath+".errCantOpenPermissionsFile", verror.NoRetry, "{1:}{2:} cannot open argument to --v23.permissions.file {3}{:_}")
diff --git a/security/flag/flag_test.go b/lib/security/securityflag/flag_test.go
similarity index 98%
rename from security/flag/flag_test.go
rename to lib/security/securityflag/flag_test.go
index 97c13c3..29cff52 100644
--- a/security/flag/flag_test.go
+++ b/lib/security/securityflag/flag_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package flag
+package securityflag
 
 import (
 	"bytes"
@@ -16,7 +16,6 @@
 
 	"v.io/v23/security"
 	"v.io/v23/security/access"
-
 	"v.io/x/ref/test/modules"
 )
 
diff --git a/security/flag/v23_internal_test.go b/lib/security/securityflag/v23_internal_test.go
similarity index 96%
rename from security/flag/v23_internal_test.go
rename to lib/security/securityflag/v23_internal_test.go
index ee2061a..d4e2d18 100644
--- a/security/flag/v23_internal_test.go
+++ b/lib/security/securityflag/v23_internal_test.go
@@ -4,7 +4,7 @@
 
 // This file was auto-generated via go generate.
 // DO NOT UPDATE MANUALLY
-package flag
+package securityflag
 
 import "fmt"
 import "testing"
diff --git a/security/serialization/serialization.go b/lib/security/serialization/serialization.go
similarity index 100%
rename from security/serialization/serialization.go
rename to lib/security/serialization/serialization.go
diff --git a/security/serialization/serialization_test.go b/lib/security/serialization/serialization_test.go
similarity index 98%
rename from security/serialization/serialization_test.go
rename to lib/security/serialization/serialization_test.go
index d3d2a17..06f018f 100644
--- a/security/serialization/serialization_test.go
+++ b/lib/security/serialization/serialization_test.go
@@ -18,11 +18,10 @@
 	"strings"
 	"testing"
 
-	"v.io/x/ref/security/serialization"
+	"v.io/v23/security"
+	"v.io/x/ref/lib/security/serialization"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
-
-	"v.io/v23/security"
 )
 
 // We call our own TestMain here because v23 test generate causes an import cycle
diff --git a/security/serialization/signing_writer.go b/lib/security/serialization/signing_writer.go
similarity index 100%
rename from security/serialization/signing_writer.go
rename to lib/security/serialization/signing_writer.go
diff --git a/security/serialization/types.vdl b/lib/security/serialization/types.vdl
similarity index 100%
rename from security/serialization/types.vdl
rename to lib/security/serialization/types.vdl
diff --git a/security/serialization/types.vdl.go b/lib/security/serialization/types.vdl.go
similarity index 91%
rename from security/serialization/types.vdl.go
rename to lib/security/serialization/types.vdl.go
index 41ace24..096ae05 100644
--- a/security/serialization/types.vdl.go
+++ b/lib/security/serialization/types.vdl.go
@@ -20,14 +20,14 @@
 }
 
 func (SignedHeader) __VDLReflect(struct {
-	Name string "v.io/x/ref/security/serialization.SignedHeader"
+	Name string "v.io/x/ref/lib/security/serialization.SignedHeader"
 }) {
 }
 
 type HashCode [32]byte
 
 func (HashCode) __VDLReflect(struct {
-	Name string "v.io/x/ref/security/serialization.HashCode"
+	Name string "v.io/x/ref/lib/security/serialization.HashCode"
 }) {
 }
 
@@ -51,7 +51,7 @@
 	SignedDataHash struct{ Value HashCode }
 	// __SignedDataReflect describes the SignedData union type.
 	__SignedDataReflect struct {
-		Name  string "v.io/x/ref/security/serialization.SignedData"
+		Name  string "v.io/x/ref/lib/security/serialization.SignedData"
 		Type  SignedData
 		Union struct {
 			Signature SignedDataSignature
diff --git a/security/serialization/verifying_reader.go b/lib/security/serialization/verifying_reader.go
similarity index 98%
rename from security/serialization/verifying_reader.go
rename to lib/security/serialization/verifying_reader.go
index b708988..28c736a 100644
--- a/security/serialization/verifying_reader.go
+++ b/lib/security/serialization/verifying_reader.go
@@ -16,7 +16,7 @@
 	"v.io/v23/vom"
 )
 
-const pkgPath = "v.io/x/ref/security/serialization"
+const pkgPath = "v.io/x/ref/lib/security/serialization"
 
 var (
 	errCantBeNilVerifier      = verror.Register(pkgPath+".errCantBeNilVerifier", verror.NoRetry, "{1:}{2:} data:{3} signature:{4} key:{5} cannot be nil{:_}")
diff --git a/security/serializer_reader_writer.go b/lib/security/serializer_reader_writer.go
similarity index 100%
rename from security/serializer_reader_writer.go
rename to lib/security/serializer_reader_writer.go
diff --git a/security/storage.go b/lib/security/storage.go
similarity index 96%
rename from security/storage.go
rename to lib/security/storage.go
index 8e9da82..1690c91 100644
--- a/security/storage.go
+++ b/lib/security/storage.go
@@ -10,7 +10,7 @@
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/v23/vom"
-	"v.io/x/ref/security/serialization"
+	"v.io/x/ref/lib/security/serialization"
 )
 
 var (
diff --git a/security/testutil_test.go b/lib/security/testutil_test.go
similarity index 100%
rename from security/testutil_test.go
rename to lib/security/testutil_test.go
diff --git a/security/util.go b/lib/security/util.go
similarity index 100%
rename from security/util.go
rename to lib/security/util.go
diff --git a/security/util_test.go b/lib/security/util_test.go
similarity index 100%
rename from security/util_test.go
rename to lib/security/util_test.go
diff --git a/lib/signals/signals_test.go b/lib/signals/signals_test.go
index 1df20e1..6af0d33 100644
--- a/lib/signals/signals_test.go
+++ b/lib/signals/signals_test.go
@@ -20,13 +20,13 @@
 	"v.io/v23/rpc"
 	"v.io/v23/services/appcycle"
 	"v.io/v23/vtrace"
-
 	"v.io/x/ref/lib/mgmt"
-	_ "v.io/x/ref/profiles"
-	vflag "v.io/x/ref/security/flag"
-	"v.io/x/ref/services/mgmt/device"
+	"v.io/x/ref/lib/security/securityflag"
+	"v.io/x/ref/services/device"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/modules"
+
+	_ "v.io/x/ref/profiles"
 )
 
 //go:generate v23 test generate
@@ -344,7 +344,7 @@
 	if ep, err = server.Listen(v23.GetListenSpec(ctx)); err != nil {
 		t.Fatalf("Got error: %v", err)
 	}
-	if err := server.Serve("", device.ConfigServer(&configServer{ch}), vflag.NewAuthorizerOrDie()); err != nil {
+	if err := server.Serve("", device.ConfigServer(&configServer{ch}), securityflag.NewAuthorizerOrDie()); err != nil {
 		t.Fatalf("Got error: %v", err)
 	}
 	return server, ep[0].Name(), ch
diff --git a/lib/stats/sysstats/sysstats.go b/lib/stats/sysstats/sysstats.go
index 86772fd..49ad421 100644
--- a/lib/stats/sysstats/sysstats.go
+++ b/lib/stats/sysstats/sysstats.go
@@ -14,7 +14,7 @@
 	"strings"
 	"time"
 
-	"v.io/x/ref/lib/flags/buildinfo"
+	"v.io/x/lib/buildinfo"
 	"v.io/x/ref/lib/stats"
 )
 
diff --git a/services/mgmt/suidhelper/impl/args.go b/lib/suid/args.go
similarity index 80%
rename from services/mgmt/suidhelper/impl/args.go
rename to lib/suid/args.go
index 8081a26..90e9d55 100644
--- a/services/mgmt/suidhelper/impl/args.go
+++ b/lib/suid/args.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl
+package suid
 
 import (
 	"bytes"
@@ -14,10 +14,9 @@
 	"strings"
 
 	"v.io/v23/verror"
-	sflag "v.io/x/ref/services/mgmt/suidhelper/impl/flag"
 )
 
-const pkgPath = "v.io/x/ref/services/mgmt/suidhelper/impl"
+const pkgPath = "v.io/x/ref/lib/suid"
 
 var (
 	errUserNameMissing = verror.Register(pkgPath+".errUserNameMissing", verror.NoRetry, "{1:}{2:} --username missing{:_}")
@@ -55,21 +54,19 @@
 )
 
 func init() {
-	setupFlags(nil)
+	setupFlags(flag.CommandLine)
 }
 
 func setupFlags(fs *flag.FlagSet) {
-	if fs != nil {
-		sflag.SetupFlags(fs)
-	}
-	flagUsername = sflag.Username
-	flagWorkspace = sflag.Workspace
-	flagLogDir = sflag.LogDir
-	flagRun = sflag.Run
-	flagMinimumUid = sflag.MinimumUid
-	flagRemove = sflag.Remove
-	flagDryrun = sflag.Dryrun
-	flagProgName = sflag.ProgName
+	const uidThreshold = 501
+	flagUsername = fs.String("username", "", "The UNIX user name used for the other functions of this tool.")
+	flagWorkspace = fs.String("workspace", "", "Path to the application's workspace directory.")
+	flagLogDir = fs.String("logdir", "", "Path to the log directory.")
+	flagRun = fs.String("run", "", "Path to the application to exec.")
+	flagProgName = fs.String("progname", "unnamed_app", "Visible name of the application, used in argv[0]")
+	flagMinimumUid = fs.Int64("minuid", uidThreshold, "UIDs cannot be less than this number.")
+	flagRemove = fs.Bool("rm", false, "Remove the file trees given as command-line arguments.")
+	flagDryrun = fs.Bool("dryrun", false, "Elides root-requiring systemcalls.")
 }
 
 func cleanEnv(env []string) []string {
diff --git a/services/mgmt/suidhelper/impl/args_darwin_test.go b/lib/suid/args_darwin_test.go
similarity index 94%
rename from services/mgmt/suidhelper/impl/args_darwin_test.go
rename to lib/suid/args_darwin_test.go
index ef8ae82..f8eeacb 100644
--- a/services/mgmt/suidhelper/impl/args_darwin_test.go
+++ b/lib/suid/args_darwin_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl
+package suid
 
 const (
 	testUserName = "_uucp"
diff --git a/services/mgmt/suidhelper/impl/args_linux_test.go b/lib/suid/args_linux_test.go
similarity index 94%
rename from services/mgmt/suidhelper/impl/args_linux_test.go
rename to lib/suid/args_linux_test.go
index 15e6b01..9e66342 100644
--- a/services/mgmt/suidhelper/impl/args_linux_test.go
+++ b/lib/suid/args_linux_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl
+package suid
 
 const (
 	testUserName = "uucp"
diff --git a/services/mgmt/suidhelper/impl/args_test.go b/lib/suid/args_test.go
similarity index 99%
rename from services/mgmt/suidhelper/impl/args_test.go
rename to lib/suid/args_test.go
index d5c7233..5476a06 100644
--- a/services/mgmt/suidhelper/impl/args_test.go
+++ b/lib/suid/args_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl
+package suid
 
 import (
 	"flag"
diff --git a/lib/suid/constants.go b/lib/suid/constants.go
new file mode 100644
index 0000000..178603e
--- /dev/null
+++ b/lib/suid/constants.go
@@ -0,0 +1,11 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package suid
+
+const (
+	// fd of the pipe to be used to return the pid of the forked child to the
+	// device manager.
+	PipeToParentFD = 5
+)
diff --git a/services/mgmt/suidhelper/impl/run.go b/lib/suid/run.go
similarity index 96%
rename from services/mgmt/suidhelper/impl/run.go
rename to lib/suid/run.go
index 5b50974..bedc968 100644
--- a/services/mgmt/suidhelper/impl/run.go
+++ b/lib/suid/run.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl
+package suid
 
 import (
 	"flag"
diff --git a/services/mgmt/suidhelper/impl/system.go b/lib/suid/system.go
similarity index 78%
rename from services/mgmt/suidhelper/impl/system.go
rename to lib/suid/system.go
index 449ad38..de37d54 100644
--- a/services/mgmt/suidhelper/impl/system.go
+++ b/lib/suid/system.go
@@ -4,9 +4,10 @@
 
 // +build linux darwin
 
-package impl
+package suid
 
 import (
+	"encoding/binary"
 	"log"
 	"os"
 	"path/filepath"
@@ -49,7 +50,7 @@
 	attr := new(syscall.ProcAttr)
 
 	if dir, err := os.Getwd(); err != nil {
-		log.Printf("error Getwd(): %v\n", err)
+		log.Printf("error Getwd(): %v", err)
 		return verror.New(errGetwdFailed, nil, err)
 		attr.Dir = dir
 	}
@@ -71,16 +72,28 @@
 		attr.Sys.Credential.Uid = uint32(hw.uid)
 	}
 
-	_, _, err := syscall.StartProcess(hw.argv0, hw.argv, attr)
+	// Make sure the child won't talk on the fd we use to talk back to the parent
+	syscall.CloseOnExec(PipeToParentFD)
+
+	// Start the child process
+	pid, _, err := syscall.StartProcess(hw.argv0, hw.argv, attr)
 	if err != nil {
 		if !hw.dryrun {
-			log.Printf("StartProcess failed: attr: %#v, attr.Sys: %#v, attr.Sys.Cred: %#v error: %v\n", attr, attr.Sys, attr.Sys.Credential, err)
+			log.Printf("StartProcess failed: attr: %#v, attr.Sys: %#v, attr.Sys.Cred: %#v error: %v", attr, attr.Sys, attr.Sys.Credential, err)
 		} else {
 			log.Printf("StartProcess failed: %v", err)
 		}
 		return verror.New(errStartProcessFailed, nil, hw.argv0, err)
 	}
-	// TODO(rjkroege): Return the pid to the node manager.
+
+	// Return the pid of the new child process
+	pipeToParent := os.NewFile(PipeToParentFD, "pipe_to_parent_wr")
+	if err = binary.Write(pipeToParent, binary.LittleEndian, int32(pid)); err != nil {
+		log.Printf("Problem returning pid to parent: %v", err)
+	} else {
+		log.Printf("Returned pid %v to parent", pid)
+	}
+
 	os.Exit(0)
 	return nil // Not reached.
 }
diff --git a/services/mgmt/suidhelper/impl/system_test.go b/lib/suid/system_test.go
similarity index 98%
rename from services/mgmt/suidhelper/impl/system_test.go
rename to lib/suid/system_test.go
index 8930612..98c3091 100644
--- a/services/mgmt/suidhelper/impl/system_test.go
+++ b/lib/suid/system_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl
+package suid
 
 import (
 	"bytes"
diff --git a/services/mgmt/sysinit/init_darwin.go b/lib/sysinit/init_darwin.go
similarity index 100%
rename from services/mgmt/sysinit/init_darwin.go
rename to lib/sysinit/init_darwin.go
diff --git a/services/mgmt/sysinit/init_linux.go b/lib/sysinit/init_linux.go
similarity index 100%
rename from services/mgmt/sysinit/init_linux.go
rename to lib/sysinit/init_linux.go
diff --git a/services/mgmt/sysinit/linux_test.go b/lib/sysinit/linux_test.go
similarity index 100%
rename from services/mgmt/sysinit/linux_test.go
rename to lib/sysinit/linux_test.go
diff --git a/services/mgmt/sysinit/service_description.go b/lib/sysinit/service_description.go
similarity index 97%
rename from services/mgmt/sysinit/service_description.go
rename to lib/sysinit/service_description.go
index 62c677f..d19f072 100644
--- a/services/mgmt/sysinit/service_description.go
+++ b/lib/sysinit/service_description.go
@@ -14,7 +14,7 @@
 	"v.io/v23/verror"
 )
 
-const pkgPath = "v.io/x/ref/services/mgmt/sysinit"
+const pkgPath = "v.io/x/ref/lib/sysinit"
 
 var (
 	errMarshalFailed   = verror.Register(pkgPath+".errMarshalFailed", verror.NoRetry, "{1:}{2:} Marshal({3}) failed{:_}")
diff --git a/services/mgmt/sysinit/sysinit.go b/lib/sysinit/sysinit.go
similarity index 100%
rename from services/mgmt/sysinit/sysinit.go
rename to lib/sysinit/sysinit.go
diff --git a/lib/unixfd/unixfd.go b/lib/unixfd/unixfd.go
index 1cae9b8..a80e1d9 100644
--- a/lib/unixfd/unixfd.go
+++ b/lib/unixfd/unixfd.go
@@ -7,7 +7,6 @@
 package unixfd
 
 import (
-	"errors"
 	"fmt"
 	"io"
 	"net"
@@ -19,6 +18,18 @@
 	"unsafe"
 
 	"v.io/v23/rpc"
+	"v.io/v23/verror"
+)
+
+const pkgPath = "v.io/x/ref/lib/unixfd"
+
+var (
+	errListenerClosed            = verror.Register(pkgPath+".errListenerClosed", verror.NoRetry, "{1:}{2:} listener closed{:_}")
+	errListenerAlreadyClosed     = verror.Register(pkgPath+".errListenerAlreadyClosed", verror.NoRetry, "{1:}{2:} listener already closed{:_}")
+	errCantSendSocketWithoutData = verror.Register(pkgPath+".errCantSendSocketWithoutData", verror.NoRetry, "{1:}{2:} cannot send a socket without data.{:_}")
+	errWrongSentLength           = verror.Register(pkgPath+".errWrongSentLength", verror.NoRetry, "{1:}{2:} expected to send {3}, {4} bytes,  sent {5}, {6}{:_}")
+	errTooBigOOB                 = verror.Register(pkgPath+".errTooBigOOB", verror.NoRetry, "{1:}{2:} received too large oob data ({3}, max {4}){:_}")
+	errBadNetwork                = verror.Register(pkgPath+".errBadNetwork", verror.NoRetry, "{1:}{2:} invalid network{:_}")
 )
 
 const Network string = "unixfd"
@@ -45,7 +56,7 @@
 func (l *singleConnListener) Accept() (net.Conn, error) {
 	c := l.getChan()
 	if c == nil {
-		return nil, errors.New("listener closed")
+		return nil, verror.New(errListenerClosed, nil)
 	}
 	if conn, ok := <-c; ok {
 		return conn, nil
@@ -58,7 +69,7 @@
 	defer l.Unlock()
 	lc := l.c
 	if lc == nil {
-		return errors.New("listener already closed")
+		return verror.New(errListenerAlreadyClosed, nil)
 	}
 	close(l.c)
 	l.c = nil
@@ -217,7 +228,7 @@
 // which you must close if you do not Dial or Listen to the address.
 func SendConnection(conn *net.UnixConn, data []byte) (addr net.Addr, err error) {
 	if len(data) < 1 {
-		return nil, errors.New("cannot send a socket without data.")
+		return nil, verror.New(errCantSendSocketWithoutData, nil)
 	}
 	remote, local, err := socketpair()
 	if err != nil {
@@ -233,7 +244,7 @@
 		return nil, err
 	} else if n != len(data) || oobn != len(rights) {
 		rfile.Close()
-		return nil, fmt.Errorf("expected to send %d, %d bytes,  sent %d, %d", len(data), len(rights), n, oobn)
+		return nil, verror.New(errWrongSentLength, nil, len(data), len(rights), n, oobn)
 	}
 	// Wait for the other side to acknowledge.
 	// This is to work around a race on OS X where it appears we can close
@@ -276,7 +287,7 @@
 		return nil, n, nil, err
 	}
 	if oobn > len(oob) {
-		return nil, n, nil, fmt.Errorf("received too large oob data (%d, max %d)", oobn, len(oob))
+		return nil, n, nil, verror.New(errTooBigOOB, nil, oobn, len(oob))
 	}
 	scms, err := syscall.ParseSocketControlMessage(oob[:oobn])
 	if err != nil {
@@ -326,7 +337,7 @@
 
 func CloseUnixAddr(addr net.Addr) error {
 	if addr.Network() != Network {
-		return errors.New("invalid network")
+		return verror.New(errBadNetwork, nil)
 	}
 	fd, err := strconv.ParseInt(addr.String(), 10, 32)
 	if err != nil {
diff --git a/lib/vdl/build/build.go b/lib/vdl/build/build.go
index c036e9d..07947bb 100644
--- a/lib/vdl/build/build.go
+++ b/lib/vdl/build/build.go
@@ -256,7 +256,7 @@
 }
 
 // SrcDirs returns a list of package root source directories, based on the
-// VDLPATH, VDLROOT and VANADIUM_ROOT environment variables.
+// VDLPATH, VDLROOT and V23_ROOT environment variables.
 //
 // VDLPATH is a list of directories separated by filepath.ListSeparator;
 // e.g. the separator is ":" on UNIX, and ";" on Windows.  Each VDLPATH
@@ -265,8 +265,8 @@
 //
 // VDLROOT is a single directory specifying the location of the standard vdl
 // packages.  It has the same requirements as VDLPATH components.  If VDLROOT is
-// empty, we use VANADIUM_ROOT to construct the VDLROOT.  An error is reported if
-// neither VDLROOT nor VANADIUM_ROOT is specified.
+// empty, we use V23_ROOT to construct the VDLROOT.  An error is reported if
+// neither VDLROOT nor V23_ROOT is specified.
 func SrcDirs(errs *vdlutil.Errors) []string {
 	var srcDirs []string
 	if root := vdlRootDir(errs); root != "" {
@@ -278,10 +278,10 @@
 func vdlRootDir(errs *vdlutil.Errors) string {
 	vdlroot := os.Getenv("VDLROOT")
 	if vdlroot == "" {
-		// Try to construct VDLROOT out of VANADIUM_ROOT.
-		vroot := os.Getenv("VANADIUM_ROOT")
+		// Try to construct VDLROOT out of V23_ROOT.
+		vroot := os.Getenv("V23_ROOT")
 		if vroot == "" {
-			errs.Error("Either VDLROOT or VANADIUM_ROOT must be set")
+			errs.Error("Either VDLROOT or V23_ROOT must be set")
 			return ""
 		}
 		vdlroot = filepath.Join(vroot, "release", "go", "src", "v.io", "v23", "vdlroot")
diff --git a/lib/vdl/build/build_test.go b/lib/vdl/build/build_test.go
index aa083b2..3974345 100644
--- a/lib/vdl/build/build_test.go
+++ b/lib/vdl/build/build_test.go
@@ -17,8 +17,8 @@
 	"v.io/v23/vdlroot/vdltool"
 	"v.io/x/ref/lib/vdl/build"
 	"v.io/x/ref/lib/vdl/compile"
+	"v.io/x/ref/lib/vdl/internal/vdltest"
 	"v.io/x/ref/lib/vdl/testdata/base"
-	"v.io/x/ref/lib/vdl/vdltest"
 	"v.io/x/ref/lib/vdl/vdlutil"
 )
 
@@ -53,8 +53,8 @@
 }
 
 func setVanadiumRoot(t *testing.T, root string) bool {
-	if err := os.Setenv("VANADIUM_ROOT", root); err != nil {
-		t.Errorf("Setenv(VANADIUM_ROOT, %q) failed: %v", root, err)
+	if err := os.Setenv("V23_ROOT", root); err != nil {
+		t.Errorf("Setenv(V23_ROOT, %q) failed: %v", root, err)
 		return false
 	}
 	return true
@@ -75,12 +75,12 @@
 		Want         []string
 		ErrRE        string
 	}{
-		{"", "", nil, "Either VDLROOT or VANADIUM_ROOT must be set"},
+		{"", "", nil, "Either VDLROOT or V23_ROOT must be set"},
 		{"/a", "", []string{"/a"}, ""},
 		{"/a/b/c", "", []string{"/a/b/c"}, ""},
 		{"", "/v23", []string{"/v23/release/go/src/v.io/v23/vdlroot"}, ""},
 		{"", "/a/b/c", []string{"/a/b/c/release/go/src/v.io/v23/vdlroot"}, ""},
-		// If both VDLROOT and VANADIUM_ROOT are specified, VDLROOT takes precedence.
+		// If both VDLROOT and V23_ROOT are specified, VDLROOT takes precedence.
 		{"/a", "/v23", []string{"/a"}, ""},
 		{"/a/b/c", "/x/y/z", []string{"/a/b/c"}, ""},
 	}
diff --git a/lib/vdl/codegen/javascript/gen.go b/lib/vdl/codegen/javascript/gen.go
index 6403d4d..454ac25 100644
--- a/lib/vdl/codegen/javascript/gen.go
+++ b/lib/vdl/codegen/javascript/gen.go
@@ -336,6 +336,17 @@
 	return false
 }
 
+func hasEnums(pkg *compile.Package) bool {
+	for _, file := range pkg.Files {
+		for _, def := range file.TypeDefs {
+			if def.Type.Kind() == vdl.Enum {
+				return true
+			}
+		}
+	}
+	return false
+}
+
 func generateSystemImports(data data) string {
 	res := "var vdl = require('"
 	packagePrefix := ""
@@ -358,7 +369,7 @@
 		}
 	}
 
-	if hasConsts(data.Pkg) {
+	if hasConsts(data.Pkg) || hasEnums(data.Pkg) {
 		if data.PathToCoreJS != "" {
 			res += "var canonicalize = require('" + packagePrefix + "/vdl/canonicalize');\n"
 		} else {
diff --git a/lib/vdl/compile/compile_test.go b/lib/vdl/compile/compile_test.go
index d8734fb..9192a77 100644
--- a/lib/vdl/compile/compile_test.go
+++ b/lib/vdl/compile/compile_test.go
@@ -11,7 +11,7 @@
 
 	"v.io/x/ref/lib/vdl/build"
 	"v.io/x/ref/lib/vdl/compile"
-	"v.io/x/ref/lib/vdl/vdltest"
+	"v.io/x/ref/lib/vdl/internal/vdltest"
 )
 
 type f map[string]string
diff --git a/lib/vdl/compile/const_test.go b/lib/vdl/compile/const_test.go
index 326bee1..a2ce72d 100644
--- a/lib/vdl/compile/const_test.go
+++ b/lib/vdl/compile/const_test.go
@@ -12,7 +12,7 @@
 	"v.io/v23/vdl"
 	"v.io/x/ref/lib/vdl/build"
 	"v.io/x/ref/lib/vdl/compile"
-	"v.io/x/ref/lib/vdl/vdltest"
+	"v.io/x/ref/lib/vdl/internal/vdltest"
 )
 
 func testConstPackage(t *testing.T, name string, tpkg constPkg, env *compile.Env) *compile.Package {
diff --git a/lib/vdl/compile/error_test.go b/lib/vdl/compile/error_test.go
index 95a1020..845c511 100644
--- a/lib/vdl/compile/error_test.go
+++ b/lib/vdl/compile/error_test.go
@@ -12,8 +12,8 @@
 	"v.io/v23/vdl"
 	"v.io/x/ref/lib/vdl/build"
 	"v.io/x/ref/lib/vdl/compile"
+	"v.io/x/ref/lib/vdl/internal/vdltest"
 	"v.io/x/ref/lib/vdl/parse"
-	"v.io/x/ref/lib/vdl/vdltest"
 )
 
 func TestError(t *testing.T) {
diff --git a/lib/vdl/compile/ident_test.go b/lib/vdl/compile/ident_test.go
index 77f7819..4a61fe4 100644
--- a/lib/vdl/compile/ident_test.go
+++ b/lib/vdl/compile/ident_test.go
@@ -9,7 +9,7 @@
 
 	"v.io/x/ref/lib/vdl/build"
 	"v.io/x/ref/lib/vdl/compile"
-	"v.io/x/ref/lib/vdl/vdltest"
+	"v.io/x/ref/lib/vdl/internal/vdltest"
 )
 
 func TestIdentConflict(t *testing.T) {
diff --git a/lib/vdl/compile/interface_test.go b/lib/vdl/compile/interface_test.go
index 4cc1d10..1d2f8ac 100644
--- a/lib/vdl/compile/interface_test.go
+++ b/lib/vdl/compile/interface_test.go
@@ -11,8 +11,8 @@
 	"v.io/v23/vdl"
 	"v.io/x/ref/lib/vdl/build"
 	"v.io/x/ref/lib/vdl/compile"
+	"v.io/x/ref/lib/vdl/internal/vdltest"
 	"v.io/x/ref/lib/vdl/parse"
-	"v.io/x/ref/lib/vdl/vdltest"
 )
 
 func TestInterface(t *testing.T) {
diff --git a/lib/vdl/compile/type_test.go b/lib/vdl/compile/type_test.go
index 59396fe..4b64a70 100644
--- a/lib/vdl/compile/type_test.go
+++ b/lib/vdl/compile/type_test.go
@@ -10,7 +10,7 @@
 	"v.io/v23/vdl"
 	"v.io/x/ref/lib/vdl/build"
 	"v.io/x/ref/lib/vdl/compile"
-	"v.io/x/ref/lib/vdl/vdltest"
+	"v.io/x/ref/lib/vdl/internal/vdltest"
 )
 
 const qual = "package path qualified identifier"
diff --git a/lib/vdl/vdltest/vdltest.go b/lib/vdl/internal/vdltest/vdltest.go
similarity index 100%
rename from lib/vdl/vdltest/vdltest.go
rename to lib/vdl/internal/vdltest/vdltest.go
diff --git a/lib/vdl/parse/parse_test.go b/lib/vdl/parse/parse_test.go
index 0b84e89..90849e6 100644
--- a/lib/vdl/parse/parse_test.go
+++ b/lib/vdl/parse/parse_test.go
@@ -12,8 +12,8 @@
 	"strings"
 	"testing"
 
+	"v.io/x/ref/lib/vdl/internal/vdltest"
 	"v.io/x/ref/lib/vdl/parse"
-	"v.io/x/ref/lib/vdl/vdltest"
 	"v.io/x/ref/lib/vdl/vdlutil"
 )
 
diff --git a/profiles/fake/runtime.go b/profiles/fake/runtime.go
index ceaa6cc..e2c5cf3 100644
--- a/profiles/fake/runtime.go
+++ b/profiles/fake/runtime.go
@@ -12,8 +12,7 @@
 	"v.io/v23/context"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
-
-	vsecurity "v.io/x/ref/security"
+	vsecurity "v.io/x/ref/lib/security"
 )
 
 type contextKey int
diff --git a/profiles/internal/naming/namespace/acl.go b/profiles/internal/naming/namespace/acl.go
index d47e4ea..cdb00ce 100644
--- a/profiles/internal/naming/namespace/acl.go
+++ b/profiles/internal/naming/namespace/acl.go
@@ -15,10 +15,10 @@
 )
 
 // setAccessListInMountTable sets the AccessList in a single server.
-func setAccessListInMountTable(ctx *context.T, client rpc.Client, name string, acl access.Permissions, etag, id string, opts []rpc.CallOpt) (s status) {
+func setAccessListInMountTable(ctx *context.T, client rpc.Client, name string, acl access.Permissions, version, id string, opts []rpc.CallOpt) (s status) {
 	s.id = id
 	ctx, _ = context.WithTimeout(ctx, callTimeout)
-	call, err := client.StartCall(ctx, name, "SetPermissions", []interface{}{acl, etag}, append(opts, options.NoResolve{})...)
+	call, err := client.StartCall(ctx, name, "SetPermissions", []interface{}{acl, version}, append(opts, options.NoResolve{})...)
 	s.err = err
 	if err != nil {
 		return
@@ -27,21 +27,21 @@
 	return
 }
 
-func (ns *namespace) SetPermissions(ctx *context.T, name string, acl access.Permissions, etag string, opts ...naming.NamespaceOpt) error {
+func (ns *namespace) SetPermissions(ctx *context.T, name string, acl access.Permissions, version string, opts ...naming.NamespaceOpt) error {
 	defer vlog.LogCall()()
 	client := v23.GetClient(ctx)
 
 	// Apply to all mount tables implementing the name.
 	f := func(ctx *context.T, mt, id string) status {
-		return setAccessListInMountTable(ctx, client, mt, acl, etag, id, getCallOpts(opts))
+		return setAccessListInMountTable(ctx, client, mt, acl, version, id, getCallOpts(opts))
 	}
 	err := ns.dispatch(ctx, name, f, opts)
-	vlog.VI(1).Infof("SetPermissions(%s, %v, %s) -> %v", name, acl, etag, err)
+	vlog.VI(1).Infof("SetPermissions(%s, %v, %s) -> %v", name, acl, version, err)
 	return err
 }
 
 // GetPermissions gets an AccessList from a mount table.
-func (ns *namespace) GetPermissions(ctx *context.T, name string, opts ...naming.NamespaceOpt) (acl access.Permissions, etag string, err error) {
+func (ns *namespace) GetPermissions(ctx *context.T, name string, opts ...naming.NamespaceOpt) (acl access.Permissions, version string, err error) {
 	defer vlog.LogCall()()
 	client := v23.GetClient(ctx)
 
@@ -58,6 +58,6 @@
 		err = serr
 		return
 	}
-	err = call.Finish(&acl, &etag)
+	err = call.Finish(&acl, &version)
 	return
 }
diff --git a/profiles/internal/naming/namespace/acl_test.go b/profiles/internal/naming/namespace/acl_test.go
index 74e60c2..3cc7cb5 100644
--- a/profiles/internal/naming/namespace/acl_test.go
+++ b/profiles/internal/naming/namespace/acl_test.go
@@ -17,7 +17,7 @@
 	"v.io/v23/security/access"
 
 	_ "v.io/x/ref/profiles"
-	service "v.io/x/ref/services/mounttable/lib"
+	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
 )
@@ -57,7 +57,7 @@
 
 // Create a new mounttable service.
 func newMT(t *testing.T, ctx *context.T) (func(), string) {
-	estr, stopFunc, err := service.StartServers(ctx, v23.GetListenSpec(ctx), "", "", "")
+	estr, stopFunc, err := mounttablelib.StartServers(ctx, v23.GetListenSpec(ctx), "", "", "")
 	if err != nil {
 		t.Fatalf("r.NewServer: %s", err)
 	}
@@ -137,11 +137,11 @@
 	}
 
 	// Set/Get the mount point's AccessList.
-	acl, etag, err := ns.GetPermissions(rootCtx, "a/b/c")
+	acl, version, err := ns.GetPermissions(rootCtx, "a/b/c")
 	if err != nil {
 		t.Fatalf("GetPermissions a/b/c: %s", err)
 	}
-	if err := ns.SetPermissions(rootCtx, "a/b/c", openAccessList, etag); err != nil {
+	if err := ns.SetPermissions(rootCtx, "a/b/c", openAccessList, version); err != nil {
 		t.Fatalf("SetPermissions a/b/c: %s", err)
 	}
 	nacl, _, err := ns.GetPermissions(rootCtx, "a/b/c")
@@ -154,8 +154,8 @@
 
 	// Now Set/Get the parallel mount point's AccessList.
 	name := "a/b/c/d/e"
-	etag = "" // Parallel setacl with any other value is dangerous
-	if err := ns.SetPermissions(rootCtx, name, openAccessList, etag); err != nil {
+	version = "" // Parallel setacl with any other value is dangerous
+	if err := ns.SetPermissions(rootCtx, name, openAccessList, version); err != nil {
 		t.Fatalf("SetPermissions %s: %s", name, err)
 	}
 	nacl, _, err = ns.GetPermissions(rootCtx, name)
@@ -187,7 +187,7 @@
 	// Create mount points accessible only by root's key.
 	name = "a/b/c/d/f"
 	deadbody := "/the:8888/rain"
-	if err := ns.SetPermissions(rootCtx, name, closedAccessList, etag); err != nil {
+	if err := ns.SetPermissions(rootCtx, name, closedAccessList, version); err != nil {
 		t.Fatalf("SetPermissions %s: %s", name, err)
 	}
 	nacl, _, err = ns.GetPermissions(rootCtx, name)
@@ -215,7 +215,7 @@
 
 	// Create a mount point via Serve accessible only by root's key.
 	name = "a/b/c/d/g"
-	if err := ns.SetPermissions(rootCtx, name, closedAccessList, etag); err != nil {
+	if err := ns.SetPermissions(rootCtx, name, closedAccessList, version); err != nil {
 		t.Fatalf("SetPermissions %s: %s", name, err)
 	}
 	server, err := v23.NewServer(rootCtx)
diff --git a/profiles/internal/naming/namespace/all_test.go b/profiles/internal/naming/namespace/all_test.go
index 3c5fbb8..ec3ad92 100644
--- a/profiles/internal/naming/namespace/all_test.go
+++ b/profiles/internal/naming/namespace/all_test.go
@@ -24,7 +24,7 @@
 
 	_ "v.io/x/ref/profiles"
 	inamespace "v.io/x/ref/profiles/internal/naming/namespace"
-	mtlib "v.io/x/ref/services/mounttable/lib"
+	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
 )
@@ -184,7 +184,7 @@
 }
 
 func runMT(t *testing.T, ctx *context.T, mountPoint string) *serverEntry {
-	mtd, err := mtlib.NewMountTableDispatcher("")
+	mtd, err := mounttablelib.NewMountTableDispatcher("")
 	if err != nil {
 		boom(t, "NewMountTableDispatcher returned error: %v", err)
 	}
diff --git a/profiles/internal/rpc/benchmark/internal/server.go b/profiles/internal/rpc/benchmark/internal/server.go
index 483fd17..0c94e23 100644
--- a/profiles/internal/rpc/benchmark/internal/server.go
+++ b/profiles/internal/rpc/benchmark/internal/server.go
@@ -5,13 +5,11 @@
 package internal
 
 import (
-	"v.io/x/ref/security/flag"
-
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
-
+	"v.io/x/ref/lib/security/securityflag"
 	"v.io/x/ref/profiles/internal/rpc/benchmark"
 )
 
@@ -47,7 +45,7 @@
 		vlog.Fatalf("Listen failed: %v", err)
 	}
 
-	if err := server.Serve("", benchmark.BenchmarkServer(&impl{}), flag.NewAuthorizerOrDie()); err != nil {
+	if err := server.Serve("", benchmark.BenchmarkServer(&impl{}), securityflag.NewAuthorizerOrDie()); err != nil {
 		vlog.Fatalf("Serve failed: %v", err)
 	}
 	return eps[0].Name(), func() {
diff --git a/profiles/internal/rpc/client.go b/profiles/internal/rpc/client.go
index 458040f..200c33b 100644
--- a/profiles/internal/rpc/client.go
+++ b/profiles/internal/rpc/client.go
@@ -80,6 +80,8 @@
 	errBlessingGrant = verror.Register(pkgPath+".blessingGrantFailed", verror.NoRetry, "failed to grant blessing to server with blessings {3}{:4}")
 
 	errBlessingAdd = verror.Register(pkgPath+".blessingAddFailed", verror.NoRetry, "failed to add blessing granted to server {3}{:4}")
+
+	errNoPrincipal = verror.Register(pkgPath+".noPrincipal", verror.NoRetry, "principal required for secure connections")
 )
 
 type client struct {
@@ -410,7 +412,9 @@
 	//     on here.
 	var principal security.Principal
 	if callEncrypted(opts) {
-		principal = v23.GetPrincipal(ctx)
+		if principal = v23.GetPrincipal(ctx); principal == nil {
+			return nil, verror.NoRetry, verror.New(errNoPrincipal, ctx)
+		}
 	}
 
 	// servers is now ordered by the priority heurestic implemented in
@@ -488,7 +492,7 @@
 				return nil, verror.NoRetry, err
 			}
 
-			if err := fc.prepareBlessingsAndDischarges(method, args, r.rejectedBlessings, opts); err != nil {
+			if err := fc.prepareBlessingsAndDischarges(ctx, method, r.suffix, args, r.rejectedBlessings, opts); err != nil {
 				r.err = verror.New(verror.ErrNotTrusted, ctx, name, r.flow.RemoteBlessings(), err)
 				vlog.VI(2).Infof("rpc: err: %s", r.err)
 				r.flow.Close()
@@ -605,19 +609,13 @@
 // server, (2) preparing blessings that the client authenticates with,
 // and, (3) preparing any discharges for third-party caveats on the client's
 // blessings.
-func (fc *flowClient) prepareBlessingsAndDischarges(method string, args []interface{}, rejectedServerBlessings []security.RejectedBlessing, opts []rpc.CallOpt) error {
+func (fc *flowClient) prepareBlessingsAndDischarges(ctx *context.T, method, suffix string, args []interface{}, rejectedServerBlessings []security.RejectedBlessing, opts []rpc.CallOpt) error {
 	// LocalPrincipal is nil which means we are operating under
 	// SecurityNone.
 	if fc.flow.LocalPrincipal() == nil {
 		return nil
 	}
 
-	// Prepare blessings that must be granted to the server (using any
-	// rpc.Granter implementation in 'opts').
-	if err := fc.prepareGrantedBlessings(opts); err != nil {
-		return err
-	}
-
 	// Fetch blessings from the client's blessing store that are to be
 	// shared with the server.
 	if fc.blessings = fc.flow.LocalPrincipal().BlessingStore().ForPeer(fc.server...); fc.blessings.IsZero() {
@@ -635,14 +633,44 @@
 		}
 		fc.discharges = fc.dc.PrepareDischarges(fc.ctx, fc.blessings.ThirdPartyCaveats(), impetus)
 	}
+
+	// Prepare blessings that must be granted to the server (using any
+	// rpc.Granter implementation in 'opts').
+	//
+	// NOTE(ataly, suharshs): Before invoking the granter, we set the parameters of
+	// the current call on the context. The context would now have two principals
+	// set on it -- one available via v23.GetPrincipal(ctx) and the other available
+	// via security.GetCall(ctx).LocalPrincipal(). While in theory the two principals
+	// can be different, the flow.LocalPrincipal == nil check at the beginning
+	// of this method ensures that the two are the same and non-nil at this point
+	// in the code.
+	ldischargeMap := make(map[string]security.Discharge)
+	for _, d := range fc.discharges {
+		ldischargeMap[d.ID()] = d
+	}
+	seccall := security.NewCall(&security.CallParams{
+		LocalPrincipal:   fc.flow.LocalPrincipal(),
+		LocalBlessings:   fc.blessings,
+		RemoteBlessings:  fc.flow.RemoteBlessings(),
+		LocalEndpoint:    fc.flow.LocalEndpoint(),
+		RemoteEndpoint:   fc.flow.RemoteEndpoint(),
+		LocalDischarges:  ldischargeMap,
+		RemoteDischarges: fc.flow.RemoteDischarges(),
+		Method:           method,
+		Suffix:           suffix,
+	})
+	ctx = security.SetCall(ctx, seccall)
+	if err := fc.prepareGrantedBlessings(ctx, opts); err != nil {
+		return err
+	}
 	return nil
 }
 
-func (fc *flowClient) prepareGrantedBlessings(opts []rpc.CallOpt) error {
+func (fc *flowClient) prepareGrantedBlessings(ctx *context.T, opts []rpc.CallOpt) error {
 	for _, o := range opts {
 		switch v := o.(type) {
 		case rpc.Granter:
-			if b, err := v.Grant(fc.flow.RemoteBlessings()); err != nil {
+			if b, err := v.Grant(ctx); err != nil {
 				return verror.New(errBlessingGrant, fc.ctx, fc.server, err)
 			} else if fc.grantedBlessings, err = security.UnionOfBlessings(fc.grantedBlessings, b); err != nil {
 				return verror.New(errBlessingAdd, fc.ctx, fc.server, err)
diff --git a/profiles/internal/rpc/full_test.go b/profiles/internal/rpc/full_test.go
index 3ff09b7..b6916ce 100644
--- a/profiles/internal/rpc/full_test.go
+++ b/profiles/internal/rpc/full_test.go
@@ -801,14 +801,24 @@
 	}
 }
 
-// granter implements rpc.Granter, returning a fixed (security.Blessings, error) pair.
+// granter implements rpc.Granter.
+//
+// It returns the specified (security.Blessings, error) pair if either the
+// blessing or the error is specified. Otherwise it returns a blessing
+// derived from the local blessings of the current call.
 type granter struct {
 	rpc.CallOpt
 	b   security.Blessings
 	err error
 }
 
-func (g granter) Grant(id security.Blessings) (security.Blessings, error) { return g.b, g.err }
+func (g granter) Grant(ctx *context.T) (security.Blessings, error) {
+	if !g.b.IsZero() || g.err != nil {
+		return g.b, g.err
+	}
+	call := security.GetCall(ctx)
+	return call.LocalPrincipal().Bless(call.RemoteBlessings().PublicKey(), call.LocalBlessings(), "blessed", security.UnconstrainedUse())
+}
 
 func TestGranter(t *testing.T) {
 	var (
@@ -828,6 +838,7 @@
 		{blessing: ""},
 		{granter: granter{b: bless(pclient, pserver, "blessed")}, blessing: "client/blessed"},
 		{granter: granter{err: errors.New("hell no")}, startErrID: verror.ErrNotTrusted, starterr: "hell no"},
+		{granter: granter{}, blessing: "client/blessed"},
 		{granter: granter{b: pclient.BlessingStore().Default()}, finishErrID: verror.ErrNoAccess, finisherr: "blessing granted not bound to this server"},
 	}
 	for i, test := range tests {
@@ -1642,6 +1653,39 @@
 	}
 }
 
+func TestNoPrincipal(t *testing.T) {
+	ctx, shutdown := initForTest()
+	defer shutdown()
+	sm := imanager.InternalNew(naming.FixedRoutingID(0x66666666))
+	defer sm.Shutdown()
+	ns := tnaming.NewSimpleNamespace()
+	server, err := testInternalNewServer(ctx, sm, ns, testutil.NewPrincipal("server"))
+	if err != nil {
+		t.Fatalf("InternalNewServer failed: %v", err)
+	}
+	if _, err = server.Listen(listenSpec); err != nil {
+		t.Fatalf("server.Listen failed: %v", err)
+	}
+	disp := &testServerDisp{&testServer{}}
+	if err := server.ServeDispatcher("mp/server", disp); err != nil {
+		t.Fatalf("server.Serve failed: %v", err)
+	}
+	client, err := InternalNewClient(sm, ns)
+	if err != nil {
+		t.Fatalf("InternalNewClient failed: %v", err)
+	}
+
+	// A call should fail if the principal in the ctx is nil and SecurityNone is not specified.
+	ctx, err = v23.SetPrincipal(ctx, nil)
+	if err != nil {
+		t.Fatalf("failed to set principal: %v", err)
+	}
+	_, err = client.StartCall(ctx, "mp/server", "Echo", []interface{}{"foo"})
+	if err == nil || verror.ErrorID(err) != errNoPrincipal.ID {
+		t.Fatalf("Expected errNoPrincipal, got %v", err)
+	}
+}
+
 func TestCallWithNilContext(t *testing.T) {
 	sm := imanager.InternalNew(naming.FixedRoutingID(0x66666666))
 	defer sm.Shutdown()
@@ -1655,7 +1699,7 @@
 		t.Errorf("Expected nil interface got: %#v", call)
 	}
 	if verror.ErrorID(err) != verror.ErrBadArg.ID {
-		t.Errorf("Expected an BadArg error, got: %s", err.Error())
+		t.Errorf("Expected a BadArg error, got: %s", err.Error())
 	}
 }
 
diff --git a/profiles/internal/rpc/reserved.go b/profiles/internal/rpc/reserved.go
index 890f5c3..7152349 100644
--- a/profiles/internal/rpc/reserved.go
+++ b/profiles/internal/rpc/reserved.go
@@ -345,24 +345,11 @@
 }
 
 func callWithSuffix(src rpc.StreamServerCall, suffix string) rpc.StreamServerCall {
-	ctx := src.Context()
-	secCall := security.GetCall(ctx)
-	ctx = security.SetCall(ctx, &derivedSecurityCall{
-		Call:       secCall,
-		suffix:     suffix,
-		methodTags: secCall.MethodTags(),
-	})
-	return &derivedServerCall{src, ctx, suffix}
+	return &derivedServerCall{src, securityCallWithSuffix(src.Context(), suffix), suffix}
 }
 
 func callWithMethodTags(src rpc.StreamServerCall, tags []*vdl.Value) rpc.StreamServerCall {
-	ctx, suffix := src.Context(), src.Suffix()
-	ctx = security.SetCall(ctx, &derivedSecurityCall{
-		Call:       security.GetCall(ctx),
-		suffix:     suffix,
-		methodTags: tags,
-	})
-	return &derivedServerCall{src, ctx, suffix}
+	return &derivedServerCall{src, securityCallWithMethodTags(src.Context(), tags), src.Suffix()}
 }
 
 func (c *derivedServerCall) Context() *context.T { return c.ctx }
@@ -374,5 +361,23 @@
 	methodTags []*vdl.Value
 }
 
+func securityCallWithSuffix(ctx *context.T, suffix string) *context.T {
+	secCall := security.GetCall(ctx)
+	return security.SetCall(ctx, &derivedSecurityCall{
+		Call:       secCall,
+		suffix:     suffix,
+		methodTags: secCall.MethodTags(),
+	})
+}
+
+func securityCallWithMethodTags(ctx *context.T, tags []*vdl.Value) *context.T {
+	secCall := security.GetCall(ctx)
+	return security.SetCall(ctx, &derivedSecurityCall{
+		Call:       secCall,
+		suffix:     secCall.Suffix(),
+		methodTags: tags,
+	})
+}
+
 func (c *derivedSecurityCall) Suffix() string           { return c.suffix }
 func (c *derivedSecurityCall) MethodTags() []*vdl.Value { return c.methodTags }
diff --git a/profiles/internal/rpc/resolve_test.go b/profiles/internal/rpc/resolve_test.go
index a143c3a..ef41e60 100644
--- a/profiles/internal/rpc/resolve_test.go
+++ b/profiles/internal/rpc/resolve_test.go
@@ -25,7 +25,7 @@
 	inaming "v.io/x/ref/profiles/internal/naming"
 	irpc "v.io/x/ref/profiles/internal/rpc"
 	grt "v.io/x/ref/profiles/internal/rt"
-	mounttable "v.io/x/ref/services/mounttable/lib"
+	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test/expect"
 	"v.io/x/ref/test/modules"
 )
@@ -75,9 +75,9 @@
 		return fmt.Errorf("root failed: %v", err)
 	}
 	mp := ""
-	mt, err := mounttable.NewMountTableDispatcher("")
+	mt, err := mounttablelib.NewMountTableDispatcher("")
 	if err != nil {
-		return fmt.Errorf("mounttable.NewMountTableDispatcher failed: %s", err)
+		return fmt.Errorf("mounttablelib.NewMountTableDispatcher failed: %s", err)
 	}
 	eps, err := server.Listen(lspec)
 	if err != nil {
diff --git a/profiles/internal/rpc/server.go b/profiles/internal/rpc/server.go
index e995815..db689b8 100644
--- a/profiles/internal/rpc/server.go
+++ b/profiles/internal/rpc/server.go
@@ -26,13 +26,12 @@
 	"v.io/v23/verror"
 	"v.io/v23/vom"
 	"v.io/v23/vtrace"
-	"v.io/x/lib/vlog"
-	"v.io/x/ref/profiles/internal/rpc/stream"
-
 	"v.io/x/lib/netstate"
+	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/stats"
 	"v.io/x/ref/profiles/internal/lib/publisher"
 	inaming "v.io/x/ref/profiles/internal/naming"
+	"v.io/x/ref/profiles/internal/rpc/stream"
 	"v.io/x/ref/profiles/internal/rpc/stream/vc"
 
 	// TODO(cnicolaou): finish verror2 -> verror transition, in particular
@@ -157,7 +156,13 @@
 
 var _ rpc.Server = (*server)(nil)
 
-func InternalNewServer(ctx *context.T, streamMgr stream.Manager, ns namespace.T, client rpc.Client, principal security.Principal, opts ...rpc.ServerOpt) (rpc.Server, error) {
+func InternalNewServer(
+	ctx *context.T,
+	streamMgr stream.Manager,
+	ns namespace.T,
+	client rpc.Client,
+	principal security.Principal,
+	opts ...rpc.ServerOpt) (rpc.Server, error) {
 	ctx, cancel := context.WithRootCancel(ctx)
 	ctx, _ = vtrace.SetNewSpan(ctx, "NewServer")
 	statsPrefix := naming.Join("rpc", "server", "routing-id", streamMgr.RoutingID().String())
@@ -951,7 +956,6 @@
 	discharges       map[string]security.Discharge
 	starttime        time.Time
 	endStreamArgs    bool // are the stream args at EOF?
-	allowDebug       bool // true if the caller is permitted to view debug information.
 }
 
 var _ rpc.Stream = (*flowServer)(nil)
@@ -996,6 +1000,25 @@
 	return fs, nil
 }
 
+// authorizeVtrace works by simulating a call to __debug/vtrace.Trace.  That
+// rpc is essentially equivalent in power to the data we are attempting to
+// attach here.
+func (fs *flowServer) authorizeVtrace() error {
+	// Set up a context as though we were calling __debug/vtrace.
+	params := &security.CallParams{}
+	params.Copy(security.GetCall(fs.T))
+	params.Method = "Trace"
+	params.MethodTags = []*vdl.Value{vdl.ValueOf(access.Debug)}
+	params.Suffix = "__debug/vtrace"
+	ctx := security.SetCall(fs.T, security.NewCall(params))
+
+	var auth security.Authorizer
+	if fs.server.dispReserved != nil {
+		_, auth, _ = fs.server.dispReserved.Lookup(params.Suffix)
+	}
+	return authorize(ctx, auth)
+}
+
 func (fs *flowServer) serve() error {
 	defer fs.flow.Close()
 
@@ -1004,7 +1027,8 @@
 	vtrace.GetSpan(fs.T).Finish()
 
 	var traceResponse vtrace.Response
-	if fs.allowDebug {
+	// Check if the caller is permitted to view vtrace data.
+	if fs.authorizeVtrace() == nil {
 		traceResponse = vtrace.GetResponse(fs.T)
 	}
 
@@ -1122,13 +1146,12 @@
 			return nil, verror.New(verror.ErrBadProtocol, fs.T, newErrBadInputArg(fs.T, fs.suffix, fs.method, uint64(ix), err))
 		}
 	}
+
 	// Check application's authorization policy.
 	if err := authorize(fs.T, auth); err != nil {
 		return nil, err
 	}
-	// Check if the caller is permitted to view debug information.
-	// TODO(mattr): Is access.Debug the right thing to check?
-	fs.allowDebug = authorize(setDebugCall(fs.T), auth) == nil
+
 	// Invoke the method.
 	results, err := invoker.Invoke(strippedMethod, fs, argptrs)
 	fs.server.stats.record(fs.method, time.Since(fs.starttime))
@@ -1254,20 +1277,6 @@
 	return nil
 }
 
-// debugSecurityCall wraps another security.Call but always returns
-// the debug method tag.
-type debugSecurityCall struct {
-	security.Call
-}
-
-func (debugSecurityCall) MethodTags() []*vdl.Value {
-	return []*vdl.Value{vdl.ValueOf(access.Debug)}
-}
-
-func setDebugCall(ctx *context.T) *context.T {
-	return security.SetCall(ctx, debugSecurityCall{security.GetCall(ctx)})
-}
-
 // Send implements the rpc.Stream method.
 func (fs *flowServer) Send(item interface{}) error {
 	defer vlog.LogCall()()
diff --git a/profiles/internal/rpc/stream/errors.go b/profiles/internal/rpc/stream/errors.go
new file mode 100644
index 0000000..f7d7515
--- /dev/null
+++ b/profiles/internal/rpc/stream/errors.go
@@ -0,0 +1,36 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package stream
+
+import (
+	"v.io/v23/verror"
+)
+
+const pkgPath = "v.io/x/ref/profiles/internal/rpc/stream"
+
+// The stream family of packages guarantee to return one of the verror codes defined here, their
+// messages are constructed so as to avoid embedding a component/method name and are thus
+// more suitable for inclusion in other verrors.
+var (
+	ErrSecurity = verror.Register(pkgPath+".errSecurity", verror.NoRetry, "{:3}")
+	ErrNetwork  = verror.Register(pkgPath+".errNetwork", verror.NoRetry, "{:3}")
+	ErrProxy    = verror.Register(pkgPath+".errProxy", verror.NoRetry, "{:3}")
+	ErrBadArg   = verror.Register(pkgPath+".errBadArg", verror.NoRetry, "{:3}")
+	ErrBadState = verror.Register(pkgPath+".errBadState", verror.NoRetry, "{:3}")
+	// TODO(cnicolaou): remove this when the rest of the stream sub packages are converted.
+	ErrSecOrNet = verror.Register(pkgPath+".errSecOrNet", verror.NoRetry, "{:3}")
+	// Update IsStreamError below if you add any other errors here.
+)
+
+// IsStreamError returns true if the err is one of the verror codes defined by this package.
+func IsStreamError(err error) bool {
+	id := verror.ErrorID(err)
+	switch id {
+	case ErrSecurity.ID, ErrNetwork.ID, ErrProxy.ID, ErrBadArg.ID, ErrBadState.ID, ErrSecOrNet.ID:
+		return true
+	default:
+		return false
+	}
+}
diff --git a/profiles/internal/rpc/stream/manager/error_test.go b/profiles/internal/rpc/stream/manager/error_test.go
new file mode 100644
index 0000000..b2c2f9d
--- /dev/null
+++ b/profiles/internal/rpc/stream/manager/error_test.go
@@ -0,0 +1,135 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package manager_test
+
+import (
+	"net"
+	"testing"
+	"time"
+
+	"v.io/v23/naming"
+	"v.io/v23/rpc"
+	"v.io/v23/security"
+	"v.io/v23/verror"
+
+	_ "v.io/x/ref/profiles"
+	inaming "v.io/x/ref/profiles/internal/naming"
+	"v.io/x/ref/profiles/internal/rpc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream/manager"
+	"v.io/x/ref/profiles/internal/rpc/stream/message"
+	"v.io/x/ref/profiles/internal/testing/mocks/mocknet"
+	"v.io/x/ref/test"
+	"v.io/x/ref/test/testutil"
+)
+
+func TestListenErrors(t *testing.T) {
+	server := manager.InternalNew(naming.FixedRoutingID(0x1))
+	pserver := testutil.NewPrincipal("server")
+
+	// principal, no blessings
+	_, _, err := server.Listen("tcp", "127.0.0.1:0", pserver, security.Blessings{}, nil)
+	if verror.ErrorID(err) != stream.ErrBadArg.ID {
+		t.Fatalf("wrong error: %s", err)
+	}
+	t.Log(err)
+
+	// blessings, no principal
+	_, _, err = server.Listen("tcp", "127.0.0.1:0", nil, pserver.BlessingStore().Default(), nil)
+	if verror.ErrorID(err) != stream.ErrBadArg.ID {
+		t.Fatalf("wrong error: %s", err)
+	}
+	t.Log(err)
+
+	// bad protocol
+	_, _, err = server.Listen("foo", "127.0.0.1:0", pserver, pserver.BlessingStore().Default())
+	if verror.ErrorID(err) != stream.ErrBadArg.ID {
+		t.Fatalf("wrong error: %s", err)
+	}
+	t.Log(err)
+
+	// bad address
+	_, _, err = server.Listen("tcp", "xx.0.0.1:0", pserver, pserver.BlessingStore().Default())
+	if verror.ErrorID(err) != stream.ErrBadArg.ID {
+		t.Fatalf("wrong error: %s", err)
+	}
+	t.Log(err)
+
+	// bad address for proxy
+	_, _, err = server.Listen("v23", "127x.0.0.1", pserver, pserver.BlessingStore().Default())
+	if verror.ErrorID(err) != stream.ErrBadArg.ID {
+		t.Fatalf("wrong error: %s", err)
+	}
+	t.Log(err)
+}
+
+func acceptLoop(ln stream.Listener) {
+	for {
+		f, err := ln.Accept()
+		if err != nil {
+			return
+		}
+		f.Close()
+	}
+
+}
+func dropDataDialer(network, address string, timeout time.Duration) (net.Conn, error) {
+	matcher := func(read bool, msg message.T) bool {
+		switch msg.(type) {
+		case *message.HopSetup:
+			return true
+		}
+		return false
+	}
+	opts := mocknet.Opts{
+		Mode:              mocknet.V23CloseAtMessage,
+		V23MessageMatcher: matcher,
+	}
+	return mocknet.DialerWithOpts(opts, network, address, timeout)
+}
+
+func TestDialErrors(t *testing.T) {
+	_, shutdown := test.InitForTest()
+	defer shutdown()
+	server := manager.InternalNew(naming.FixedRoutingID(0x55555555))
+	client := manager.InternalNew(naming.FixedRoutingID(0xcccccccc))
+	pclient := testutil.NewPrincipal("client")
+	pserver := testutil.NewPrincipal("server")
+
+	// bad protocol
+	ep, _ := inaming.NewEndpoint(naming.FormatEndpoint("x", "127.0.0.1:2"))
+	_, err := client.Dial(ep, pclient)
+	if verror.ErrorID(err) != stream.ErrBadArg.ID {
+		t.Fatalf("wrong error: %s", err)
+	}
+	t.Log(err)
+
+	// no server
+	ep, _ = inaming.NewEndpoint(naming.FormatEndpoint("tcp", "127.0.0.1:2"))
+	_, err = client.Dial(ep, pclient)
+	if verror.ErrorID(err) != stream.ErrNetwork.ID {
+		t.Fatalf("wrong error: %s", err)
+	}
+	t.Log(err)
+
+	rpc.RegisterProtocol("dropData", dropDataDialer, net.Listen)
+
+	ln, sep, err := server.Listen("tcp", "127.0.0.1:0", pserver, pserver.BlessingStore().Default())
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	// Server will just listen for flows and close them.
+	go acceptLoop(ln)
+
+	cep, err := mocknet.RewriteEndpointProtocol(sep.String(), "dropData")
+	if err != nil {
+		t.Fatal(err)
+	}
+	_, err = client.Dial(cep, pclient)
+	if verror.ErrorID(err) != stream.ErrNetwork.ID {
+		t.Fatalf("wrong error: %s", err)
+	}
+	t.Log(err)
+}
diff --git a/profiles/internal/rpc/stream/manager/listener.go b/profiles/internal/rpc/stream/manager/listener.go
index 4d705ba..16ace2f 100644
--- a/profiles/internal/rpc/stream/manager/listener.go
+++ b/profiles/internal/rpc/stream/manager/listener.go
@@ -5,7 +5,6 @@
 package manager
 
 import (
-	"errors"
 	"fmt"
 	"net"
 	"strings"
@@ -25,7 +24,23 @@
 	"v.io/x/ref/profiles/internal/rpc/stream"
 )
 
-var errListenerIsClosed = errors.New("Listener has been Closed")
+func reg(id, msg string) verror.IDAction {
+	return verror.Register(verror.ID(pkgPath+id), verror.NoRetry, msg)
+}
+
+var (
+	errVomEncoder                 = reg(".vomEncoder", "failed to create vom encoder{:3}")
+	errVomDecoder                 = reg(".vomDecoder", "failed to create vom decoder{:3}")
+	errVomEncodeRequest           = reg(".vomEncodeRequest", "failed to encode request to proxy{:3}")
+	errVomDecodeResponse          = reg(".vomDecodeRequest", "failed to decoded response from proxy{:3}")
+	errProxyError                 = reg(".proxyError", "proxy error {:3}")
+	errProxyEndpointError         = reg(".proxyEndpointError", "proxy returned an invalid endpoint {:3}{:4}")
+	errAlreadyConnected           = reg(".alreadyConnected", "already connected to proxy and accepting connections? VIF: {3}, StartAccepting{:_}")
+	errFailedToCreateLivenessFlow = reg(".failedToCreateLivenessFlow", "unable to create liveness check flow to proxy{:3}")
+	errAcceptFailed               = reg(".acceptFailed", "accept failed{:3}")
+	errFailedToEstablishVC        = reg(".failedToEstablishVC", "VC establishment with proxy failed{:_}")
+	errListenerAlreadyClosed      = reg(".listenerAlreadyClosed", "listener already closed")
+)
 
 // listener extends stream.Listener with a DebugString method.
 type listener interface {
@@ -106,9 +121,9 @@
 	item, err := ln.q.Get(nil)
 	switch {
 	case err == upcqueue.ErrQueueIsClosed:
-		return nil, errListenerIsClosed
+		return nil, verror.New(stream.ErrNetwork, nil, verror.New(errListenerAlreadyClosed, nil))
 	case err != nil:
-		return nil, fmt.Errorf("Accept failed: %v", err)
+		return nil, verror.New(stream.ErrNetwork, nil, verror.New(errAcceptFailed, nil, err))
 	default:
 		return item.(vif.ConnectorAndFlow).Flow, nil
 	}
@@ -187,7 +202,7 @@
 	// Prepend the default idle timeout for VC.
 	opts = append([]stream.ListenerOpt{vc.IdleTimeout{defaultIdleTimeout}}, opts...)
 	if err := vf.StartAccepting(opts...); err != nil {
-		return nil, nil, fmt.Errorf("already connected to proxy and accepting connections? VIF: %v, StartAccepting error: %v", vf, err)
+		return nil, nil, verror.New(stream.ErrNetwork, nil, verror.New(errAlreadyConnected, nil, vf, err))
 	}
 	// Proxy protocol: See v.io/x/ref/profiles/internal/rpc/stream/proxy/protocol.vdl
 	//
@@ -198,12 +213,14 @@
 		if verror.ErrorID(err) == verror.ErrAborted.ID {
 			ln.manager.vifs.Delete(vf)
 		}
-		return nil, nil, fmt.Errorf("VC establishment with proxy failed: %v", err)
+		// TODO(cnicolaou): use one of ErrSecurity or ErrProtocol when the vif package
+		// is converted.
+		return nil, nil, verror.New(stream.ErrSecOrNet, nil, verror.New(errFailedToEstablishVC, nil, err))
 	}
 	flow, err := vc.Connect()
 	if err != nil {
 		vf.StopAccepting()
-		return nil, nil, fmt.Errorf("unable to create liveness check flow to proxy: %v", err)
+		return nil, nil, verror.New(stream.ErrNetwork, nil, verror.New(errFailedToCreateLivenessFlow, nil, err))
 	}
 	var request proxy.Request
 	var response proxy.Response
@@ -211,34 +228,34 @@
 	if err != nil {
 		flow.Close()
 		vf.StopAccepting()
-		return nil, nil, fmt.Errorf("failed to create new Encoder: %v", err)
+		return nil, nil, verror.New(stream.ErrNetwork, nil, verror.New(errVomDecoder, nil, err))
 	}
 	if err := enc.Encode(request); err != nil {
 		flow.Close()
 		vf.StopAccepting()
-		return nil, nil, fmt.Errorf("failed to encode request to proxy: %v", err)
+		return nil, nil, verror.New(stream.ErrNetwork, nil, verror.New(errVomEncodeRequest, nil, err))
 	}
 	dec, err := vom.NewDecoder(flow)
 	if err != nil {
 		flow.Close()
 		vf.StopAccepting()
-		return nil, nil, fmt.Errorf("failed to create new Decoder: %v", err)
+		return nil, nil, verror.New(stream.ErrNetwork, nil, verror.New(errVomDecoder, nil, err))
 	}
 	if err := dec.Decode(&response); err != nil {
 		flow.Close()
 		vf.StopAccepting()
-		return nil, nil, fmt.Errorf("failed to decode response from proxy: %v", err)
+		return nil, nil, verror.New(stream.ErrNetwork, nil, verror.New(errVomDecodeResponse, nil, err))
 	}
 	if response.Error != nil {
 		flow.Close()
 		vf.StopAccepting()
-		return nil, nil, fmt.Errorf("proxy error: %v", response.Error)
+		return nil, nil, verror.New(stream.ErrProxy, nil, response.Error)
 	}
 	ep, err := inaming.NewEndpoint(response.Endpoint)
 	if err != nil {
 		flow.Close()
 		vf.StopAccepting()
-		return nil, nil, fmt.Errorf("proxy returned invalid endpoint(%v): %v", response.Endpoint, err)
+		return nil, nil, verror.New(stream.ErrProxy, nil, verror.New(errProxyEndpointError, nil, response.Endpoint, err))
 	}
 	go func(vf *vif.VIF, flow stream.Flow, q *upcqueue.T) {
 		<-flow.Closed()
@@ -252,9 +269,9 @@
 	item, err := ln.q.Get(nil)
 	switch {
 	case err == upcqueue.ErrQueueIsClosed:
-		return nil, errListenerIsClosed
+		return nil, verror.New(stream.ErrNetwork, nil, verror.New(errListenerAlreadyClosed, nil))
 	case err != nil:
-		return nil, fmt.Errorf("Accept failed: %v", err)
+		return nil, verror.New(stream.ErrNetwork, nil, verror.New(errAcceptFailed, nil, err))
 	default:
 		return item.(vif.ConnectorAndFlow).Flow, nil
 	}
diff --git a/profiles/internal/rpc/stream/manager/manager.go b/profiles/internal/rpc/stream/manager/manager.go
index 8d6e2f8..756a479 100644
--- a/profiles/internal/rpc/stream/manager/manager.go
+++ b/profiles/internal/rpc/stream/manager/manager.go
@@ -6,7 +6,6 @@
 package manager
 
 import (
-	"errors"
 	"fmt"
 	"net"
 	"strings"
@@ -28,10 +27,14 @@
 	"v.io/x/ref/profiles/internal/rpc/version"
 )
 
+const pkgPath = "v.io/x/ref/profiles/internal/rpc/stream/manager"
+
 var (
-	errShutDown                                = errors.New("manager has been shut down")
-	errProvidedServerBlessingsWithoutPrincipal = errors.New("blessings provided but no known principal")
-	errNoBlessingNames                         = errors.New("stream.ListenerOpts includes a principal but no blessing names could be extracted")
+	errUnknownNetwork                          = reg(".unknownNetwork", "unknown network{:3}")
+	errEndpointParseError                      = reg(".endpointParseError", "failed to parse endpoint {3}{:4}")
+	errAlreadyShutdown                         = reg(".alreadyShutdown", "already shutdown")
+	errProvidedServerBlessingsWithoutPrincipal = reg(".serverBlessingsWithoutPrincipal", "blessings provided but with no principal")
+	errNoBlessingNames                         = reg(".noBlessingNames", "no blessing names could be extracted for the provided principal")
 )
 
 const (
@@ -70,7 +73,7 @@
 
 var _ stream.Manager = (*manager)(nil)
 
-type DialTimeout struct{ time.Duration }
+type DialTimeout time.Duration
 
 func (DialTimeout) RPCStreamVCOpt() {}
 func (DialTimeout) RPCClientOpt()   {}
@@ -79,7 +82,7 @@
 	if d, _, _ := rpc.RegisteredProtocol(network); d != nil {
 		return d(network, address, timeout)
 	}
-	return nil, fmt.Errorf("unknown network %s", network)
+	return nil, verror.New(stream.ErrBadArg, nil, verror.New(errUnknownNetwork, nil, network))
 }
 
 // FindOrDialVIF returns the network connection (VIF) to the provided address
@@ -91,7 +94,7 @@
 	for _, o := range opts {
 		switch v := o.(type) {
 		case DialTimeout:
-			timeout = v.Duration
+			timeout = time.Duration(v)
 		}
 	}
 	addr := remote.Addr()
@@ -102,7 +105,10 @@
 	vlog.VI(1).Infof("(%q, %q) not in VIF cache. Dialing", network, address)
 	conn, err := dial(network, address, timeout)
 	if err != nil {
-		return nil, fmt.Errorf("net.Dial(%q, %q) failed: %v", network, address, err)
+		if !stream.IsStreamError(err) {
+			err = verror.New(stream.ErrNetwork, nil, err)
+		}
+		return nil, err
 	}
 	// (network, address) in the endpoint might not always match up
 	// with the key used in the vifs. For example:
@@ -126,7 +132,7 @@
 	vf, err := vif.InternalNewDialedVIF(conn, m.rid, principal, vRange, m.deleteVIF, opts...)
 	if err != nil {
 		conn.Close()
-		return nil, fmt.Errorf("failed to create VIF: %v", err)
+		return nil, verror.New(stream.ErrNetwork, nil, err)
 	}
 	// TODO(ashankar): If two goroutines are simultaneously invoking
 	// manager.Dial, it is possible that two VIFs are inserted into m.vifs
@@ -162,7 +168,7 @@
 	if _, l, _ := rpc.RegisteredProtocol(protocol); l != nil {
 		return l(protocol, address)
 	}
-	return nil, fmt.Errorf("unknown network %s", protocol)
+	return nil, verror.New(stream.ErrBadArg, nil, verror.New(errUnknownNetwork, nil, protocol))
 }
 
 func (m *manager) Listen(protocol, address string, principal security.Principal, blessings security.Blessings, opts ...stream.ListenerOpt) (stream.Listener, naming.Endpoint, error) {
@@ -182,7 +188,7 @@
 	m.muListeners.Lock()
 	if m.shutdown {
 		m.muListeners.Unlock()
-		return nil, nil, errShutDown
+		return nil, nil, verror.New(stream.ErrBadState, nil, verror.New(errAlreadyShutdown, nil))
 	}
 	m.muListeners.Unlock()
 
@@ -190,20 +196,24 @@
 		// Act as if listening on the address of a remote proxy.
 		ep, err := inaming.NewEndpoint(address)
 		if err != nil {
-			return nil, nil, fmt.Errorf("failed to parse endpoint %q: %v", address, err)
+			return nil, nil, verror.New(stream.ErrBadArg, nil, verror.New(errEndpointParseError, nil, address, err))
 		}
 		return m.remoteListen(ep, principal, opts)
 	}
 	netln, err := listen(protocol, address)
 	if err != nil {
-		return nil, nil, fmt.Errorf("net.Listen(%q, %q) failed: %v", protocol, address, err)
+		if !stream.IsStreamError(err) {
+			vlog.Infof("XXXX %v : %s\n", verror.ErrorID(err), err)
+			err = verror.New(stream.ErrBadArg, nil, err)
+		}
+		return nil, nil, err
 	}
 
 	m.muListeners.Lock()
 	if m.shutdown {
 		m.muListeners.Unlock()
 		closeNetListener(netln)
-		return nil, nil, errShutDown
+		return nil, nil, verror.New(stream.ErrBadState, nil, verror.New(errAlreadyShutdown, nil))
 	}
 
 	ln := newNetListener(m, netln, principal, blessings, opts)
@@ -221,7 +231,7 @@
 	defer m.muListeners.Unlock()
 	if m.shutdown {
 		ln.Close()
-		return nil, nil, errShutDown
+		return nil, nil, verror.New(stream.ErrBadState, nil, verror.New(errAlreadyShutdown, nil))
 	}
 	m.listeners[ln] = true
 	return ln, ep, nil
@@ -310,7 +320,7 @@
 
 func extractBlessingNames(p security.Principal, b security.Blessings) ([]string, error) {
 	if !b.IsZero() && p == nil {
-		return nil, errProvidedServerBlessingsWithoutPrincipal
+		return nil, verror.New(stream.ErrBadArg, nil, verror.New(errProvidedServerBlessingsWithoutPrincipal, nil))
 	}
 	if p == nil {
 		return nil, nil
@@ -320,7 +330,7 @@
 		ret = append(ret, b)
 	}
 	if len(ret) == 0 {
-		return nil, errNoBlessingNames
+		return nil, verror.New(stream.ErrBadArg, nil, verror.New(errNoBlessingNames, nil))
 	}
 	return ret, nil
 }
diff --git a/profiles/internal/rpc/stream/manager/manager_test.go b/profiles/internal/rpc/stream/manager/manager_test.go
index 3dc9604..b26d57e 100644
--- a/profiles/internal/rpc/stream/manager/manager_test.go
+++ b/profiles/internal/rpc/stream/manager/manager_test.go
@@ -160,7 +160,7 @@
 	go func() {
 		// 203.0.113.0 is TEST-NET-3 from RFC5737
 		ep, _ := inaming.NewEndpoint(naming.FormatEndpoint("tcp", "203.0.113.10:80"))
-		_, err := client.Dial(ep, testutil.NewPrincipal("client"), DialTimeout{time.Second})
+		_, err := client.Dial(ep, testutil.NewPrincipal("client"), DialTimeout(time.Second))
 		ch <- err
 	}()
 
@@ -719,13 +719,13 @@
 	rpc.RegisterProtocol("tn", dialer, listener)
 
 	_, _, err := server.Listen("tnx", "127.0.0.1:0", principal, blessings)
-	if err == nil || !strings.Contains(err.Error(), "unknown network tnx") {
-		t.Fatal("expected error is missing (%v)", err)
+	if err == nil || !strings.Contains(err.Error(), "unknown network: tnx") {
+		t.Fatalf("expected error is missing (%v)", err)
 	}
 
 	_, _, err = server.Listen("tn", "127.0.0.1:0", principal, blessings)
 	if err == nil || !strings.Contains(err.Error(), "tn.Listen") {
-		t.Fatal("expected error is missing (%v)", err)
+		t.Fatalf("expected error is missing (%v)", err)
 	}
 
 	// Need a functional listener to test Dial.
diff --git a/profiles/internal/rpc/test/client_test.go b/profiles/internal/rpc/test/client_test.go
index 681e072..6db0f38 100644
--- a/profiles/internal/rpc/test/client_test.go
+++ b/profiles/internal/rpc/test/client_test.go
@@ -26,7 +26,7 @@
 	_ "v.io/x/ref/profiles"
 	inaming "v.io/x/ref/profiles/internal/naming"
 	irpc "v.io/x/ref/profiles/internal/rpc"
-	mounttable "v.io/x/ref/services/mounttable/lib"
+	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/expect"
 	"v.io/x/ref/test/modules"
@@ -44,9 +44,9 @@
 	if err != nil {
 		return fmt.Errorf("root failed: %v", err)
 	}
-	mt, err := mounttable.NewMountTableDispatcher("")
+	mt, err := mounttablelib.NewMountTableDispatcher("")
 	if err != nil {
-		return fmt.Errorf("mounttable.NewMountTableDispatcher failed: %s", err)
+		return fmt.Errorf("mounttablelib.NewMountTableDispatcher failed: %s", err)
 	}
 	eps, err := server.Listen(lspec)
 	if err != nil {
diff --git a/profiles/internal/rt/mgmt_test.go b/profiles/internal/rt/mgmt_test.go
index 4b2fabf..de8bd0c 100644
--- a/profiles/internal/rt/mgmt_test.go
+++ b/profiles/internal/rt/mgmt_test.go
@@ -18,14 +18,14 @@
 	"v.io/v23/naming"
 	"v.io/v23/rpc"
 	"v.io/v23/services/appcycle"
-
 	"v.io/x/ref/lib/mgmt"
-	_ "v.io/x/ref/profiles"
-	vflag "v.io/x/ref/security/flag"
-	"v.io/x/ref/services/mgmt/device"
+	"v.io/x/ref/lib/security/securityflag"
+	"v.io/x/ref/services/device"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/expect"
 	"v.io/x/ref/test/modules"
+
+	_ "v.io/x/ref/profiles"
 )
 
 //go:generate v23 test generate
@@ -289,7 +289,7 @@
 	if eps, err = server.Listen(v23.GetListenSpec(ctx)); err != nil {
 		t.Fatalf("Got error: %v", err)
 	}
-	if err := server.Serve("", device.ConfigServer(&configServer{ch}), vflag.NewAuthorizerOrDie()); err != nil {
+	if err := server.Serve("", device.ConfigServer(&configServer{ch}), securityflag.NewAuthorizerOrDie()); err != nil {
 		t.Fatalf("Got error: %v", err)
 	}
 	return server, eps[0].Name(), ch
diff --git a/profiles/internal/rt/rt_test.go b/profiles/internal/rt/rt_test.go
index 405a94e..014bdf1 100644
--- a/profiles/internal/rt/rt_test.go
+++ b/profiles/internal/rt/rt_test.go
@@ -13,14 +13,12 @@
 	"testing"
 	"time"
 
-	"v.io/x/lib/vlog"
-
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/security"
-
+	"v.io/x/lib/vlog"
 	"v.io/x/ref/envvar"
-	vsecurity "v.io/x/ref/security"
+	vsecurity "v.io/x/ref/lib/security"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/expect"
 	"v.io/x/ref/test/modules"
diff --git a/profiles/internal/rt/runtime.go b/profiles/internal/rt/runtime.go
index 83dd024..9edd9f5 100644
--- a/profiles/internal/rt/runtime.go
+++ b/profiles/internal/rt/runtime.go
@@ -23,10 +23,9 @@
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/v23/vtrace"
+	"v.io/x/lib/buildinfo"
 	"v.io/x/lib/vlog"
-
 	"v.io/x/ref/lib/flags"
-	"v.io/x/ref/lib/flags/buildinfo"
 	"v.io/x/ref/lib/stats"
 	_ "v.io/x/ref/lib/stats/sysstats"
 	"v.io/x/ref/profiles/internal/lib/dependency"
@@ -45,14 +44,19 @@
 	clientKey
 	namespaceKey
 	principalKey
-	reservedNameKey
-	profileKey
-	appCycleKey
-	listenSpecKey
-	protocolsKey
 	backgroundKey
+	reservedNameKey
+
+	// initKey is used to store values that are only set at init time.
+	initKey
 )
 
+type initData struct {
+	appCycle   v23.AppCycle
+	listenSpec *rpc.ListenSpec
+	protocols  []string
+}
+
 type vtraceDependency struct{}
 
 // Runtime implements the v23.Runtime interface.
@@ -62,15 +66,25 @@
 	deps *dependency.Graph
 }
 
-type reservedNameDispatcher struct {
-	dispatcher rpc.Dispatcher
-	opts       []rpc.ServerOpt
-}
-
-func Init(ctx *context.T, appCycle v23.AppCycle, protocols []string, listenSpec *rpc.ListenSpec, flags flags.RuntimeFlags,
-	reservedDispatcher rpc.Dispatcher, dispatcherOpts ...rpc.ServerOpt) (*Runtime, *context.T, v23.Shutdown, error) {
+func Init(
+	ctx *context.T,
+	appCycle v23.AppCycle,
+	protocols []string,
+	listenSpec *rpc.ListenSpec,
+	flags flags.RuntimeFlags,
+	reservedDispatcher rpc.Dispatcher) (*Runtime, *context.T, v23.Shutdown, error) {
 	r := &Runtime{deps: dependency.NewGraph()}
 
+	ctx = context.WithValue(ctx, initKey, &initData{
+		protocols:  protocols,
+		listenSpec: listenSpec,
+		appCycle:   appCycle,
+	})
+
+	if reservedDispatcher != nil {
+		ctx = context.WithValue(ctx, reservedNameKey, reservedDispatcher)
+	}
+
 	err := vlog.ConfigureLibraryLoggerFromFlags()
 	if err != nil && err != vlog.Configured {
 		return nil, nil, nil, err
@@ -98,22 +112,6 @@
 		vtrace.FormatTraces(os.Stderr, vtrace.GetStore(ctx).TraceRecords(), nil)
 	})
 
-	if reservedDispatcher != nil {
-		ctx = context.WithValue(ctx, reservedNameKey, &reservedNameDispatcher{reservedDispatcher, dispatcherOpts})
-	}
-
-	if appCycle != nil {
-		ctx = context.WithValue(ctx, appCycleKey, appCycle)
-	}
-
-	if len(protocols) > 0 {
-		ctx = context.WithValue(ctx, protocolsKey, protocols)
-	}
-
-	if listenSpec != nil {
-		ctx = context.WithValue(ctx, listenSpecKey, listenSpec)
-	}
-
 	// Setup i18n.
 	ctx = i18n.ContextWithLangID(ctx, i18n.LangIDFromEnv())
 	if len(flags.I18nCatalogue) != 0 {
@@ -242,16 +240,21 @@
 	client, _ := ctx.Value(clientKey).(rpc.Client)
 
 	otherOpts := append([]rpc.ServerOpt{}, opts...)
-	if reserved, ok := ctx.Value(reservedNameKey).(*reservedNameDispatcher); ok {
-		otherOpts = append(otherOpts, irpc.ReservedNameDispatcher{reserved.dispatcher})
-		otherOpts = append(otherOpts, reserved.opts...)
-	}
-	if protocols, ok := ctx.Value(protocolsKey).([]string); ok {
-		otherOpts = append(otherOpts, irpc.PreferredServerResolveProtocols(protocols))
+
+	if reservedDispatcher := r.GetReservedNameDispatcher(ctx); reservedDispatcher != nil {
+		otherOpts = append(otherOpts, irpc.ReservedNameDispatcher{
+			Dispatcher: reservedDispatcher,
+		})
 	}
 
+	id, _ := ctx.Value(initKey).(*initData)
+	if id.protocols != nil {
+		otherOpts = append(otherOpts, irpc.PreferredServerResolveProtocols(id.protocols))
+	}
 	if !hasServerBlessingsOpt(opts) && principal != nil {
-		otherOpts = append(otherOpts, options.ServerBlessings{principal.BlessingStore().Default()})
+		otherOpts = append(otherOpts, options.ServerBlessings{
+			Blessings: principal.BlessingStore().Default(),
+		})
 	}
 	server, err := irpc.InternalNewServer(ctx, sm, ns, r.GetClient(ctx), principal, otherOpts...)
 	if err != nil {
@@ -364,12 +367,11 @@
 	p, _ := ctx.Value(principalKey).(security.Principal)
 	sm, _ := ctx.Value(streamManagerKey).(stream.Manager)
 	ns, _ := ctx.Value(namespaceKey).(namespace.T)
-	otherOpts = append(otherOpts, imanager.DialTimeout{5 * time.Minute})
+	otherOpts = append(otherOpts, imanager.DialTimeout(5*time.Minute))
 
-	if protocols, ok := ctx.Value(protocolsKey).([]string); ok {
-		otherOpts = append(otherOpts, irpc.PreferredProtocols(protocols))
+	if id, _ := ctx.Value(initKey).(*initData); id.protocols != nil {
+		otherOpts = append(otherOpts, irpc.PreferredProtocols(id.protocols))
 	}
-
 	client, err := irpc.InternalNewClient(sm, ns, otherOpts...)
 	if err != nil {
 		return ctx, nil, err
@@ -427,13 +429,15 @@
 }
 
 func (*Runtime) GetAppCycle(ctx *context.T) v23.AppCycle {
-	appCycle, _ := ctx.Value(appCycleKey).(v23.AppCycle)
-	return appCycle
+	id, _ := ctx.Value(initKey).(*initData)
+	return id.appCycle
 }
 
 func (*Runtime) GetListenSpec(ctx *context.T) rpc.ListenSpec {
-	listenSpec, _ := ctx.Value(listenSpecKey).(*rpc.ListenSpec)
-	return listenSpec.Copy()
+	if id, _ := ctx.Value(initKey).(*initData); id.listenSpec != nil {
+		return id.listenSpec.Copy()
+	}
+	return rpc.ListenSpec{}
 }
 
 func (*Runtime) SetBackgroundContext(ctx *context.T) *context.T {
@@ -457,17 +461,12 @@
 }
 
 func (*Runtime) SetReservedNameDispatcher(ctx *context.T, d rpc.Dispatcher) *context.T {
-	rnd := &reservedNameDispatcher{dispatcher: d}
-	if oldRnd, ok := ctx.Value(reservedNameKey).(*reservedNameDispatcher); ok {
-		rnd.opts = oldRnd.opts
-	}
-	newctx := context.WithValue(ctx, reservedNameKey, rnd)
-	return newctx
+	return context.WithValue(ctx, reservedNameKey, d)
 }
 
 func (*Runtime) GetReservedNameDispatcher(ctx *context.T) rpc.Dispatcher {
-	if d, ok := ctx.Value(reservedNameKey).(*reservedNameDispatcher); ok {
-		return d.dispatcher
+	if d, ok := ctx.Value(reservedNameKey).(rpc.Dispatcher); ok {
+		return d
 	}
 	return nil
 }
diff --git a/profiles/internal/rt/security.go b/profiles/internal/rt/security.go
index faf0661..8f350c2 100644
--- a/profiles/internal/rt/security.go
+++ b/profiles/internal/rt/security.go
@@ -15,11 +15,10 @@
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
-
 	"v.io/x/ref/lib/exec"
 	"v.io/x/ref/lib/mgmt"
-	vsecurity "v.io/x/ref/security"
-	"v.io/x/ref/security/agent"
+	vsecurity "v.io/x/ref/lib/security"
+	"v.io/x/ref/services/agent"
 )
 
 func initSecurity(ctx *context.T, credentials string, client rpc.Client) (security.Principal, error) {
diff --git a/profiles/internal/testing/mocks/naming/namespace.go b/profiles/internal/testing/mocks/naming/namespace.go
index cef0067..6a7e1ef 100644
--- a/profiles/internal/testing/mocks/naming/namespace.go
+++ b/profiles/internal/testing/mocks/naming/namespace.go
@@ -160,13 +160,13 @@
 	return nil
 }
 
-func (ns *namespaceMock) GetPermissions(ctx *context.T, name string, opts ...naming.NamespaceOpt) (acl access.Permissions, etag string, err error) {
+func (ns *namespaceMock) GetPermissions(ctx *context.T, name string, opts ...naming.NamespaceOpt) (acl access.Permissions, version string, err error) {
 	defer vlog.LogCall()()
 	panic("Calling GetPermissions on a mock namespace.  This is not supported.")
 	return nil, "", nil
 }
 
-func (ns *namespaceMock) SetPermissions(ctx *context.T, name string, acl access.Permissions, etag string, opts ...naming.NamespaceOpt) error {
+func (ns *namespaceMock) SetPermissions(ctx *context.T, name string, acl access.Permissions, version string, opts ...naming.NamespaceOpt) error {
 	defer vlog.LogCall()()
 	panic("Calling SetPermissions on a mock namespace.  This is not supported.")
 	return nil
diff --git a/profiles/internal/vtrace/v23_internal_test.go b/profiles/internal/vtrace/v23_internal_test.go
deleted file mode 100644
index c454bfe..0000000
--- a/profiles/internal/vtrace/v23_internal_test.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This file was auto-generated via go generate.
-// DO NOT UPDATE MANUALLY
-package vtrace
-
-import "testing"
-import "os"
-
-import "v.io/x/ref/test"
-
-func TestMain(m *testing.M) {
-	test.Init()
-	os.Exit(m.Run())
-}
diff --git a/profiles/internal/vtrace/vtrace_test.go b/profiles/internal/vtrace/vtrace_test.go
index 63090f4..a1a73f6 100644
--- a/profiles/internal/vtrace/vtrace_test.go
+++ b/profiles/internal/vtrace/vtrace_test.go
@@ -6,31 +6,62 @@
 
 import (
 	"bytes"
+	"fmt"
 	"strings"
 	"testing"
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/namespace"
-	"v.io/v23/naming"
+	"v.io/v23/options"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
+	"v.io/v23/security/access"
+	"v.io/v23/uniqueid"
 	"v.io/v23/vtrace"
-	"v.io/x/lib/vlog"
 
+	"v.io/x/ref/lib/flags"
+	_ "v.io/x/ref/lib/security/securityflag"
 	_ "v.io/x/ref/profiles"
-	irpc "v.io/x/ref/profiles/internal/rpc"
-	"v.io/x/ref/profiles/internal/rpc/stream"
-	"v.io/x/ref/profiles/internal/rpc/stream/manager"
-	tnaming "v.io/x/ref/profiles/internal/testing/mocks/naming"
+	ivtrace "v.io/x/ref/profiles/internal/vtrace"
+	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
 )
 
-//go:generate v23 test generate
+func init() {
+	test.Init()
+}
+
+// initForTest initializes the vtrace runtime and starts a mounttable.
+func initForTest(t *testing.T) (*context.T, v23.Shutdown, *testutil.IDProvider) {
+	idp := testutil.NewIDProvider("base")
+	ctx, shutdown := test.InitForTest()
+	if err := idp.Bless(v23.GetPrincipal(ctx), "alice"); err != nil {
+		t.Fatalf("Could not bless initial principal %v", err)
+	}
+
+	// Start a local mounttable.
+	s, err := v23.NewServer(ctx, options.ServesMountTable(true))
+	if err != nil {
+		t.Fatalf("Could not create mt server %v", err)
+	}
+	eps, err := s.Listen(v23.GetListenSpec(ctx))
+	if err != nil {
+		t.Fatalf("Could not listen for mt %v", err)
+	}
+	disp, err := mounttablelib.NewMountTableDispatcher("")
+	if err != nil {
+		t.Fatalf("Could not create mt dispatcher %v", err)
+	}
+	if err := s.ServeDispatcher("", disp); err != nil {
+		t.Fatalf("Could not serve mt dispatcher %v", err)
+	}
+	v23.GetNamespace(ctx).SetRoots(eps[0].Name())
+	return ctx, shutdown, idp
+}
 
 func TestNewFromContext(t *testing.T) {
-	c0, shutdown := test.InitForTest()
+	c0, shutdown, _ := initForTest(t)
 	defer shutdown()
 	c1, s1 := vtrace.SetNewSpan(c0, "s1")
 	c2, s2 := vtrace.SetNewSpan(c1, "s2")
@@ -47,15 +78,9 @@
 	}
 }
 
-type fakeAuthorizer int
-
-func (fakeAuthorizer) Authorize(*context.T) error {
-	return nil
-}
-
+// testServer can be easily configured to have child servers of the
+// same type which it will call when it receives a call.
 type testServer struct {
-	sm           stream.Manager
-	ns           namespace.T
 	name         string
 	child        string
 	stop         func() error
@@ -63,62 +88,102 @@
 }
 
 func (c *testServer) Run(call rpc.ServerCall) error {
+	ctx := call.Context()
 	if c.forceCollect {
-		vtrace.ForceCollect(call.Context())
+		vtrace.ForceCollect(ctx)
 	}
-
-	client, err := irpc.InternalNewClient(c.sm, c.ns)
-	if err != nil {
-		vlog.Error(err)
-		return err
-	}
-
-	vtrace.GetSpan(call.Context()).Annotate(c.name + "-begin")
-
+	vtrace.GetSpan(ctx).Annotate(c.name + "-begin")
 	if c.child != "" {
-		var clientCall rpc.ClientCall
-		if clientCall, err = client.StartCall(call.Context(), c.child, "Run", []interface{}{}); err != nil {
-			vlog.Error(err)
+		clientCall, err := v23.GetClient(ctx).StartCall(ctx, c.child, "Run", nil)
+		if err != nil {
 			return err
 		}
 		if err := clientCall.Finish(); err != nil {
-			vlog.Error(err)
 			return err
 		}
 	}
-	vtrace.GetSpan(call.Context()).Annotate(c.name + "-end")
-
+	vtrace.GetSpan(ctx).Annotate(c.name + "-end")
 	return nil
 }
 
-func makeTestServer(ctx *context.T, principal security.Principal, ns namespace.T, name, child string, forceCollect bool) (*testServer, error) {
-	sm := manager.InternalNew(naming.FixedRoutingID(0x111111111))
-	client, err := irpc.InternalNewClient(sm, ns)
+func runCallChain(t *testing.T, ctx *context.T, idp *testutil.IDProvider, force1, force2 bool) *vtrace.TraceRecord {
+	ctx, span := vtrace.SetNewSpan(ctx, "")
+	span.Annotate("c0-begin")
+	_, stop, err := makeChainedTestServers(ctx, idp, force1, force2)
 	if err != nil {
-		return nil, err
+		t.Fatalf("Could not start servers %v", err)
 	}
-	s, err := irpc.InternalNewServer(ctx, sm, ns, client, principal)
+	defer stop()
+	call, err := v23.GetClient(ctx).StartCall(ctx, "c1", "Run", nil)
 	if err != nil {
-		return nil, err
+		t.Fatal("can't call: ", err)
 	}
+	if err := call.Finish(); err != nil {
+		t.Error(err)
+	}
+	span.Annotate("c0-end")
+	span.Finish()
 
+	return vtrace.GetStore(ctx).TraceRecord(span.Trace())
+}
+
+func makeChainedTestServers(ctx *context.T, idp *testutil.IDProvider, force ...bool) ([]*testServer, func(), error) {
+	out := []*testServer{}
+	last := len(force) - 1
+	ext := "alice"
+	for i, f := range force {
+		name := fmt.Sprintf("c%d", i+1)
+		ext += "/" + name
+		principal := testutil.NewPrincipal()
+		if err := idp.Bless(principal, ext); err != nil {
+			return nil, nil, err
+		}
+		c, err := makeTestServer(ctx, principal, name)
+		if err != nil {
+			return nil, nil, err
+		}
+		if i < last {
+			c.child = fmt.Sprintf("c%d", i+2)
+		}
+		c.forceCollect = f
+		out = append(out, c)
+	}
+	return out, func() {
+		for _, s := range out {
+			s.stop()
+		}
+	}, nil
+}
+
+type anyone struct{}
+
+func (anyone) Authorize(ctx *context.T) error { return nil }
+
+func makeTestServer(ctx *context.T, principal security.Principal, name string) (*testServer, error) {
+	// Set a new vtrace store to simulate a separate process.
+	ctx, err := ivtrace.Init(ctx, flags.VtraceFlags{CacheSize: 100})
+	if err != nil {
+		return nil, err
+	}
+	ctx, _ = vtrace.SetNewTrace(ctx)
+	ctx, err = v23.SetPrincipal(ctx, principal)
+	if err != nil {
+		return nil, err
+	}
+	s, err := v23.NewServer(ctx)
+	if err != nil {
+		return nil, err
+	}
 	if _, err := s.Listen(v23.GetListenSpec(ctx)); err != nil {
 		return nil, err
 	}
-
 	c := &testServer{
-		sm:           sm,
-		ns:           ns,
-		name:         name,
-		child:        child,
-		stop:         s.Stop,
-		forceCollect: forceCollect,
+		name: name,
+		stop: s.Stop,
 	}
-
-	if err := s.Serve(name, c, fakeAuthorizer(0)); err != nil {
+	if err := s.Serve(name, c, anyone{}); err != nil {
 		return nil, err
 	}
-
 	return c, nil
 }
 
@@ -140,148 +205,172 @@
 	return b.String()
 }
 
-func expectSequence(t *testing.T, trace vtrace.TraceRecord, expectedSpans []string) {
-	// It's okay to have additional spans - someone may have inserted
-	// additional spans for more debugging.
-	if got, want := len(trace.Spans), len(expectedSpans); got < want {
-		t.Errorf("Found %d spans, want %d", got, want)
-	}
+type spanSet map[uniqueid.Id]*vtrace.SpanRecord
 
-	spans := map[string]*vtrace.SpanRecord{}
-	summaries := []string{}
+func newSpanSet(trace vtrace.TraceRecord) spanSet {
+	out := spanSet{}
 	for i := range trace.Spans {
 		span := &trace.Spans[i]
+		out[span.Id] = span
+	}
+	return out
+}
 
-		// All spans should have a start.
-		if span.Start.IsZero() {
-			t.Errorf("span missing start: %x, %s", span.Id[12:], traceString(&trace))
+func (s spanSet) hasAncestor(span *vtrace.SpanRecord, ancestor *vtrace.SpanRecord) bool {
+	for span = s[span.Parent]; span != nil; span = s[span.Parent] {
+		if span == ancestor {
+			return true
 		}
-		// All spans except the root should have a valid end.
-		// TODO(mattr): For now I'm also skipping connectFlow and
-		// vc.HandshakeDialedVC spans because the ws endpoints are
-		// currently non-deterministic in terms of whether they fail
-		// before the test ends or not.  In the future it will be
-		// configurable whether we listen on ws or not and then we should
-		// adjust the test to not listen and remove this check.
-		if span.Name != "" &&
-			span.Name != "<client>connectFlow" &&
-			span.Name != "vc.HandshakeDialedVC" {
-			if span.End.IsZero() {
-				t.Errorf("span missing end: %x, %s", span.Id[12:], traceString(&trace))
-			} else if !span.Start.Before(span.End) {
-				t.Errorf("span end should be after start: %x, %s", span.Id[12:], traceString(&trace))
-			}
-		}
+	}
+	return false
+}
 
-		summary := summary(span)
-		summaries = append(summaries, summary)
-		spans[summary] = span
+func expectSequence(t *testing.T, trace vtrace.TraceRecord, expectedSpans []string) {
+	s := newSpanSet(trace)
+	found := make(map[string]*vtrace.SpanRecord)
+	for _, es := range expectedSpans {
+		found[es] = nil
 	}
 
-	for i := range expectedSpans {
-		child, ok := spans[expectedSpans[i]]
-		if !ok {
-			t.Errorf("expected span %s not found in %#v", expectedSpans[i], summaries)
+	for i := range trace.Spans {
+		span := &trace.Spans[i]
+		smry := summary(span)
+		if _, ok := found[smry]; ok {
+			found[smry] = span
+		}
+	}
+
+	for i, es := range expectedSpans {
+		span := found[es]
+		if span == nil {
+			t.Errorf("expected span %s not found in\n%s", es, traceString(&trace))
 			continue
 		}
+		// All spans should have a start.
+		if span.Start.IsZero() {
+			t.Errorf("span missing start: %x\n%s", span.Id[12:], traceString(&trace))
+		}
+		// All spans except the root should have a valid end.
+		if span.Parent != trace.Id {
+			if span.End.IsZero() {
+				t.Errorf("span missing end: %x\n%s", span.Id[12:], traceString(&trace))
+			} else if !span.Start.Before(span.End) {
+				t.Errorf("span end should be after start: %x\n%s", span.Id[12:], traceString(&trace))
+			}
+		}
+		// Spans should decend from the previous span in the list.
 		if i == 0 {
 			continue
 		}
-		parent, ok := spans[expectedSpans[i-1]]
-		if !ok {
-			t.Errorf("expected span %s not found in %#v", expectedSpans[i-1], summaries)
-			continue
+		if ancestor := found[expectedSpans[i-1]]; ancestor != nil && !s.hasAncestor(span, ancestor) {
+			t.Errorf("span %s does not have ancestor %s", es, expectedSpans[i-1])
 		}
-		if child.Parent != parent.Id {
-			t.Errorf("%v should be a child of %v, but it's not.", child, parent)
-		}
-	}
-}
-
-func runCallChain(t *testing.T, ctx *context.T, force1, force2 bool) {
-	var (
-		sm       = manager.InternalNew(naming.FixedRoutingID(0x555555555))
-		ns       = tnaming.NewSimpleNamespace()
-		pclient  = testutil.NewPrincipal("client")
-		pserver1 = testutil.NewPrincipal("server1")
-		pserver2 = testutil.NewPrincipal("server2")
-	)
-	for _, p1 := range []security.Principal{pclient, pserver1, pserver2} {
-		for _, p2 := range []security.Principal{pclient, pserver1, pserver2} {
-			p1.AddToRoots(p2.BlessingStore().Default())
-		}
-	}
-	ctx, _ = v23.SetPrincipal(ctx, pclient)
-	client, err := irpc.InternalNewClient(sm, ns)
-	if err != nil {
-		t.Error(err)
-	}
-	ctx1, _ := vtrace.SetNewTrace(ctx)
-	c1, err := makeTestServer(ctx1, pserver1, ns, "c1", "c2", force1)
-	if err != nil {
-		t.Fatal("Can't start server:", err)
-	}
-	defer c1.stop()
-
-	ctx2, _ := vtrace.SetNewTrace(ctx)
-	c2, err := makeTestServer(ctx2, pserver2, ns, "c2", "", force2)
-	if err != nil {
-		t.Fatal("Can't start server:", err)
-	}
-	defer c2.stop()
-
-	call, err := client.StartCall(ctx, "c1", "Run", []interface{}{})
-	if err != nil {
-		t.Fatal("can't call: ", err)
-	}
-	if err := call.Finish(); err != nil {
-		t.Error(err)
 	}
 }
 
 // TestCancellationPropagation tests that cancellation propogates along an
 // RPC call chain without user intervention.
 func TestTraceAcrossRPCs(t *testing.T) {
-	ctx, shutdown := test.InitForTest()
+	ctx, shutdown, idp := initForTest(t)
 	defer shutdown()
-	ctx, span := vtrace.SetNewSpan(ctx, "")
+
 	vtrace.ForceCollect(ctx)
-	span.Annotate("c0-begin")
+	record := runCallChain(t, ctx, idp, false, false)
 
-	runCallChain(t, ctx, false, false)
-
-	span.Annotate("c0-end")
-
-	expectedSpans := []string{
+	expectSequence(t, *record, []string{
 		": c0-begin, c0-end",
 		"<rpc.Client>\"c1\".Run",
 		"\"\".Run: c1-begin, c1-end",
 		"<rpc.Client>\"c2\".Run",
 		"\"\".Run: c2-begin, c2-end",
-	}
-	record := vtrace.GetStore(ctx).TraceRecord(span.Trace())
-	expectSequence(t, *record, expectedSpans)
+	})
 }
 
 // TestCancellationPropagationLateForce tests that cancellation propogates along an
 // RPC call chain when tracing is initiated by someone deep in the call chain.
 func TestTraceAcrossRPCsLateForce(t *testing.T) {
-	ctx, shutdown := test.InitForTest()
+	ctx, shutdown, idp := initForTest(t)
 	defer shutdown()
-	ctx, span := vtrace.SetNewSpan(ctx, "")
-	span.Annotate("c0-begin")
 
-	runCallChain(t, ctx, false, true)
+	record := runCallChain(t, ctx, idp, false, true)
 
-	span.Annotate("c0-end")
-
-	expectedSpans := []string{
+	expectSequence(t, *record, []string{
 		": c0-end",
 		"<rpc.Client>\"c1\".Run",
 		"\"\".Run: c1-end",
 		"<rpc.Client>\"c2\".Run",
 		"\"\".Run: c2-begin, c2-end",
+	})
+}
+
+func traceWithAuth(t *testing.T, ctx *context.T, principal security.Principal) bool {
+	s, err := makeTestServer(ctx, principal, "server")
+	if err != nil {
+		t.Fatalf("Couldn't start server %v", err)
+	}
+	defer s.stop()
+
+	ctx, span := vtrace.SetNewTrace(ctx)
+	vtrace.ForceCollect(ctx)
+
+	ctx, client, err := v23.SetNewClient(ctx)
+	if err != nil {
+		t.Fatalf("Couldn't create client %v", err)
+	}
+	call, err := client.StartCall(ctx, "server", "Run", nil)
+	if err != nil {
+		t.Fatalf("Couldn't make call %v", err)
+	}
+	if err = call.Finish(); err != nil {
+		t.Fatalf("Couldn't complete call %v", err)
 	}
 	record := vtrace.GetStore(ctx).TraceRecord(span.Trace())
-	expectSequence(t, *record, expectedSpans)
+	for _, sp := range record.Spans {
+		if sp.Name == `"".Run` {
+			return true
+		}
+	}
+	return false
+}
+
+type debugDispatcher string
+
+func (acls debugDispatcher) Lookup(string) (interface{}, security.Authorizer, error) {
+	perms, err := access.ReadPermissions(strings.NewReader(string(acls)))
+	if err != nil {
+		return nil, nil, err
+	}
+	auth, err := access.PermissionsAuthorizer(perms, access.TypicalTagType())
+	if err != nil {
+		return nil, nil, err
+	}
+	return nil, auth, nil
+}
+
+// TestPermissions tests that only permitted users are allowed to gather tracing
+// information.
+func TestTracePermissions(t *testing.T) {
+	ctx, shutdown, idp := initForTest(t)
+	defer shutdown()
+
+	type testcase struct {
+		perms string
+		spans bool
+	}
+	cases := []testcase{
+		{`{}`, false},
+		{`{"Read":{"In": ["base/alice"]}, "Write":{"In": ["base/alice"]}}`, false},
+		{`{"Debug":{"In": ["base/alice"]}}`, true},
+	}
+
+	// Create a different principal for the server.
+	pserver := testutil.NewPrincipal()
+	idp.Bless(pserver, "server")
+
+	for _, tc := range cases {
+		ctx2 := v23.SetReservedNameDispatcher(ctx, debugDispatcher(tc.perms))
+		if found := traceWithAuth(t, ctx2, pserver); found != tc.spans {
+			t.Errorf("got %v wanted %v for perms %s", found, tc.spans, tc.perms)
+		}
+	}
 }
diff --git a/profiles/roaming/roaminginit.go b/profiles/roaming/roaminginit.go
index 9edddc6..342422d 100644
--- a/profiles/roaming/roaminginit.go
+++ b/profiles/roaming/roaminginit.go
@@ -21,22 +21,19 @@
 	"v.io/v23/config"
 	"v.io/v23/context"
 	"v.io/v23/rpc"
-	"v.io/x/lib/vlog"
-
 	"v.io/x/lib/netconfig"
 	"v.io/x/lib/netstate"
+	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/flags"
+	"v.io/x/ref/lib/security/securityflag"
 	"v.io/x/ref/profiles/internal"
 	"v.io/x/ref/profiles/internal/lib/appcycle"
 	"v.io/x/ref/profiles/internal/lib/websocket"
 	_ "v.io/x/ref/profiles/internal/rpc/protocols/tcp"
 	_ "v.io/x/ref/profiles/internal/rpc/protocols/ws"
 	_ "v.io/x/ref/profiles/internal/rpc/protocols/wsh"
-	grt "v.io/x/ref/profiles/internal/rt"
+	"v.io/x/ref/profiles/internal/rt"
 	"v.io/x/ref/services/debug/debuglib"
-
-	// TODO(cnicolaou,ashankar): move this into flags.
-	sflag "v.io/x/ref/security/flag"
 )
 
 const (
@@ -61,7 +58,7 @@
 		Addrs: rpc.ListenAddrs(lf.Addrs),
 		Proxy: lf.ListenProxy,
 	}
-	reservedDispatcher := debuglib.NewDispatcher(vlog.Log.LogDir, sflag.NewAuthorizerOrDie())
+	reservedDispatcher := debuglib.NewDispatcher(vlog.Log.LogDir, securityflag.NewAuthorizerOrDie())
 
 	ac := appcycle.New()
 
@@ -72,7 +69,7 @@
 			listenSpec.AddressChooser = func(string, []rpc.Address) ([]rpc.Address, error) {
 				return []rpc.Address{&netstate.AddrIfc{addr, "nat", nil}}, nil
 			}
-			runtime, ctx, shutdown, err := grt.Init(ctx, ac, nil, &listenSpec, commonFlags.RuntimeFlags(), reservedDispatcher)
+			runtime, ctx, shutdown, err := rt.Init(ctx, ac, nil, &listenSpec, commonFlags.RuntimeFlags(), reservedDispatcher)
 			if err != nil {
 				return nil, nil, shutdown, err
 			}
@@ -115,7 +112,7 @@
 	listenSpec.StreamName = SettingsStreamName
 	listenSpec.AddressChooser = internal.IPAddressChooser
 
-	runtime, ctx, shutdown, err := grt.Init(ctx, ac, nil, &listenSpec, commonFlags.RuntimeFlags(), reservedDispatcher)
+	runtime, ctx, shutdown, err := rt.Init(ctx, ac, nil, &listenSpec, commonFlags.RuntimeFlags(), reservedDispatcher)
 	if err != nil {
 		return nil, nil, shutdown, err
 	}
@@ -133,7 +130,7 @@
 // monitorNetworkSettings will monitor network configuration changes and
 // publish subsequent Settings to reflect any changes detected.
 func monitorNetworkSettingsX(
-	runtime *grt.Runtime,
+	runtime *rt.Runtime,
 	ctx *context.T,
 	watcher netconfig.NetConfigWatcher,
 	prev netstate.AddrList,
diff --git a/profiles/static/staticinit.go b/profiles/static/staticinit.go
index 8458777..7da5a31 100644
--- a/profiles/static/staticinit.go
+++ b/profiles/static/staticinit.go
@@ -10,21 +10,18 @@
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/rpc"
-	"v.io/x/lib/vlog"
-
 	"v.io/x/lib/netstate"
+	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/flags"
+	"v.io/x/ref/lib/security/securityflag"
 	"v.io/x/ref/profiles/internal"
 	"v.io/x/ref/profiles/internal/lib/appcycle"
 	"v.io/x/ref/profiles/internal/lib/websocket"
 	_ "v.io/x/ref/profiles/internal/rpc/protocols/tcp"
 	_ "v.io/x/ref/profiles/internal/rpc/protocols/ws"
 	_ "v.io/x/ref/profiles/internal/rpc/protocols/wsh"
-	grt "v.io/x/ref/profiles/internal/rt"
+	"v.io/x/ref/profiles/internal/rt"
 	"v.io/x/ref/services/debug/debuglib"
-
-	// TODO(cnicolaou,ashankar): move this into flags.
-	sflag "v.io/x/ref/security/flag"
 )
 
 var commonFlags *flags.Flags
@@ -45,7 +42,7 @@
 		Addrs: rpc.ListenAddrs(lf.Addrs),
 		Proxy: lf.ListenProxy,
 	}
-	reservedDispatcher := debuglib.NewDispatcher(vlog.Log.LogDir, sflag.NewAuthorizerOrDie())
+	reservedDispatcher := debuglib.NewDispatcher(vlog.Log.LogDir, securityflag.NewAuthorizerOrDie())
 
 	ac := appcycle.New()
 
@@ -56,7 +53,7 @@
 			listenSpec.AddressChooser = func(string, []rpc.Address) ([]rpc.Address, error) {
 				return []rpc.Address{&netstate.AddrIfc{addr, "nat", nil}}, nil
 			}
-			runtime, ctx, shutdown, err := grt.Init(ctx, ac, nil, &listenSpec, commonFlags.RuntimeFlags(), reservedDispatcher)
+			runtime, ctx, shutdown, err := rt.Init(ctx, ac, nil, &listenSpec, commonFlags.RuntimeFlags(), reservedDispatcher)
 			if err != nil {
 				return nil, nil, nil, err
 			}
@@ -69,7 +66,7 @@
 	}
 	listenSpec.AddressChooser = internal.IPAddressChooser
 
-	runtime, ctx, shutdown, err := grt.Init(ctx, ac, nil, &listenSpec, commonFlags.RuntimeFlags(), reservedDispatcher)
+	runtime, ctx, shutdown, err := rt.Init(ctx, ac, nil, &listenSpec, commonFlags.RuntimeFlags(), reservedDispatcher)
 	if err != nil {
 		return nil, nil, shutdown, err
 	}
diff --git a/security/GO.PACKAGE b/security/GO.PACKAGE
deleted file mode 100644
index 0bfdb86..0000000
--- a/security/GO.PACKAGE
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-	"dependencies": {
-		"incoming": [
-			{"allow": "v.io/x/ref/security/..."},
-			{"allow": "...", "comment": "dependencies on v.io/x/ref/security are temporarily allowed"}
-		]
-	}
-}
diff --git a/services/GO.PACKAGE b/services/GO.PACKAGE
index 00b927c..34ef35b 100644
--- a/services/GO.PACKAGE
+++ b/services/GO.PACKAGE
@@ -2,7 +2,8 @@
 	"dependencies": {
 		"incoming": [
 			{"allow": "v.io/x/ref/services/..."},
-			{"allow": "v.io/x/ref/test/modules/core", "comment":"temporarily allowing dependency from lib"},
+			{"allow": "v.io/x/ref/test/modules", "comment":"temporarily allowing dependency from lib"},
+			{"allow": "v.io/x/ref/test/v23tests", "comment":"temporarily allowing dependency from lib"},
 			{"allow": "v.io/x/ref/lib/...", "comment":"temporarily allowing dependency from lib"},
 			{"allow": "v.io/x/ref/profiles/...", "comment":"temporarily allowing dependency from profiles"},
 			{"allow": "v.io/x/ref/cmd/...", "comment":"temporarily allowing dependency from v.io/x/ref/cmd"},
diff --git a/security/agent/agent_test.go b/services/agent/agent_test.go
similarity index 98%
rename from security/agent/agent_test.go
rename to services/agent/agent_test.go
index 4f9bb96..2c3c17d 100644
--- a/security/agent/agent_test.go
+++ b/services/agent/agent_test.go
@@ -14,16 +14,16 @@
 	"testing"
 	"time"
 
-	_ "v.io/x/ref/profiles"
-	"v.io/x/ref/security/agent"
-	"v.io/x/ref/security/agent/server"
+	"v.io/v23"
+	"v.io/v23/context"
+	"v.io/v23/security"
+	"v.io/x/ref/services/agent"
+	"v.io/x/ref/services/agent/server"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/modules"
 	"v.io/x/ref/test/testutil"
 
-	"v.io/v23"
-	"v.io/v23/context"
-	"v.io/v23/security"
+	_ "v.io/x/ref/profiles"
 )
 
 //go:generate v23 test generate
diff --git a/security/agent/agent_v23_test.go b/services/agent/agent_v23_test.go
similarity index 93%
rename from security/agent/agent_v23_test.go
rename to services/agent/agent_v23_test.go
index e23db65..33f60eb 100644
--- a/security/agent/agent_v23_test.go
+++ b/services/agent/agent_v23_test.go
@@ -15,14 +15,14 @@
 
 	"v.io/v23/security"
 	"v.io/x/ref/envvar"
-	vsecurity "v.io/x/ref/security"
+	vsecurity "v.io/x/ref/lib/security"
 	"v.io/x/ref/test/v23tests"
 )
 
 //go:generate v23 test generate
 
 func V23TestTestPassPhraseUse(i *v23tests.T) {
-	bin := i.BuildGoPkg("v.io/x/ref/security/agent/agentd").WithEnv(envvar.Credentials + "=" + i.NewTempDir())
+	bin := i.BuildGoPkg("v.io/x/ref/services/agent/agentd").WithEnv(envvar.Credentials + "=" + i.NewTempDir())
 
 	// Create the passphrase
 	agent := bin.Start("echo", "Hello")
@@ -63,8 +63,8 @@
 func V23TestAllPrincipalMethods(i *v23tests.T) {
 	// Test all methods of the principal interface.
 	// (Errors are printed to STDERR)
-	testbin := i.BuildGoPkg("v.io/x/ref/security/agent/test_principal").Path()
-	i.BuildGoPkg("v.io/x/ref/security/agent/agentd").
+	testbin := i.BuildGoPkg("v.io/x/ref/services/agent/internal/test_principal").Path()
+	i.BuildGoPkg("v.io/x/ref/services/agent/agentd").
 		WithEnv(envvar.Credentials+"="+i.NewTempDir()).
 		Start(testbin).
 		WaitOrDie(nil, os.Stderr)
@@ -77,7 +77,7 @@
 	// the server.
 	var (
 		clientAgent, serverAgent = createClientAndServerAgents(i)
-		pingpong                 = i.BuildGoPkg("v.io/x/ref/security/agent/pingpong").Path()
+		pingpong                 = i.BuildGoPkg("v.io/x/ref/services/agent/internal/pingpong").Path()
 		serverName               = serverAgent.Start(pingpong).ExpectVar("NAME")
 	)
 	// Run the client via an agent once.
@@ -123,7 +123,7 @@
 func V23TestAgentRestartExitCode(i *v23tests.T) {
 	var (
 		clientAgent, serverAgent = createClientAndServerAgents(i)
-		pingpong                 = i.BuildGoPkg("v.io/x/ref/security/agent/pingpong").Path()
+		pingpong                 = i.BuildGoPkg("v.io/x/ref/services/agent/internal/pingpong").Path()
 		serverName               = serverAgent.Start(pingpong).ExpectVar("NAME")
 
 		scriptDir = i.NewTempDir()
@@ -223,7 +223,7 @@
 // The client will have a single blessing "pingpongd/client", blessed by the server.
 func createClientAndServerAgents(i *v23tests.T) (client, server *v23tests.Binary) {
 	var (
-		agentd    = i.BuildGoPkg("v.io/x/ref/security/agent/agentd")
+		agentd    = i.BuildGoPkg("v.io/x/ref/services/agent/agentd")
 		clientDir = i.NewTempDir()
 		serverDir = i.NewTempDir()
 	)
diff --git a/security/agent/agentd/main.go b/services/agent/agentd/main.go
similarity index 98%
rename from security/agent/agentd/main.go
rename to services/agent/agentd/main.go
index 80be5c2..60bccd3 100644
--- a/security/agent/agentd/main.go
+++ b/services/agent/agentd/main.go
@@ -16,20 +16,20 @@
 
 	"golang.org/x/crypto/ssh/terminal"
 
-	"v.io/x/ref/envvar"
-	vsignals "v.io/x/ref/lib/signals"
-	_ "v.io/x/ref/profiles"
-	vsecurity "v.io/x/ref/security"
-	"v.io/x/ref/security/agent"
-	"v.io/x/ref/security/agent/server"
-
 	"v.io/v23"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
+	"v.io/x/ref/envvar"
+	vsecurity "v.io/x/ref/lib/security"
+	vsignals "v.io/x/ref/lib/signals"
+	"v.io/x/ref/services/agent"
+	"v.io/x/ref/services/agent/server"
+
+	_ "v.io/x/ref/profiles"
 )
 
-const pkgPath = "v.io/x/ref/security/agent/agentd"
+const pkgPath = "v.io/x/ref/services/agent/agentd"
 
 var (
 	errCantReadPassphrase       = verror.Register(pkgPath+".errCantReadPassphrase", verror.NoRetry, "{1:}{2:} failed to read passphrase{:_}")
diff --git a/security/agent/client.go b/services/agent/client.go
similarity index 99%
rename from security/agent/client.go
rename to services/agent/client.go
index 419fed2..9abb091 100644
--- a/security/agent/client.go
+++ b/services/agent/client.go
@@ -19,7 +19,7 @@
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/unixfd"
-	"v.io/x/ref/security/agent/cache"
+	"v.io/x/ref/services/agent/internal/cache"
 )
 
 // FdVarName is the name of the environment variable containing
diff --git a/security/agent/cache/cache.go b/services/agent/internal/cache/cache.go
similarity index 98%
rename from security/agent/cache/cache.go
rename to services/agent/internal/cache/cache.go
index 5dd9484..e16ca7a 100644
--- a/security/agent/cache/cache.go
+++ b/services/agent/internal/cache/cache.go
@@ -14,10 +14,10 @@
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/security/agent/lru"
+	"v.io/x/ref/services/agent/internal/lru"
 )
 
-const pkgPath = "v.io/x/ref/security/agent/cache"
+const pkgPath = "v.io/x/ref/services/agent/internal/cache"
 
 var (
 	errNotImplemented = verror.Register(pkgPath+".errNotImplemented", verror.NoRetry, "{1:}{2:} Not implemented{:_}")
diff --git a/security/agent/cache/cache_test.go b/services/agent/internal/cache/cache_test.go
similarity index 100%
rename from security/agent/cache/cache_test.go
rename to services/agent/internal/cache/cache_test.go
diff --git a/security/agent/lru/lru.go b/services/agent/internal/lru/lru.go
similarity index 100%
rename from security/agent/lru/lru.go
rename to services/agent/internal/lru/lru.go
diff --git a/security/agent/lru/lru_test.go b/services/agent/internal/lru/lru_test.go
similarity index 100%
rename from security/agent/lru/lru_test.go
rename to services/agent/internal/lru/lru_test.go
diff --git a/security/agent/pingpong/main.go b/services/agent/internal/pingpong/main.go
similarity index 99%
rename from security/agent/pingpong/main.go
rename to services/agent/internal/pingpong/main.go
index 883e4cb..e5c8744 100644
--- a/security/agent/pingpong/main.go
+++ b/services/agent/internal/pingpong/main.go
@@ -13,8 +13,8 @@
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
-
 	"v.io/x/ref/lib/signals"
+
 	_ "v.io/x/ref/profiles"
 )
 
diff --git a/security/agent/pingpong/wire.vdl b/services/agent/internal/pingpong/wire.vdl
similarity index 100%
rename from security/agent/pingpong/wire.vdl
rename to services/agent/internal/pingpong/wire.vdl
diff --git a/security/agent/pingpong/wire.vdl.go b/services/agent/internal/pingpong/wire.vdl.go
similarity index 97%
rename from security/agent/pingpong/wire.vdl.go
rename to services/agent/internal/pingpong/wire.vdl.go
index 351d0eb..a95e188 100644
--- a/security/agent/pingpong/wire.vdl.go
+++ b/services/agent/internal/pingpong/wire.vdl.go
@@ -107,7 +107,7 @@
 // descPingPong hides the desc to keep godoc clean.
 var descPingPong = rpc.InterfaceDesc{
 	Name:    "PingPong",
-	PkgPath: "v.io/x/ref/security/agent/pingpong",
+	PkgPath: "v.io/x/ref/services/agent/internal/pingpong",
 	Doc:     "// Simple service used in the agent tests.",
 	Methods: []rpc.MethodDesc{
 		{
diff --git a/security/agent/test_principal/main.go b/services/agent/internal/test_principal/main.go
similarity index 98%
rename from security/agent/test_principal/main.go
rename to services/agent/internal/test_principal/main.go
index df969b8..d60f430 100644
--- a/security/agent/test_principal/main.go
+++ b/services/agent/internal/test_principal/main.go
@@ -16,8 +16,9 @@
 	"v.io/v23"
 	"v.io/v23/security"
 	"v.io/x/ref/envvar"
+	"v.io/x/ref/services/agent"
+
 	_ "v.io/x/ref/profiles"
-	"v.io/x/ref/security/agent"
 )
 
 func newKey() security.PublicKey {
diff --git a/security/agent/keymgr/client.go b/services/agent/keymgr/client.go
similarity index 96%
rename from security/agent/keymgr/client.go
rename to services/agent/keymgr/client.go
index bc188d9..925f867 100644
--- a/security/agent/keymgr/client.go
+++ b/services/agent/keymgr/client.go
@@ -15,10 +15,10 @@
 	"v.io/v23/context"
 	"v.io/v23/verror"
 	"v.io/x/ref/lib/unixfd"
-	"v.io/x/ref/security/agent/server"
+	"v.io/x/ref/services/agent/server"
 )
 
-const pkgPath = "v.io/x/ref/security/agent/keymgr"
+const pkgPath = "v.io/x/ref/services/agent/keymgr"
 
 // Errors
 var (
diff --git a/security/agent/keymgr/keymgr_test.go b/services/agent/keymgr/keymgr_test.go
similarity index 98%
rename from security/agent/keymgr/keymgr_test.go
rename to services/agent/keymgr/keymgr_test.go
index 790dc75..1e2a521 100644
--- a/security/agent/keymgr/keymgr_test.go
+++ b/services/agent/keymgr/keymgr_test.go
@@ -12,14 +12,14 @@
 	"syscall"
 	"testing"
 
-	_ "v.io/x/ref/profiles"
-	"v.io/x/ref/security/agent"
-	"v.io/x/ref/security/agent/server"
-	"v.io/x/ref/test"
-
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/security"
+	"v.io/x/ref/services/agent"
+	"v.io/x/ref/services/agent/server"
+	"v.io/x/ref/test"
+
+	_ "v.io/x/ref/profiles"
 )
 
 func createAgent(ctx *context.T, path string) (*Agent, func(), error) {
diff --git a/security/agent/peer_test.go b/services/agent/peer_test.go
similarity index 100%
rename from security/agent/peer_test.go
rename to services/agent/peer_test.go
diff --git a/security/agent/server/server.go b/services/agent/server/server.go
similarity index 98%
rename from security/agent/server/server.go
rename to services/agent/server/server.go
index 986f995..ac03233 100644
--- a/security/agent/server/server.go
+++ b/services/agent/server/server.go
@@ -25,13 +25,13 @@
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
+	vsecurity "v.io/x/ref/lib/security"
 	"v.io/x/ref/lib/unixfd"
-	vsecurity "v.io/x/ref/security"
 )
 
 const PrincipalHandleByteSize = sha512.Size
 
-const pkgPath = "v.io/x/ref/security/agent/server"
+const pkgPath = "v.io/x/ref/services/agent/server"
 
 // Errors
 var (
diff --git a/security/agent/server/sharing.go b/services/agent/server/sharing.go
similarity index 100%
rename from security/agent/server/sharing.go
rename to services/agent/server/sharing.go
diff --git a/security/agent/server/sharing_test.go b/services/agent/server/sharing_test.go
similarity index 100%
rename from security/agent/server/sharing_test.go
rename to services/agent/server/sharing_test.go
diff --git a/security/agent/server/wire.vdl b/services/agent/server/wire.vdl
similarity index 100%
rename from security/agent/server/wire.vdl
rename to services/agent/server/wire.vdl
diff --git a/security/agent/server/wire.vdl.go b/services/agent/server/wire.vdl.go
similarity index 99%
rename from security/agent/server/wire.vdl.go
rename to services/agent/server/wire.vdl.go
index 5dd8a15..01f2990 100644
--- a/security/agent/server/wire.vdl.go
+++ b/services/agent/server/wire.vdl.go
@@ -461,7 +461,7 @@
 // descAgent hides the desc to keep godoc clean.
 var descAgent = rpc.InterfaceDesc{
 	Name:    "Agent",
-	PkgPath: "v.io/x/ref/security/agent/server",
+	PkgPath: "v.io/x/ref/services/agent/server",
 	Methods: []rpc.MethodDesc{
 		{
 			Name: "Bless",
diff --git a/security/agent/v23_test.go b/services/agent/v23_test.go
similarity index 100%
rename from security/agent/v23_test.go
rename to services/agent/v23_test.go
diff --git a/services/application/application/doc.go b/services/application/application/doc.go
index eb474ad..eed1111 100644
--- a/services/application/application/doc.go
+++ b/services/application/application/doc.go
@@ -58,28 +58,6 @@
    If true, dump all stored traces on runtime shutdown.
  -v23.vtrace.sample-rate=0
    Rate (from 0.0 to 1.0) to sample vtrace traces.
- -vanadium.i18n_catalogue=
-   18n catalogue files to load, comma separated
- -veyron.credentials=
-   directory to use for storing security credentials
- -veyron.namespace.root=[/ns.dev.v.io:8101]
-   local namespace root; can be repeated to provided multiple roots
- -veyron.proxy=
-   object name of proxy service to use to export services across network
-   boundaries
- -veyron.tcp.address=
-   address to listen on
- -veyron.tcp.protocol=wsh
-   protocol to listen with
- -veyron.vtrace.cache_size=1024
-   The number of vtrace traces to store in memory.
- -veyron.vtrace.collect_regexp=
-   Spans and annotations that match this regular expression will trigger trace
-   collection.
- -veyron.vtrace.dump_on_shutdown=true
-   If true, dump all stored traces on runtime shutdown.
- -veyron.vtrace.sample_rate=0
-   Rate (from 0.0 to 1.0) to sample vtrace traces.
  -vmodule=
    comma-separated list of pattern=N settings for file-filtered logging
 
diff --git a/services/application/application/impl_test.go b/services/application/application/impl_test.go
index dc93bb8..5a3749b 100644
--- a/services/application/application/impl_test.go
+++ b/services/application/application/impl_test.go
@@ -94,8 +94,8 @@
 	return nil
 }
 
-func (s *server) SetPermissions(_ rpc.ServerCall, acl access.Permissions, etag string) error {
-	vlog.VI(2).Infof("%v.SetPermissions(%v, %v) was called", acl, etag)
+func (s *server) SetPermissions(_ rpc.ServerCall, acl access.Permissions, version string) error {
+	vlog.VI(2).Infof("%v.SetPermissions(%v, %v) was called", acl, version)
 	return nil
 }
 
diff --git a/services/application/application/main.go b/services/application/application/main.go
index 3af5487..e33dc99 100644
--- a/services/application/application/main.go
+++ b/services/application/application/main.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
 
 package main
 
diff --git a/services/application/applicationd/acl_test.go b/services/application/applicationd/acl_test.go
index bfefc2f..bd7e3da 100644
--- a/services/application/applicationd/acl_test.go
+++ b/services/application/applicationd/acl_test.go
@@ -22,7 +22,7 @@
 
 	"v.io/x/ref/lib/signals"
 	appd "v.io/x/ref/services/application/applicationd"
-	mgmttest "v.io/x/ref/services/mgmt/lib/testutil"
+	"v.io/x/ref/services/internal/servicetest"
 	"v.io/x/ref/services/repository"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
@@ -48,7 +48,7 @@
 
 	defer fmt.Fprintf(stdout, "%v terminating\n", publishName)
 	defer vlog.VI(1).Infof("%v terminating", publishName)
-	server, endpoint := mgmttest.NewServer(ctx)
+	server, endpoint := servicetest.NewServer(ctx)
 	defer server.Stop()
 
 	name := naming.JoinAddressName(endpoint, "")
@@ -82,15 +82,15 @@
 		t.Fatal(err)
 	}
 
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, ctx, v23.GetPrincipal(ctx))
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, ctx, v23.GetPrincipal(ctx))
 	defer deferFn()
 
 	// setup mock up directory to put state in
-	storedir, cleanup := mgmttest.SetupRootDir(t, "application")
+	storedir, cleanup := servicetest.SetupRootDir(t, "application")
 	defer cleanup()
 
-	nmh := mgmttest.RunCommand(t, sh, nil, repoCmd, "repo", storedir)
-	pid := mgmttest.ReadPID(t, nmh)
+	nmh := servicetest.RunCommand(t, sh, nil, repoCmd, "repo", storedir)
+	pid := servicetest.ReadPID(t, nmh)
 	defer syscall.Kill(pid, syscall.SIGINT)
 
 	otherCtx, err := v23.SetPrincipal(ctx, testutil.NewPrincipal())
@@ -121,15 +121,32 @@
 		t.Fatalf("Put() failed: %v", err)
 	}
 
-	acl, etag, err := repostub.GetPermissions(ctx)
-	if verror.ErrorID(err) != verror.ErrNoExist.ID {
-		t.Fatalf("GetPermissions should have failed with ErrNoExist but was: %v", err)
+	vlog.VI(2).Infof("Accessing the Permission Lists of the root returns a (simulated) list providing default authorization.")
+	acl, version, err := repostub.GetPermissions(ctx)
+	if err != nil {
+		t.Fatalf("GetPermissions should not have failed: %v", err)
 	}
-	if got, want := etag, ""; got != want {
+	if got, want := version, ""; got != want {
 		t.Fatalf("GetPermissions got %v, want %v", got, want)
 	}
-	if acl != nil {
-		t.Fatalf("GetPermissions got %v, expected %v", acl, nil)
+	expected := access.Permissions{
+		"Admin": access.AccessList{
+			In:    []security.BlessingPattern{"root/$", "root/self/$", "root/self/child"},
+			NotIn: []string(nil)},
+		"Read": access.AccessList{
+			In:    []security.BlessingPattern{"root/$", "root/self/$", "root/self/child"},
+			NotIn: []string(nil)},
+		"Write": access.AccessList{
+			In:    []security.BlessingPattern{"root/$", "root/self/$", "root/self/child"},
+			NotIn: []string(nil)},
+		"Debug": access.AccessList{
+			In:    []security.BlessingPattern{"root/$", "root/self/$", "root/self/child"},
+			NotIn: []string(nil)},
+		"Resolve": access.AccessList{
+			In:    []security.BlessingPattern{"root/$", "root/self/$", "root/self/child"},
+			NotIn: []string(nil)}}
+	if got := acl; !reflect.DeepEqual(expected.Normalize(), got.Normalize()) {
+		t.Errorf("got %#v, exected %#v ", got, expected)
 	}
 
 	vlog.VI(2).Infof("self attempting to give other permission to update application")
@@ -142,11 +159,11 @@
 		t.Fatalf("SetPermissions failed: %v", err)
 	}
 
-	acl, etag, err = repostub.GetPermissions(ctx)
+	acl, version, err = repostub.GetPermissions(ctx)
 	if err != nil {
 		t.Fatalf("GetPermissions should not have failed: %v", err)
 	}
-	expected := newAccessList
+	expected = newAccessList
 	if got := acl; !reflect.DeepEqual(expected.Normalize(), got.Normalize()) {
 		t.Errorf("got %#v, exected %#v ", got, expected)
 	}
@@ -157,14 +174,14 @@
 	}
 
 	// Other takes control.
-	acl, etag, err = repostub.GetPermissions(otherCtx)
+	acl, version, err = repostub.GetPermissions(otherCtx)
 	if err != nil {
 		t.Fatalf("GetPermissions 2 should not have failed: %v", err)
 	}
 	acl["Admin"] = access.AccessList{
 		In:    []security.BlessingPattern{"root/other"},
 		NotIn: []string{}}
-	if err = repostub.SetPermissions(otherCtx, acl, etag); err != nil {
+	if err = repostub.SetPermissions(otherCtx, acl, version); err != nil {
 		t.Fatalf("SetPermissions failed: %v", err)
 	}
 
@@ -211,11 +228,11 @@
 		t.Fatal(err)
 	}
 
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, ctx, v23.GetPrincipal(ctx))
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, ctx, v23.GetPrincipal(ctx))
 	defer deferFn()
 
 	// setup mock up directory to put state in
-	storedir, cleanup := mgmttest.SetupRootDir(t, "application")
+	storedir, cleanup := servicetest.SetupRootDir(t, "application")
 	defer cleanup()
 
 	otherCtx, err := v23.SetPrincipal(ctx, testutil.NewPrincipal())
@@ -226,8 +243,8 @@
 		t.Fatal(err)
 	}
 
-	nmh := mgmttest.RunCommand(t, sh, nil, repoCmd, "repo", storedir)
-	pid := mgmttest.ReadPID(t, nmh)
+	nmh := servicetest.RunCommand(t, sh, nil, repoCmd, "repo", storedir)
+	pid := servicetest.ReadPID(t, nmh)
 	defer syscall.Kill(pid, syscall.SIGINT)
 
 	// Create example envelope.
@@ -246,20 +263,37 @@
 	if err := v2stub.Put(ctx, []string{"base"}, envelopeV1); err != nil {
 		t.Fatalf("Put() failed: %v", err)
 	}
+	v3stub := repository.ApplicationClient("repo/naps/v1")
+	if err := v3stub.Put(ctx, []string{"base"}, envelopeV1); err != nil {
+		t.Fatalf("Put() failed: %v", err)
+	}
 
 	vlog.VI(2).Info("Self can access.AccessLists but other can't.")
-	for _, path := range []string{"repo/search", "repo/search/v1", "repo/search/v2"} {
+	expectedSelfPermissions := access.Permissions{
+		"Admin": access.AccessList{
+			In:    []security.BlessingPattern{"root/$", "root/self"},
+			NotIn: []string{}},
+		"Read": access.AccessList{In: []security.BlessingPattern{"root/$", "root/self"},
+			NotIn: []string{}},
+		"Write": access.AccessList{In: []security.BlessingPattern{"root/$", "root/self"},
+			NotIn: []string{}},
+		"Debug": access.AccessList{In: []security.BlessingPattern{"root/$", "root/self"},
+			NotIn: []string{}},
+		"Resolve": access.AccessList{In: []security.BlessingPattern{"root/$", "root/self"},
+			NotIn: []string{}}}
+
+	for _, path := range []string{"repo/search", "repo/search/v1", "repo/search/v2", "repo/naps", "repo/naps/v1"} {
 		stub := repository.ApplicationClient(path)
-		acl, etag, err := stub.GetPermissions(ctx)
-		if verror.ErrorID(err) != verror.ErrNoExist.ID {
-			t.Fatalf("GetPermissions should have failed with ErrNoExist but was: %v", err)
+		acl, _, err := stub.GetPermissions(ctx)
+		if err != nil {
+			t.Fatalf("Newly uploaded envelopes failed to receive permission lists: %v", err)
 		}
-		if got, want := etag, ""; got != want {
-			t.Fatalf("GetPermissions got %v, want %v", got, want)
+
+		if got := acl; !reflect.DeepEqual(expectedSelfPermissions.Normalize(), got.Normalize()) {
+			t.Errorf("got %#v, expected %#v ", got, expectedSelfPermissions)
 		}
-		if acl != nil {
-			t.Fatalf("GetPermissions got %v, expected %v", acl, nil)
-		}
+
+		// But otherCtx doesn't have admin permissions so has no access.
 		if _, _, err := stub.GetPermissions(otherCtx); err == nil {
 			t.Fatalf("GetPermissions didn't fail for other when it should have.")
 		}
@@ -280,55 +314,77 @@
 		t.Fatalf("GetPermissions should have failed")
 	}
 
-	vlog.VI(2).Infof("Self gives other full access only to repo/search/v1.")
-	newAccessList = make(access.Permissions)
-	for _, tag := range access.AllTypicalTags() {
-		newAccessList.Add("root/other", string(tag))
-	}
-	if err := v1stub.SetPermissions(ctx, newAccessList, ""); err != nil {
-		t.Fatalf("SetPermissions failed: %v", err)
-	}
-
-	vlog.VI(2).Infof("Other can now access this location.")
-	acl, _, err := v1stub.GetPermissions(otherCtx)
+	vlog.VI(2).Infof("Self gives other full access to repo/search/...")
+	newAccessList, version, err := v1stub.GetPermissions(ctx)
 	if err != nil {
 		t.Fatalf("GetPermissions should not have failed: %v", err)
 	}
-	expected := access.Permissions{
-		"Admin": access.AccessList{
-			In:    []security.BlessingPattern{"root/other"},
-			NotIn: []string{}},
-		"Read": access.AccessList{In: []security.BlessingPattern{"root/other"},
-			NotIn: []string{}},
-		"Write": access.AccessList{In: []security.BlessingPattern{"root/other"},
-			NotIn: []string{}},
-		"Debug": access.AccessList{In: []security.BlessingPattern{"root/other"},
-			NotIn: []string{}},
-		"Resolve": access.AccessList{In: []security.BlessingPattern{"root/other"},
-			NotIn: []string{}}}
-	if got := acl; !reflect.DeepEqual(expected.Normalize(), got.Normalize()) {
-		t.Errorf("got %#v, exected %#v ", got, expected)
+	for _, tag := range access.AllTypicalTags() {
+		newAccessList.Add("root/other", string(tag))
 	}
-	vlog.VI(2).Infof("Self can too thanks to hierarchical auth.")
-	if _, _, err = v1stub.GetPermissions(ctx); err != nil {
-		t.Fatalf("GetPermissions should not have failed: %v", err)
+	if err := v1stub.SetPermissions(ctx, newAccessList, version); err != nil {
+		t.Fatalf("SetPermissions failed: %v", err)
 	}
 
-	// But other locations should be unaffected and other cannot access.
-	for _, path := range []string{"repo/search", "repo/search/v2"} {
+	expected := access.Permissions{
+		"Resolve": access.AccessList{In: []security.BlessingPattern{
+			"root/$",
+			"root/other",
+			"root/self"},
+			NotIn: []string(nil)},
+		"Admin": access.AccessList{In: []security.BlessingPattern{
+			"root/$",
+			"root/other",
+			"root/self"},
+			NotIn: []string(nil)},
+		"Read": access.AccessList{In: []security.BlessingPattern{
+			"root/$",
+			"root/other",
+			"root/self"},
+			NotIn: []string(nil)},
+		"Write": access.AccessList{In: []security.BlessingPattern{
+			"root/$",
+			"root/other",
+			"root/self"},
+			NotIn: []string(nil)},
+		"Debug": access.AccessList{In: []security.BlessingPattern{
+			"root/$",
+			"root/other", "root/self"},
+			NotIn: []string(nil)},
+	}
+
+	for _, path := range []string{"repo/search", "repo/search/v1", "repo/search/v2"} {
+		stub := repository.ApplicationClient(path)
+		vlog.VI(2).Infof("Other can now access this app independent of version.")
+		acl, _, err := stub.GetPermissions(otherCtx)
+		if err != nil {
+			t.Fatalf("GetPermissions should not have failed: %v", err)
+		}
+
+		if got := acl; !reflect.DeepEqual(expected.Normalize(), got.Normalize()) {
+			t.Errorf("got %#v, expected %#v ", got, expected)
+		}
+		vlog.VI(2).Infof("Self can also access thanks to hierarchical auth.")
+		if _, _, err = stub.GetPermissions(ctx); err != nil {
+			t.Fatalf("GetPermissions should not have failed: %v", err)
+		}
+	}
+
+	vlog.VI(2).Infof("But other locations are unaffected and other cannot access.")
+	for _, path := range []string{"repo/naps", "repo/naps/v1"} {
 		stub := repository.ApplicationClient(path)
 		if _, _, err := stub.GetPermissions(otherCtx); err == nil {
-			t.Fatalf("GetPermissions didn't fail for other when it should have.")
+			t.Fatalf("GetPermissions didn't fail when it should have.")
 		}
 	}
 
 	// Self gives other write perms on base.
-	acl, etag, err := repostub.GetPermissions(ctx)
+	newAccessList, version, err = repostub.GetPermissions(ctx)
 	if err != nil {
 		t.Fatalf("GetPermissions should not have failed: %v", err)
 	}
 	newAccessList["Write"] = access.AccessList{In: []security.BlessingPattern{"root/other", "root/self"}}
-	if err := repostub.SetPermissions(ctx, newAccessList, etag); err != nil {
+	if err := repostub.SetPermissions(ctx, newAccessList, version); err != nil {
 		t.Fatalf("SetPermissions failed: %v", err)
 	}
 
@@ -339,11 +395,23 @@
 		}
 	}
 
+	// But because application search already exists, the ACLs do not change.
+	for _, path := range []string{"repo/search", "repo/search/v1", "repo/search/v2"} {
+		stub := repository.ApplicationClient(path)
+		acl, _, err := stub.GetPermissions(otherCtx)
+		if err != nil {
+			t.Fatalf("GetPermissions should not have failed: %v", err)
+		}
+		if got := acl; !reflect.DeepEqual(expected.Normalize(), got.Normalize()) {
+			t.Errorf("got %#v, expected %#v ", got, expected)
+		}
+	}
+
 	// But self didn't give other AccessList modification permissions.
 	for _, path := range []string{"repo/search", "repo/search/v2"} {
 		stub := repository.ApplicationClient(path)
-		if _, _, err := stub.GetPermissions(otherCtx); err == nil {
-			t.Fatalf("GetPermissions didn't fail for other when it should have.")
+		if _, _, err := stub.GetPermissions(otherCtx); err != nil {
+			t.Fatalf("GetPermissions failed when it should not have for same application: %v", err)
 		}
 	}
 }
diff --git a/services/application/applicationd/dispatcher.go b/services/application/applicationd/dispatcher.go
index 4c5aa1c..9d2e65d 100644
--- a/services/application/applicationd/dispatcher.go
+++ b/services/application/applicationd/dispatcher.go
@@ -13,8 +13,8 @@
 	"v.io/v23/security/access"
 	"v.io/v23/verror"
 
-	"v.io/x/ref/services/mgmt/lib/acls"
-	"v.io/x/ref/services/mgmt/lib/fs"
+	"v.io/x/ref/services/internal/acls"
+	"v.io/x/ref/services/internal/fs"
 	"v.io/x/ref/services/repository"
 )
 
@@ -35,9 +35,14 @@
 }
 
 func (d *dispatcher) Lookup(suffix string) (interface{}, security.Authorizer, error) {
+	name, _, err := parse(nil, suffix)
+	if err != nil {
+		return nil, nil, err
+	}
+
 	auth, err := acls.NewHierarchicalAuthorizer(
 		naming.Join("/acls", "data"),
-		naming.Join("/acls", suffix, "data"),
+		naming.Join("/acls", name, "data"),
 		(*applicationAccessListStore)(d.store))
 	if err != nil {
 		return nil, nil, err
diff --git a/services/application/applicationd/impl_test.go b/services/application/applicationd/impl_test.go
index d61c7dd..781403c 100644
--- a/services/application/applicationd/impl_test.go
+++ b/services/application/applicationd/impl_test.go
@@ -18,7 +18,7 @@
 	"v.io/v23/verror"
 
 	appd "v.io/x/ref/services/application/applicationd"
-	mgmttest "v.io/x/ref/services/mgmt/lib/testutil"
+	"v.io/x/ref/services/internal/servicetest"
 	"v.io/x/ref/services/repository"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
@@ -55,7 +55,7 @@
 		t.Fatalf("NewDispatcher() failed: %v", err)
 	}
 
-	server, endpoint := mgmttest.NewServer(ctx)
+	server, endpoint := servicetest.NewServer(ctx)
 	defer server.Stop()
 
 	if err := server.ServeDispatcher("", dispatcher); err != nil {
@@ -195,7 +195,7 @@
 		t.Fatalf("NewDispatcher() failed: %v", err)
 	}
 
-	server, endpoint := mgmttest.NewServer(ctx)
+	server, endpoint := servicetest.NewServer(ctx)
 
 	if err := server.ServeDispatcher("", dispatcher); err != nil {
 		t.Fatalf("Serve(%v) failed: %v", dispatcher, err)
@@ -238,7 +238,7 @@
 		t.Fatalf("NewDispatcher() failed: %v", err)
 	}
 
-	server, endpoint = mgmttest.NewServer(ctx)
+	server, endpoint = servicetest.NewServer(ctx)
 	defer server.Stop()
 
 	if err := server.ServeDispatcher("", dispatcher); err != nil {
diff --git a/services/application/applicationd/service.go b/services/application/applicationd/service.go
index 9632cdf..3a0938b 100644
--- a/services/application/applicationd/service.go
+++ b/services/application/applicationd/service.go
@@ -7,12 +7,14 @@
 import (
 	"strings"
 
-	"v.io/x/ref/services/mgmt/lib/acls"
-	"v.io/x/ref/services/mgmt/lib/fs"
+	"v.io/x/ref/services/internal/acls"
+	"v.io/x/ref/services/internal/fs"
 	"v.io/x/ref/services/repository"
 
+	"v.io/v23/context"
 	"v.io/v23/naming"
 	"v.io/v23/rpc"
+	"v.io/v23/security"
 	"v.io/v23/security/access"
 	"v.io/v23/services/application"
 	"v.io/v23/verror"
@@ -37,7 +39,7 @@
 var (
 	ErrInvalidSuffix   = verror.Register(pkgPath+".InvalidSuffix", verror.NoRetry, "{1:}{2:} invalid suffix{:_}")
 	ErrOperationFailed = verror.Register(pkgPath+".OperationFailed", verror.NoRetry, "{1:}{2:} operation failed{:_}")
-	ErrInvalidBlessing = verror.Register(pkgPath+".InvalidBlessing", verror.NoRetry, "{1:}{2:} invalid blessing{:_}")
+	ErrNotAuthorized   = verror.Register(pkgPath+".errNotAuthorized", verror.NoRetry, "{1:}{2:} none of the client's blessings are valid {:_}")
 )
 
 // NewApplicationService returns a new Application service implementation.
@@ -45,7 +47,7 @@
 	return &appRepoService{store: store, storeRoot: storeRoot, suffix: suffix}
 }
 
-func parse(call rpc.ServerCall, suffix string) (string, string, error) {
+func parse(ctx *context.T, suffix string) (string, string, error) {
 	tokens := strings.Split(suffix, "/")
 	switch len(tokens) {
 	case 2:
@@ -53,14 +55,14 @@
 	case 1:
 		return tokens[0], "", nil
 	default:
-		return "", "", verror.New(ErrInvalidSuffix, call.Context())
+		return "", "", verror.New(ErrInvalidSuffix, ctx)
 	}
 }
 
 func (i *appRepoService) Match(call rpc.ServerCall, profiles []string) (application.Envelope, error) {
 	vlog.VI(0).Infof("%v.Match(%v)", i.suffix, profiles)
 	empty := application.Envelope{}
-	name, version, err := parse(call, i.suffix)
+	name, version, err := parse(call.Context(), i.suffix)
 	if err != nil {
 		return empty, err
 	}
@@ -88,7 +90,7 @@
 
 func (i *appRepoService) Put(call rpc.ServerCall, profiles []string, envelope application.Envelope) error {
 	vlog.VI(0).Infof("%v.Put(%v, %v)", i.suffix, profiles, envelope)
-	name, version, err := parse(call, i.suffix)
+	name, version, err := parse(call.Context(), i.suffix)
 	if err != nil {
 		return err
 	}
@@ -103,6 +105,22 @@
 		return err
 	}
 
+	// Only add a Permission list value if there is not already one
+	// present.
+	apath := naming.Join("/acls", name, "data")
+	aobj := i.store.BindObject(apath)
+	if _, err := aobj.Get(call); verror.ErrorID(err) == fs.ErrNotInMemStore.ID {
+		rb, _ := security.RemoteBlessingNames(call.Context())
+		if len(rb) == 0 {
+			// None of the client's blessings are valid.
+			return verror.New(ErrNotAuthorized, call.Context())
+		}
+		newacls := acls.PermissionsForBlessings(rb)
+		if _, err := aobj.Put(nil, newacls); err != nil {
+			return err
+		}
+	}
+
 	for _, profile := range profiles {
 		path := naming.Join(tname, "/applications", name, profile, version)
 
@@ -120,7 +138,7 @@
 
 func (i *appRepoService) Remove(call rpc.ServerCall, profile string) error {
 	vlog.VI(0).Infof("%v.Remove(%v)", i.suffix, profile)
-	name, version, err := parse(call, i.suffix)
+	name, version, err := parse(call.Context(), i.suffix)
 	if err != nil {
 		return err
 	}
@@ -230,18 +248,32 @@
 	return ch, nil
 }
 
-func (i *appRepoService) GetPermissions(call rpc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (i *appRepoService) GetPermissions(call rpc.ServerCall) (acl access.Permissions, version string, err error) {
+	name, _, err := parse(call.Context(), i.suffix)
+	if err != nil {
+		return nil, "", err
+	}
 	i.store.Lock()
 	defer i.store.Unlock()
-	path := naming.Join("/acls", i.suffix, "data")
-	return getAccessList(i.store, path)
+	path := naming.Join("/acls", name, "data")
+
+	acl, version, err = getAccessList(i.store, path)
+	if verror.ErrorID(err) == verror.ErrNoExist.ID {
+		return acls.NilAuthPermissions(call), "", nil
+	}
+
+	return acl, version, err
 }
 
-func (i *appRepoService) SetPermissions(call rpc.ServerCall, acl access.Permissions, etag string) error {
+func (i *appRepoService) SetPermissions(call rpc.ServerCall, acl access.Permissions, version string) error {
+	name, _, err := parse(call.Context(), i.suffix)
+	if err != nil {
+		return err
+	}
 	i.store.Lock()
 	defer i.store.Unlock()
-	path := naming.Join("/acls", i.suffix, "data")
-	return setAccessList(i.store, path, acl, etag)
+	path := naming.Join("/acls", name, "data")
+	return setAccessList(i.store, path, acl, version)
 }
 
 // getAccessList fetches a Permissions out of the Memstore at the provided path.
@@ -262,25 +294,25 @@
 		return nil, "", err
 	}
 
-	etag, err := acls.ComputeEtag(acl)
+	version, err := acls.ComputeVersion(acl)
 	if err != nil {
 		return nil, "", err
 	}
-	return acl, etag, nil
+	return acl, version, nil
 }
 
 // setAccessList writes a Permissions into the Memstore at the provided path.
 // where path is expected to have already been cleaned by naming.Join.
-func setAccessList(store *fs.Memstore, path string, acl access.Permissions, etag string) error {
-	_, oetag, err := getAccessList(store, path)
+func setAccessList(store *fs.Memstore, path string, acl access.Permissions, version string) error {
+	_, oversion, err := getAccessList(store, path)
 	if verror.ErrorID(err) == verror.ErrNoExist.ID {
-		oetag = etag
+		oversion = version
 	} else if err != nil {
 		return err
 	}
 
-	if oetag != etag {
-		return verror.NewErrBadEtag(nil)
+	if oversion != version {
+		return verror.NewErrBadVersion(nil)
 	}
 
 	tname, err := store.BindTransactionRoot("").CreateTransaction(nil)
diff --git a/services/binary/binary/doc.go b/services/binary/binary/doc.go
index 5f85f8c..bd9f9b5 100644
--- a/services/binary/binary/doc.go
+++ b/services/binary/binary/doc.go
@@ -56,28 +56,6 @@
    If true, dump all stored traces on runtime shutdown.
  -v23.vtrace.sample-rate=0
    Rate (from 0.0 to 1.0) to sample vtrace traces.
- -vanadium.i18n_catalogue=
-   18n catalogue files to load, comma separated
- -veyron.credentials=
-   directory to use for storing security credentials
- -veyron.namespace.root=[/ns.dev.v.io:8101]
-   local namespace root; can be repeated to provided multiple roots
- -veyron.proxy=
-   object name of proxy service to use to export services across network
-   boundaries
- -veyron.tcp.address=
-   address to listen on
- -veyron.tcp.protocol=wsh
-   protocol to listen with
- -veyron.vtrace.cache_size=1024
-   The number of vtrace traces to store in memory.
- -veyron.vtrace.collect_regexp=
-   Spans and annotations that match this regular expression will trigger trace
-   collection.
- -veyron.vtrace.dump_on_shutdown=true
-   If true, dump all stored traces on runtime shutdown.
- -veyron.vtrace.sample_rate=0
-   Rate (from 0.0 to 1.0) to sample vtrace traces.
  -vmodule=
    comma-separated list of pattern=N settings for file-filtered logging
 
diff --git a/services/binary/binary/impl.go b/services/binary/binary/impl.go
index 41f6a71..6b9add4 100644
--- a/services/binary/binary/impl.go
+++ b/services/binary/binary/impl.go
@@ -9,7 +9,7 @@
 	"os"
 
 	"v.io/x/lib/cmdline"
-	"v.io/x/ref/services/mgmt/lib/binary"
+	"v.io/x/ref/services/binary/binarylib"
 )
 
 var cmdDelete = &cmdline.Command{
@@ -26,7 +26,7 @@
 		return cmd.UsageErrorf("delete: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
 	von := args[0]
-	if err := binary.Delete(gctx, von); err != nil {
+	if err := binarylib.Delete(gctx, von); err != nil {
 		return err
 	}
 	fmt.Fprintf(cmd.Stdout(), "Binary deleted successfully\n")
@@ -53,7 +53,7 @@
 		return cmd.UsageErrorf("download: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
 	von, filename := args[0], args[1]
-	if err := binary.DownloadToFile(gctx, von, filename); err != nil {
+	if err := binarylib.DownloadToFile(gctx, von, filename); err != nil {
 		return err
 	}
 	fmt.Fprintf(cmd.Stdout(), "Binary downloaded to file %s\n", filename)
@@ -85,14 +85,14 @@
 		return err
 	}
 	if fi.IsDir() {
-		sig, err := binary.UploadFromDir(gctx, von, filename)
+		sig, err := binarylib.UploadFromDir(gctx, von, filename)
 		if err != nil {
 			return err
 		}
 		fmt.Fprintf(cmd.Stdout(), "Binary package uploaded from directory %s signature(%v)\n", filename, sig)
 		return nil
 	}
-	sig, err := binary.UploadFromFile(gctx, von, filename)
+	sig, err := binarylib.UploadFromFile(gctx, von, filename)
 	if err != nil {
 		return err
 	}
@@ -114,7 +114,7 @@
 		return cmd.UsageErrorf("rooturl: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
 	von := args[0]
-	url, _, err := binary.DownloadUrl(gctx, von)
+	url, _, err := binarylib.DownloadUrl(gctx, von)
 	if err != nil {
 		return err
 	}
diff --git a/services/binary/binary/impl_test.go b/services/binary/binary/impl_test.go
index 3fe3ca6..f833c02 100644
--- a/services/binary/binary/impl_test.go
+++ b/services/binary/binary/impl_test.go
@@ -81,11 +81,11 @@
 	return nil
 }
 
-func (s *server) GetPermissions(rpc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (s *server) GetPermissions(rpc.ServerCall) (acl access.Permissions, version string, err error) {
 	return nil, "", nil
 }
 
-func (s *server) SetPermissions(call rpc.ServerCall, acl access.Permissions, etag string) error {
+func (s *server) SetPermissions(call rpc.ServerCall, acl access.Permissions, version string) error {
 	return nil
 }
 
diff --git a/services/binary/binary/main.go b/services/binary/binary/main.go
index 3af5487..e33dc99 100644
--- a/services/binary/binary/main.go
+++ b/services/binary/binary/main.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
 
 package main
 
diff --git a/services/binary/binarylib/acl_test.go b/services/binary/binarylib/acl_test.go
index 488b841..8dbf0ba 100644
--- a/services/binary/binarylib/acl_test.go
+++ b/services/binary/binarylib/acl_test.go
@@ -20,11 +20,10 @@
 	"v.io/v23/services/repository"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
-
+	vsecurity "v.io/x/ref/lib/security"
 	"v.io/x/ref/lib/signals"
-	vsecurity "v.io/x/ref/security"
 	"v.io/x/ref/services/binary/binarylib"
-	mgmttest "v.io/x/ref/services/mgmt/lib/testutil"
+	"v.io/x/ref/services/internal/servicetest"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
 )
@@ -48,7 +47,7 @@
 	defer vlog.VI(1).Infof("%v terminating", publishName)
 	defer shutdown()
 
-	server, endpoint := mgmttest.NewServer(ctx)
+	server, endpoint := servicetest.NewServer(ctx)
 	name := naming.JoinAddressName(endpoint, "")
 	vlog.VI(1).Infof("binaryd name: %v", name)
 
@@ -102,19 +101,19 @@
 		t.Fatalf("SetPrincipal failed: %v", err)
 	}
 
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, childCtx, v23.GetPrincipal(childCtx))
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, childCtx, v23.GetPrincipal(childCtx))
 	defer deferFn()
 	// make selfCtx and childCtx have the same Namespace Roots as set by
 	// CreateShellAndMountTable
 	v23.GetNamespace(selfCtx).SetRoots(v23.GetNamespace(childCtx).Roots()...)
 
 	// setup mock up directory to put state in
-	storedir, cleanup := mgmttest.SetupRootDir(t, "bindir")
+	storedir, cleanup := servicetest.SetupRootDir(t, "bindir")
 	defer cleanup()
 	prepDirectory(t, storedir)
 
-	nmh := mgmttest.RunCommand(t, sh, nil, binaryCmd, "bini", storedir)
-	pid := mgmttest.ReadPID(t, nmh)
+	nmh := servicetest.RunCommand(t, sh, nil, binaryCmd, "bini", storedir)
+	pid := servicetest.ReadPID(t, nmh)
 	defer syscall.Kill(pid, syscall.SIGINT)
 
 	vlog.VI(2).Infof("Self uploads a shared and private binary.")
@@ -153,11 +152,11 @@
 	if err != nil {
 		t.Fatalf("SetPrincipal failed: %v", err)
 	}
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, selfCtx, v23.GetPrincipal(selfCtx))
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, selfCtx, v23.GetPrincipal(selfCtx))
 	defer deferFn()
 
 	// setup mock up directory to put state in
-	storedir, cleanup := mgmttest.SetupRootDir(t, "bindir")
+	storedir, cleanup := servicetest.SetupRootDir(t, "bindir")
 	defer cleanup()
 	prepDirectory(t, storedir)
 
@@ -170,8 +169,8 @@
 		t.Fatalf("SetPrincipal() failed: %v", err)
 	}
 
-	nmh := mgmttest.RunCommand(t, sh, nil, binaryCmd, "bini", storedir)
-	pid := mgmttest.ReadPID(t, nmh)
+	nmh := servicetest.RunCommand(t, sh, nil, binaryCmd, "bini", storedir)
+	pid := servicetest.ReadPID(t, nmh)
 	defer syscall.Kill(pid, syscall.SIGINT)
 
 	vlog.VI(2).Infof("Self uploads a shared and private binary.")
@@ -216,7 +215,7 @@
 	}
 
 	vlog.VI(2).Infof("Validate the AccessList file on bini/private.")
-	acl, etag, err := b("bini/private").GetPermissions(selfCtx)
+	acl, version, err := b("bini/private").GetPermissions(selfCtx)
 	if err != nil {
 		t.Fatalf("GetPermissions failed: %v", err)
 	}
@@ -239,7 +238,7 @@
 		acl.Clear("self", string(tag))
 		acl.Add("self/$", string(tag))
 	}
-	if err := b("bini/private").SetPermissions(selfCtx, acl, etag); err != nil {
+	if err := b("bini/private").SetPermissions(selfCtx, acl, version); err != nil {
 		t.Fatalf("SetPermissions failed: %v", err)
 	}
 
@@ -437,11 +436,11 @@
 	if err != nil {
 		t.Fatalf("SetPrincipal failed: %v", err)
 	}
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, selfCtx, v23.GetPrincipal(selfCtx))
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, selfCtx, v23.GetPrincipal(selfCtx))
 	defer deferFn()
 
 	// setup mock up directory to put state in
-	storedir, cleanup := mgmttest.SetupRootDir(t, "bindir")
+	storedir, cleanup := servicetest.SetupRootDir(t, "bindir")
 	defer cleanup()
 	prepDirectory(t, storedir)
 
@@ -450,8 +449,8 @@
 		t.Fatalf("otherPrincipal.AddToRoots() failed: %v", err)
 	}
 
-	nmh := mgmttest.RunCommand(t, sh, nil, binaryCmd, "bini", storedir)
-	pid := mgmttest.ReadPID(t, nmh)
+	nmh := servicetest.RunCommand(t, sh, nil, binaryCmd, "bini", storedir)
+	pid := servicetest.ReadPID(t, nmh)
 	defer syscall.Kill(pid, syscall.SIGINT)
 
 	acl, tag, err := b("bini").GetPermissions(selfCtx)
diff --git a/services/mgmt/lib/binary/impl.go b/services/binary/binarylib/client.go
similarity index 97%
rename from services/mgmt/lib/binary/impl.go
rename to services/binary/binarylib/client.go
index aae347a..9b97863 100644
--- a/services/mgmt/lib/binary/impl.go
+++ b/services/binary/binarylib/client.go
@@ -2,11 +2,9 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package binary provides a client-side library for the binary
-// repository.
-//
+package binarylib
+
 // TODO(jsimsa): Implement parallel download and upload.
-package binary
 
 import (
 	"bytes"
@@ -29,11 +27,9 @@
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
 
-	"v.io/x/ref/services/mgmt/lib/packages"
+	"v.io/x/ref/services/internal/packages"
 )
 
-const pkgPath = "v.io/x/ref/services/mgmt/lib/binary"
-
 var (
 	errOperationFailed = verror.Register(pkgPath+".errOperationFailed", verror.NoRetry, "{1:}{2:} operation failed{:_}")
 )
diff --git a/services/mgmt/lib/binary/impl_test.go b/services/binary/binarylib/client_test.go
similarity index 91%
rename from services/mgmt/lib/binary/impl_test.go
rename to services/binary/binarylib/client_test.go
index 7bb0543..2d91162 100644
--- a/services/mgmt/lib/binary/impl_test.go
+++ b/services/binary/binarylib/client_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package binary
+package binarylib
 
 import (
 	"bytes"
@@ -19,8 +19,6 @@
 	"v.io/v23/services/repository"
 	"v.io/x/lib/vlog"
 
-	_ "v.io/x/ref/profiles"
-	"v.io/x/ref/services/binary/binarylib"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
 )
@@ -37,9 +35,9 @@
 	if err != nil {
 		t.Fatalf("TempDir() failed: %v", err)
 	}
-	path, perm := filepath.Join(rootDir, binarylib.VersionFile), os.FileMode(0600)
-	if err := ioutil.WriteFile(path, []byte(binarylib.Version), perm); err != nil {
-		vlog.Fatalf("WriteFile(%v, %v, %v) failed: %v", path, binarylib.Version, perm, err)
+	path, perm := filepath.Join(rootDir, VersionFile), os.FileMode(0600)
+	if err := ioutil.WriteFile(path, []byte(Version), perm); err != nil {
+		vlog.Fatalf("WriteFile(%v, %v, %v) failed: %v", path, Version, perm, err)
 	}
 	// Setup and start the binary repository server.
 	server, err := v23.NewServer(ctx)
@@ -47,12 +45,12 @@
 		t.Fatalf("NewServer() failed: %v", err)
 	}
 	depth := 2
-	state, err := binarylib.NewState(rootDir, "http://test-root-url", depth)
+	state, err := NewState(rootDir, "http://test-root-url", depth)
 	if err != nil {
 		t.Fatalf("NewState(%v, %v) failed: %v", rootDir, depth, err)
 	}
 
-	dispatcher, err := binarylib.NewDispatcher(v23.GetPrincipal(ctx), state)
+	dispatcher, err := NewDispatcher(v23.GetPrincipal(ctx), state)
 	if err != nil {
 		t.Fatalf("NewDispatcher() failed: %v\n", err)
 	}
diff --git a/services/binary/binarylib/dispatcher.go b/services/binary/binarylib/dispatcher.go
index 93c268c..9b0b4d9 100644
--- a/services/binary/binarylib/dispatcher.go
+++ b/services/binary/binarylib/dispatcher.go
@@ -11,7 +11,7 @@
 	"v.io/v23/security"
 	"v.io/v23/services/repository"
 
-	"v.io/x/ref/services/mgmt/lib/acls"
+	"v.io/x/ref/services/internal/acls"
 )
 
 const (
diff --git a/services/binary/binarylib/impl_test.go b/services/binary/binarylib/impl_test.go
index 571000a..d8d5a17 100644
--- a/services/binary/binarylib/impl_test.go
+++ b/services/binary/binarylib/impl_test.go
@@ -23,7 +23,7 @@
 
 	_ "v.io/x/ref/profiles/static"
 	"v.io/x/ref/services/binary/binarylib"
-	mgmttest "v.io/x/ref/services/mgmt/lib/testutil"
+	"v.io/x/ref/services/internal/servicetest"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
 )
@@ -35,11 +35,11 @@
 // startServer starts the binary repository server.
 func startServer(t *testing.T, ctx *context.T, depth int) (repository.BinaryClientMethods, string, string, func()) {
 	// Setup the root of the binary repository.
-	rootDir, cleanup := mgmttest.SetupRootDir(t, "bindir")
+	rootDir, cleanup := servicetest.SetupRootDir(t, "bindir")
 	prepDirectory(t, rootDir)
 
 	// Setup and start the binary repository server.
-	server, endpoint := mgmttest.NewServer(ctx)
+	server, endpoint := servicetest.NewServer(ctx)
 
 	listener, err := net.Listen("tcp", "127.0.0.1:0")
 	if err != nil {
diff --git a/services/binary/binarylib/service.go b/services/binary/binarylib/service.go
index caf878d..5a83d94 100644
--- a/services/binary/binarylib/service.go
+++ b/services/binary/binarylib/service.go
@@ -47,7 +47,7 @@
 	"v.io/v23/services/repository"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/services/mgmt/lib/acls"
+	"v.io/x/ref/services/internal/acls"
 )
 
 // binaryService implements the Binary server interface.
@@ -92,28 +92,6 @@
 
 const BufferLength = 4096
 
-func prefixPatterns(blessings []string) []security.BlessingPattern {
-	var patterns []security.BlessingPattern
-	for _, b := range blessings {
-		patterns = append(patterns, security.BlessingPattern(b).PrefixPatterns()...)
-	}
-	return patterns
-}
-
-// insertAccessLists configures the starting AccessList set for a newly "Create"-d binary based
-// on the caller's blessings.
-func insertAccessLists(dir string, aclstore *acls.PathStore, blessings []string) error {
-	tam := make(access.Permissions)
-
-	// Add the invoker's blessings and all its prefixes.
-	for _, p := range prefixPatterns(blessings) {
-		for _, tag := range access.AllTypicalTags() {
-			tam.Add(p, string(tag))
-		}
-	}
-	return aclstore.Set(dir, tam, "")
-}
-
 func (i *binaryService) Create(call rpc.ServerCall, nparts int32, mediaInfo repository.MediaInfo) error {
 	vlog.Infof("%v.Create(%v, %v)", i.suffix, nparts, mediaInfo)
 	if nparts < 1 {
@@ -141,7 +119,7 @@
 		// None of the client's blessings are valid.
 		return verror.New(ErrNotAuthorized, call.Context())
 	}
-	if err := insertAccessLists(aclPath(i.state.rootDir, i.suffix), i.aclstore, rb); err != nil {
+	if err := i.aclstore.Set(aclPath(i.state.rootDir, i.suffix), acls.PermissionsForBlessings(rb), ""); err != nil {
 		vlog.Errorf("insertAccessLists(%v) failed: %v", rb, err)
 		return verror.New(ErrOperationFailed, call.Context())
 	}
@@ -392,28 +370,17 @@
 	return ch, nil
 }
 
-func (i *binaryService) GetPermissions(call rpc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (i *binaryService) GetPermissions(call rpc.ServerCall) (acl access.Permissions, version string, err error) {
 
-	acl, etag, err = i.aclstore.Get(aclPath(i.state.rootDir, i.suffix))
+	acl, version, err = i.aclstore.Get(aclPath(i.state.rootDir, i.suffix))
 
 	if os.IsNotExist(err) {
 		// No AccessList file found which implies a nil authorizer. This results in default authorization.
-		// Therefore we return an AccessList that mimics the default authorization policy (i.e., the AccessList
-		// is matched by all blessings that are either extensions of one of the local blessings or
-		// can be extended to form one of the local blessings.)
-		tam := make(access.Permissions)
-
-		lb := security.LocalBlessingNames(call.Context())
-		for _, p := range prefixPatterns(lb) {
-			for _, tag := range access.AllTypicalTags() {
-				tam.Add(p, string(tag))
-			}
-		}
-		return tam, "", nil
+		return acls.NilAuthPermissions(call), "", nil
 	}
-	return acl, etag, err
+	return acl, version, err
 }
 
-func (i *binaryService) SetPermissions(_ rpc.ServerCall, acl access.Permissions, etag string) error {
-	return i.aclstore.Set(aclPath(i.state.rootDir, i.suffix), acl, etag)
+func (i *binaryService) SetPermissions(_ rpc.ServerCall, acl access.Permissions, version string) error {
+	return i.aclstore.Set(aclPath(i.state.rootDir, i.suffix), acl, version)
 }
diff --git a/services/build/build/doc.go b/services/build/build/doc.go
index 846047a..a5ae097 100644
--- a/services/build/build/doc.go
+++ b/services/build/build/doc.go
@@ -53,28 +53,6 @@
    If true, dump all stored traces on runtime shutdown.
  -v23.vtrace.sample-rate=0
    Rate (from 0.0 to 1.0) to sample vtrace traces.
- -vanadium.i18n_catalogue=
-   18n catalogue files to load, comma separated
- -veyron.credentials=
-   directory to use for storing security credentials
- -veyron.namespace.root=[/ns.dev.v.io:8101]
-   local namespace root; can be repeated to provided multiple roots
- -veyron.proxy=
-   object name of proxy service to use to export services across network
-   boundaries
- -veyron.tcp.address=
-   address to listen on
- -veyron.tcp.protocol=wsh
-   protocol to listen with
- -veyron.vtrace.cache_size=1024
-   The number of vtrace traces to store in memory.
- -veyron.vtrace.collect_regexp=
-   Spans and annotations that match this regular expression will trigger trace
-   collection.
- -veyron.vtrace.dump_on_shutdown=true
-   If true, dump all stored traces on runtime shutdown.
- -veyron.vtrace.sample_rate=0
-   Rate (from 0.0 to 1.0) to sample vtrace traces.
  -vmodule=
    comma-separated list of pattern=N settings for file-filtered logging
 
diff --git a/services/build/build/main.go b/services/build/build/main.go
index 3af5487..e33dc99 100644
--- a/services/build/build/main.go
+++ b/services/build/build/main.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
 
 package main
 
diff --git a/services/build/buildd/impl_test.go b/services/build/buildd/impl_test.go
index b152e1f..ffce344 100644
--- a/services/build/buildd/impl_test.go
+++ b/services/build/buildd/impl_test.go
@@ -24,9 +24,9 @@
 // findGoBinary returns the path to the given Go binary and
 // the GOROOT environment variable to use.
 func findGoBinary(t *testing.T, name string) (bin, goroot string) {
-	root := os.Getenv("VANADIUM_ROOT")
+	root := os.Getenv("V23_ROOT")
 	if root == "" {
-		t.Fatalf("VANADIUM_ROOT is not set")
+		t.Fatalf("V23_ROOT is not set")
 	}
 	envroot := filepath.Join(root, "environment", "go", runtime.GOOS, runtime.GOARCH, "go")
 	envbin := filepath.Join(envroot, "bin", name)
diff --git a/services/build/buildd/main.go b/services/build/buildd/main.go
index 0379642..c2b05de 100644
--- a/services/build/buildd/main.go
+++ b/services/build/buildd/main.go
@@ -11,10 +11,10 @@
 	"v.io/v23"
 	"v.io/v23/services/build"
 	"v.io/x/lib/vlog"
-
+	"v.io/x/ref/lib/security/securityflag"
 	"v.io/x/ref/lib/signals"
+
 	_ "v.io/x/ref/profiles/roaming"
-	vflag "v.io/x/ref/security/flag"
 )
 
 var (
@@ -38,7 +38,7 @@
 		vlog.Errorf("Listen(%s) failed: %v", ls, err)
 		return
 	}
-	if err := server.Serve(*name, build.BuilderServer(NewBuilderService(*gobin, *goroot)), vflag.NewAuthorizerOrDie()); err != nil {
+	if err := server.Serve(*name, build.BuilderServer(NewBuilderService(*gobin, *goroot)), securityflag.NewAuthorizerOrDie()); err != nil {
 		vlog.Errorf("Serve(%v) failed: %v", *name, err)
 		return
 	}
diff --git a/services/debug/debug/doc.go b/services/debug/debug/doc.go
index bdb3a7b..0283fff 100644
--- a/services/debug/debug/doc.go
+++ b/services/debug/debug/doc.go
@@ -57,28 +57,6 @@
    If true, dump all stored traces on runtime shutdown.
  -v23.vtrace.sample-rate=0
    Rate (from 0.0 to 1.0) to sample vtrace traces.
- -vanadium.i18n_catalogue=
-   18n catalogue files to load, comma separated
- -veyron.credentials=
-   directory to use for storing security credentials
- -veyron.namespace.root=[/ns.dev.v.io:8101]
-   local namespace root; can be repeated to provided multiple roots
- -veyron.proxy=
-   object name of proxy service to use to export services across network
-   boundaries
- -veyron.tcp.address=
-   address to listen on
- -veyron.tcp.protocol=wsh
-   protocol to listen with
- -veyron.vtrace.cache_size=1024
-   The number of vtrace traces to store in memory.
- -veyron.vtrace.collect_regexp=
-   Spans and annotations that match this regular expression will trigger trace
-   collection.
- -veyron.vtrace.dump_on_shutdown=true
-   If true, dump all stored traces on runtime shutdown.
- -veyron.vtrace.sample_rate=0
-   Rate (from 0.0 to 1.0) to sample vtrace traces.
  -vmodule=
    comma-separated list of pattern=N settings for file-filtered logging
 
diff --git a/services/debug/debug/main.go b/services/debug/debug/main.go
index 3af5487..e33dc99 100644
--- a/services/debug/debug/main.go
+++ b/services/debug/debug/main.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
 
 package main
 
diff --git a/services/mgmt/device/config.vdl b/services/device/config.vdl
similarity index 100%
rename from services/mgmt/device/config.vdl
rename to services/device/config.vdl
diff --git a/services/mgmt/device/config.vdl.go b/services/device/config.vdl.go
similarity index 98%
rename from services/mgmt/device/config.vdl.go
rename to services/device/config.vdl.go
index 769efa9..d42e2db 100644
--- a/services/mgmt/device/config.vdl.go
+++ b/services/device/config.vdl.go
@@ -109,7 +109,7 @@
 // descConfig hides the desc to keep godoc clean.
 var descConfig = rpc.InterfaceDesc{
 	Name:    "Config",
-	PkgPath: "v.io/x/ref/services/mgmt/device",
+	PkgPath: "v.io/x/ref/services/device",
 	Doc:     "// Config is an RPC API to the config service.",
 	Methods: []rpc.MethodDesc{
 		{
diff --git a/cmd/mgmt/device/acl_fmt.go b/services/device/device/acl_fmt.go
similarity index 100%
rename from cmd/mgmt/device/acl_fmt.go
rename to services/device/device/acl_fmt.go
diff --git a/cmd/mgmt/device/acl_impl.go b/services/device/device/acl_impl.go
similarity index 93%
rename from cmd/mgmt/device/acl_impl.go
rename to services/device/device/acl_impl.go
index 0b02e14..5eacbfa 100644
--- a/cmd/mgmt/device/acl_impl.go
+++ b/services/device/device/acl_impl.go
@@ -107,10 +107,10 @@
 
 	// Set the AccessLists on the specified names.
 	for {
-		objAccessList, etag := make(access.Permissions), ""
+		objAccessList, version := make(access.Permissions), ""
 		if !forceSet {
 			var err error
-			if objAccessList, etag, err = device.ApplicationClient(vanaName).GetPermissions(gctx); err != nil {
+			if objAccessList, version, err = device.ApplicationClient(vanaName).GetPermissions(gctx); err != nil {
 				return fmt.Errorf("GetPermissions(%s) failed: %v", vanaName, err)
 			}
 		}
@@ -124,8 +124,8 @@
 				}
 			}
 		}
-		switch err := device.ApplicationClient(vanaName).SetPermissions(gctx, objAccessList, etag); {
-		case err != nil && verror.ErrorID(err) != verror.ErrBadEtag.ID:
+		switch err := device.ApplicationClient(vanaName).SetPermissions(gctx, objAccessList, version); {
+		case err != nil && verror.ErrorID(err) != verror.ErrBadVersion.ID:
 			return fmt.Errorf("SetPermissions(%s) failed: %v", vanaName, err)
 		case err == nil:
 			return nil
diff --git a/cmd/mgmt/device/acl_test.go b/services/device/device/acl_test.go
similarity index 93%
rename from cmd/mgmt/device/acl_test.go
rename to services/device/device/acl_test.go
index a8894e4..cc4a0cc 100644
--- a/cmd/mgmt/device/acl_test.go
+++ b/services/device/device/acl_test.go
@@ -15,10 +15,10 @@
 	"v.io/v23/security/access"
 	"v.io/v23/verror"
 
-	cmd_device "v.io/x/ref/cmd/mgmt/device"
+	cmd_device "v.io/x/ref/services/device/device"
 )
 
-const pkgPath = "v.io/x/ref/cmd/mgmt/device/main"
+const pkgPath = "v.io/x/ref/services/device/main"
 
 var (
 	errOops = verror.Register(pkgPath+".errOops", verror.NoRetry, "oops!")
@@ -52,8 +52,8 @@
 				In: []security.BlessingPattern{"other", "self"},
 			},
 		},
-		etag: "anEtagForToday",
-		err:  nil,
+		version: "aVersionForToday",
+		err:     nil,
 	}})
 
 	if err := cmd.Execute([]string{"acl", "get", deviceName}); err != nil {
@@ -138,10 +138,10 @@
 				NotIn: []string{"other/bob"},
 			},
 		},
-		etag: "anEtagForToday",
-		err:  nil,
+		version: "aVersionForToday",
+		err:     nil,
 	},
-		verror.NewErrBadEtag(nil),
+		verror.NewErrBadVersion(nil),
 		GetPermissionsResponse{
 			acl: access.Permissions{
 				"Admin": access.AccessList{
@@ -152,8 +152,8 @@
 					NotIn: []string{"other/bob/baddevice"},
 				},
 			},
-			etag: "anEtagForTomorrow",
-			err:  nil,
+			version: "aVersionForTomorrow",
+			err:     nil,
 		},
 		nil,
 	})
@@ -199,7 +199,7 @@
 					NotIn: []string(nil),
 				},
 			},
-			etag: "anEtagForToday",
+			version: "aVersionForToday",
 		},
 		"GetPermissions",
 		SetPermissionsStimulus{
@@ -218,7 +218,7 @@
 					NotIn: []string(nil),
 				},
 			},
-			etag: "anEtagForTomorrow",
+			version: "aVersionForTomorrow",
 		},
 	}
 
@@ -231,9 +231,9 @@
 
 	// GetPermissions fails.
 	tape.SetResponses([]interface{}{GetPermissionsResponse{
-		acl:  access.Permissions{},
-		etag: "anEtagForToday",
-		err:  verror.New(errOops, nil),
+		acl:     access.Permissions{},
+		version: "aVersionForToday",
+		err:     verror.New(errOops, nil),
 	},
 	})
 
@@ -256,15 +256,15 @@
 	stdout.Reset()
 	stderr.Reset()
 
-	// SetPermissions fails with something other than a bad etag failure.
+	// SetPermissions fails with something other than a bad version failure.
 	tape.SetResponses([]interface{}{GetPermissionsResponse{
 		acl: access.Permissions{
 			"Read": access.AccessList{
 				In: []security.BlessingPattern{"other", "self"},
 			},
 		},
-		etag: "anEtagForToday",
-		err:  nil,
+		version: "aVersionForToday",
+		err:     nil,
 	},
 		verror.New(errOops, nil),
 	})
@@ -288,7 +288,7 @@
 					NotIn: []string(nil),
 				},
 			},
-			etag: "anEtagForToday",
+			version: "aVersionForToday",
 		},
 	}
 
diff --git a/cmd/mgmt/device/associate_impl.go b/services/device/device/associate_impl.go
similarity index 100%
rename from cmd/mgmt/device/associate_impl.go
rename to services/device/device/associate_impl.go
diff --git a/cmd/mgmt/device/devicemanager_mock_test.go b/services/device/device/devicemanager_mock_test.go
similarity index 93%
rename from cmd/mgmt/device/devicemanager_mock_test.go
rename to services/device/device/devicemanager_mock_test.go
index 42d502f..7c8e2d8 100644
--- a/cmd/mgmt/device/devicemanager_mock_test.go
+++ b/services/device/device/devicemanager_mock_test.go
@@ -24,8 +24,8 @@
 	"v.io/v23/services/repository"
 	"v.io/x/lib/vlog"
 
-	binlib "v.io/x/ref/services/mgmt/lib/binary"
-	pkglib "v.io/x/ref/services/mgmt/lib/packages"
+	"v.io/x/ref/services/binary/binarylib"
+	"v.io/x/ref/services/internal/packages"
 )
 
 type mockDeviceInvoker struct {
@@ -144,11 +144,11 @@
 	}
 	defer os.RemoveAll(dir)
 	tmpFile := filepath.Join(dir, "downloaded")
-	if err := binlib.DownloadToFile(ctx, pkgVON, tmpFile); err != nil {
+	if err := binarylib.DownloadToFile(ctx, pkgVON, tmpFile); err != nil {
 		return 0, fmt.Errorf("DownloadToFile failed: %v", err)
 	}
 	dst := filepath.Join(dir, "install")
-	if err := pkglib.Install(tmpFile, dst); err != nil {
+	if err := packages.Install(tmpFile, dst); err != nil {
 		return 0, fmt.Errorf("packages.Install failed: %v", err)
 	}
 	return packageSize(dst), nil
@@ -167,7 +167,7 @@
 		is.appName = appNameAfterFetch
 		is.files = make(map[string]int64)
 		// Fetch the binary and record its size in the stimulus.
-		data, mediaInfo, err := binlib.Download(call.Context(), binaryName)
+		data, mediaInfo, err := binarylib.Download(call.Context(), binaryName)
 		if err != nil {
 			return "", err
 		}
@@ -245,25 +245,25 @@
 
 // Mock AccessList getting and setting
 type GetPermissionsResponse struct {
-	acl  access.Permissions
-	etag string
-	err  error
+	acl     access.Permissions
+	version string
+	err     error
 }
 
 type SetPermissionsStimulus struct {
-	fun  string
-	acl  access.Permissions
-	etag string
+	fun     string
+	acl     access.Permissions
+	version string
 }
 
-func (mni *mockDeviceInvoker) SetPermissions(_ rpc.ServerCall, acl access.Permissions, etag string) error {
-	return mni.simpleCore(SetPermissionsStimulus{"SetPermissions", acl, etag}, "SetPermissions")
+func (mni *mockDeviceInvoker) SetPermissions(_ rpc.ServerCall, acl access.Permissions, version string) error {
+	return mni.simpleCore(SetPermissionsStimulus{"SetPermissions", acl, version}, "SetPermissions")
 }
 
 func (mni *mockDeviceInvoker) GetPermissions(rpc.ServerCall) (access.Permissions, string, error) {
 	ir := mni.tape.Record("GetPermissions")
 	r := ir.(GetPermissionsResponse)
-	return r.acl, r.etag, r.err
+	return r.acl, r.version, r.err
 }
 
 func (mni *mockDeviceInvoker) Debug(rpc.ServerCall) (string, error) {
diff --git a/cmd/mgmt/device/doc.go b/services/device/device/doc.go
similarity index 90%
rename from cmd/mgmt/device/doc.go
rename to services/device/device/doc.go
index 42a8873..a9a06ad 100644
--- a/cmd/mgmt/device/doc.go
+++ b/services/device/device/doc.go
@@ -36,16 +36,30 @@
 The global flags are:
  -alsologtostderr=true
    log to standard error as well as files
+ -dryrun=false
+   Elides root-requiring systemcalls.
  -log_backtrace_at=:0
    when logging hits line file:N, emit a stack trace
  -log_dir=
    if non-empty, write log files to this directory
+ -logdir=
+   Path to the log directory.
  -logtostderr=false
    log to standard error instead of files
  -max_stack_buf_size=4292608
    max size in bytes of the buffer to use for logging stack traces
+ -minuid=501
+   UIDs cannot be less than this number.
+ -progname=unnamed_app
+   Visible name of the application, used in argv[0]
+ -rm=false
+   Remove the file trees given as command-line arguments.
+ -run=
+   Path to the application to exec.
  -stderrthreshold=2
    logs at or above this threshold go to stderr
+ -username=
+   The UNIX user name used for the other functions of this tool.
  -v=0
    log level for V logs
  -v23.credentials=
@@ -75,35 +89,10 @@
    If true, dump all stored traces on runtime shutdown.
  -v23.vtrace.sample-rate=0
    Rate (from 0.0 to 1.0) to sample vtrace traces.
- -vanadium.i18n_catalogue=
-   18n catalogue files to load, comma separated
- -veyron.acl.file=map[]
-   specify an acl file as <name>:<aclfile>
- -veyron.acl.literal=
-   explicitly specify the runtime acl as a JSON-encoded access.Permissions.
-   Overrides all --veyron.acl.file flags.
- -veyron.credentials=
-   directory to use for storing security credentials
- -veyron.namespace.root=[/ns.dev.v.io:8101]
-   local namespace root; can be repeated to provided multiple roots
- -veyron.proxy=
-   object name of proxy service to use to export services across network
-   boundaries
- -veyron.tcp.address=
-   address to listen on
- -veyron.tcp.protocol=wsh
-   protocol to listen with
- -veyron.vtrace.cache_size=1024
-   The number of vtrace traces to store in memory.
- -veyron.vtrace.collect_regexp=
-   Spans and annotations that match this regular expression will trigger trace
-   collection.
- -veyron.vtrace.dump_on_shutdown=true
-   If true, dump all stored traces on runtime shutdown.
- -veyron.vtrace.sample_rate=0
-   Rate (from 0.0 to 1.0) to sample vtrace traces.
  -vmodule=
    comma-separated list of pattern=N settings for file-filtered logging
+ -workspace=
+   Path to the application's workspace directory.
 
 Device Install
 
@@ -382,8 +371,8 @@
 Device Publish
 
 Publishes the given application(s) to the binary and application servers. The
-binaries should be in $VANADIUM_ROOT/release/go/bin/[<GOOS>_<GOARCH>]. The
-binary is published as <binserv>/<binary name>/<GOOS>-<GOARCH>/<TIMESTAMP>. The
+binaries should be in $V23_ROOT/release/go/bin/[<GOOS>_<GOARCH>]. The binary is
+published as <binserv>/<binary name>/<GOOS>-<GOARCH>/<TIMESTAMP>. The
 application envelope is published as <appserv>/<binary name>/0. Optionally, adds
 blessing patterns to the Read and Resolve AccessLists.
 
diff --git a/cmd/mgmt/device/impl.go b/services/device/device/impl.go
similarity index 96%
rename from cmd/mgmt/device/impl.go
rename to services/device/device/impl.go
index bfd28cb..cf45c9e 100644
--- a/cmd/mgmt/device/impl.go
+++ b/services/device/device/impl.go
@@ -126,12 +126,13 @@
 
 type granter struct {
 	rpc.CallOpt
-	p         security.Principal
 	extension string
 }
 
-func (g *granter) Grant(other security.Blessings) (security.Blessings, error) {
-	return g.p.Bless(other.PublicKey(), g.p.BlessingStore().Default(), g.extension, security.UnconstrainedUse())
+func (g *granter) Grant(ctx *context.T) (security.Blessings, error) {
+	call := security.GetCall(ctx)
+	p := call.LocalPrincipal()
+	return p.Bless(call.RemoteBlessings().PublicKey(), p.BlessingStore().Default(), g.extension, security.UnconstrainedUse())
 }
 
 func runStart(cmd *cmdline.Command, args []string) error {
@@ -226,7 +227,7 @@
 	}
 	// Skip server endpoint authorization since an unclaimed device might have
 	// roots that will not be recognized by the claimer.
-	if err := device.ClaimableClient(deviceName).Claim(gctx, pairingToken, &granter{p: v23.GetPrincipal(gctx), extension: grant}, serverKeyOpts, options.SkipServerEndpointAuthorization{}); err != nil {
+	if err := device.ClaimableClient(deviceName).Claim(gctx, pairingToken, &granter{extension: grant}, serverKeyOpts, options.SkipServerEndpointAuthorization{}); err != nil {
 		return err
 	}
 	fmt.Fprintln(cmd.Stdout(), "Successfully claimed.")
diff --git a/cmd/mgmt/device/impl_test.go b/services/device/device/impl_test.go
similarity index 99%
rename from cmd/mgmt/device/impl_test.go
rename to services/device/device/impl_test.go
index bc5ea53..1e4d141 100644
--- a/cmd/mgmt/device/impl_test.go
+++ b/services/device/device/impl_test.go
@@ -18,9 +18,8 @@
 	"v.io/v23/services/application"
 	"v.io/v23/services/device"
 	"v.io/v23/verror"
-
-	cmd_device "v.io/x/ref/cmd/mgmt/device"
-	"v.io/x/ref/security"
+	"v.io/x/ref/lib/security"
+	cmd_device "v.io/x/ref/services/device/device"
 )
 
 //go:generate v23 test generate
diff --git a/cmd/mgmt/device/instance_impl.go b/services/device/device/instance_impl.go
similarity index 100%
rename from cmd/mgmt/device/instance_impl.go
rename to services/device/device/instance_impl.go
diff --git a/cmd/mgmt/device/instance_impl_test.go b/services/device/device/instance_impl_test.go
similarity index 98%
rename from cmd/mgmt/device/instance_impl_test.go
rename to services/device/device/instance_impl_test.go
index 251d860..d06dcbf 100644
--- a/cmd/mgmt/device/instance_impl_test.go
+++ b/services/device/device/instance_impl_test.go
@@ -13,7 +13,7 @@
 	"v.io/v23/naming"
 	"v.io/v23/verror"
 
-	cmd_device "v.io/x/ref/cmd/mgmt/device"
+	cmd_device "v.io/x/ref/services/device/device"
 )
 
 func TestStopCommand(t *testing.T) {
diff --git a/cmd/mgmt/device/local_install.go b/services/device/device/local_install.go
similarity index 96%
rename from cmd/mgmt/device/local_install.go
rename to services/device/device/local_install.go
index 2116d91..6c1ba9c 100644
--- a/cmd/mgmt/device/local_install.go
+++ b/services/device/device/local_install.go
@@ -28,7 +28,7 @@
 	"v.io/x/lib/vlog"
 
 	"v.io/x/lib/cmdline"
-	pkglib "v.io/x/ref/services/mgmt/lib/packages"
+	"v.io/x/ref/services/internal/packages"
 )
 
 var cmdInstallLocal = &cmdline.Command{
@@ -193,18 +193,18 @@
 	}
 	h.Write(bytes)
 	part := binary.PartInfo{Checksum: hex.EncodeToString(h.Sum(nil)), Size: int64(len(bytes))}
-	return []binary.PartInfo{part}, pkglib.MediaInfoForFileName(fileName), nil
+	return []binary.PartInfo{part}, packages.MediaInfoForFileName(fileName), nil
 }
 
 func (binaryInvoker) Upload(repository.BinaryUploadServerCall, int32) error {
 	return errNotImplemented
 }
 
-func (binaryInvoker) GetPermissions(call rpc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (binaryInvoker) GetPermissions(call rpc.ServerCall) (acl access.Permissions, version string, err error) {
 	return nil, "", errNotImplemented
 }
 
-func (binaryInvoker) SetPermissions(call rpc.ServerCall, acl access.Permissions, etag string) error {
+func (binaryInvoker) SetPermissions(call rpc.ServerCall, acl access.Permissions, version string) error {
 	return errNotImplemented
 }
 
@@ -213,7 +213,7 @@
 func (i envelopeInvoker) Match(rpc.ServerCall, []string) (application.Envelope, error) {
 	return application.Envelope(i), nil
 }
-func (envelopeInvoker) GetPermissions(rpc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (envelopeInvoker) GetPermissions(rpc.ServerCall) (acl access.Permissions, version string, err error) {
 	return nil, "", errNotImplemented
 }
 
@@ -233,7 +233,7 @@
 	// Directory packages first get zip'ped.
 	if info.IsDir() {
 		fileName = filepath.Join(tmpZipDir, info.Name()+".zip")
-		if err := pkglib.CreateZip(fileName, p); err != nil {
+		if err := packages.CreateZip(fileName, p); err != nil {
 			return "", "", err
 		}
 	}
diff --git a/cmd/mgmt/device/local_install_test.go b/services/device/device/local_install_test.go
similarity index 98%
rename from cmd/mgmt/device/local_install_test.go
rename to services/device/device/local_install_test.go
index 8524813..e6d938d 100644
--- a/cmd/mgmt/device/local_install_test.go
+++ b/services/device/device/local_install_test.go
@@ -20,7 +20,7 @@
 	"v.io/v23/services/application"
 	"v.io/v23/services/device"
 
-	cmd_device "v.io/x/ref/cmd/mgmt/device"
+	cmd_device "v.io/x/ref/services/device/device"
 )
 
 func createFile(t *testing.T, path string, contents string) {
diff --git a/cmd/mgmt/device/main.go b/services/device/device/main.go
similarity index 82%
rename from cmd/mgmt/device/main.go
rename to services/device/device/main.go
index e5ee2c2..46c85c4 100644
--- a/cmd/mgmt/device/main.go
+++ b/services/device/device/main.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
 
 package main
 
diff --git a/cmd/mgmt/device/mock_test.go b/services/device/device/mock_test.go
similarity index 100%
rename from cmd/mgmt/device/mock_test.go
rename to services/device/device/mock_test.go
diff --git a/cmd/mgmt/device/publish.go b/services/device/device/publish.go
similarity index 93%
rename from cmd/mgmt/device/publish.go
rename to services/device/device/publish.go
index df6a2b1..828aaad 100644
--- a/cmd/mgmt/device/publish.go
+++ b/services/device/device/publish.go
@@ -21,7 +21,7 @@
 	"v.io/v23/verror"
 
 	"v.io/x/lib/cmdline"
-	"v.io/x/ref/services/mgmt/lib/binary"
+	"v.io/x/ref/services/binary/binarylib"
 	"v.io/x/ref/services/repository"
 )
 
@@ -35,7 +35,7 @@
 	Short: "Publish the given application(s).",
 	Long: `
 Publishes the given application(s) to the binary and application servers.
-The binaries should be in $VANADIUM_ROOT/release/go/bin/[<GOOS>_<GOARCH>].
+The binaries should be in $V23_ROOT/release/go/bin/[<GOOS>_<GOARCH>].
 The binary is published as <binserv>/<binary name>/<GOOS>-<GOARCH>/<TIMESTAMP>.
 The application envelope is published as <appserv>/<binary name>/0.
 Optionally, adds blessing patterns to the Read and Resolve AccessLists.`,
@@ -68,7 +68,7 @@
 	if readBlessings == "" {
 		return nil
 	}
-	acl, etag, err := permissions.ObjectClient(von).GetPermissions(gctx)
+	acl, version, err := permissions.ObjectClient(von).GetPermissions(gctx)
 	if err != nil {
 		// TODO(caprita): This is a workaround until we sort out the
 		// default AccessLists for applicationd (see issue #1317).  At that
@@ -82,7 +82,7 @@
 			acl.Add(security.BlessingPattern(blessing), string(tag))
 		}
 	}
-	if err := permissions.ObjectClient(von).SetPermissions(gctx, acl, etag); err != nil {
+	if err := permissions.ObjectClient(von).SetPermissions(gctx, acl, version); err != nil {
 		return err
 	}
 	fmt.Fprintf(cmd.Stdout(), "Added patterns %q to Read,Resolve AccessList for %q\n", readBlessings, von)
@@ -101,7 +101,7 @@
 	binaryVON := naming.Join(binaryService, binaryName, fmt.Sprintf("%s-%s", goos, goarch), timestamp)
 	binaryFile := filepath.Join(binPath, binaryName)
 	// TODO(caprita): Take signature of binary and put it in the envelope.
-	if _, err := binary.UploadFromFile(gctx, binaryVON, binaryFile); err != nil {
+	if _, err := binarylib.UploadFromFile(gctx, binaryVON, binaryFile); err != nil {
 		return err
 	}
 	fmt.Fprintf(cmd.Stdout(), "Binary %q uploaded from file %s\n", binaryVON, binaryFile)
@@ -150,9 +150,9 @@
 		return cmd.UsageErrorf("publish: incorrect number of arguments, expected at least %d, got %d", expectedMin, got)
 	}
 	binaries := args
-	vroot := os.Getenv("VANADIUM_ROOT")
+	vroot := os.Getenv("V23_ROOT")
 	if vroot == "" {
-		return cmd.UsageErrorf("publish: $VANADIUM_ROOT environment variable should be set")
+		return cmd.UsageErrorf("publish: $V23_ROOT environment variable should be set")
 	}
 	binPath := filepath.Join(vroot, "release/go/bin")
 	goos := goosFlag.Get().(string)
diff --git a/cmd/mgmt/device/root.go b/services/device/device/root.go
similarity index 100%
rename from cmd/mgmt/device/root.go
rename to services/device/device/root.go
diff --git a/cmd/mgmt/device/updateall.go b/services/device/device/updateall.go
similarity index 98%
rename from cmd/mgmt/device/updateall.go
rename to services/device/device/updateall.go
index 19b1b04..551ae5b 100644
--- a/cmd/mgmt/device/updateall.go
+++ b/services/device/device/updateall.go
@@ -15,7 +15,7 @@
 	"v.io/v23/verror"
 
 	"v.io/x/lib/cmdline"
-	deviceimpl "v.io/x/ref/services/mgmt/device/impl"
+	deviceimpl "v.io/x/ref/services/device/internal/impl"
 )
 
 // TODO(caprita): Re-implement this with Glob, so that one can say instead,
diff --git a/cmd/mgmt/device/util_test.go b/services/device/device/util_test.go
similarity index 90%
rename from cmd/mgmt/device/util_test.go
rename to services/device/device/util_test.go
index 6fc6ad1..0be10bc 100644
--- a/cmd/mgmt/device/util_test.go
+++ b/services/device/device/util_test.go
@@ -8,7 +8,7 @@
 	"v.io/v23"
 	"v.io/v23/context"
 
-	cmd_device "v.io/x/ref/cmd/mgmt/device"
+	cmd_device "v.io/x/ref/services/device/device"
 	"v.io/x/ref/test"
 )
 
diff --git a/cmd/mgmt/device/v23_internal_test.go b/services/device/device/v23_internal_test.go
similarity index 100%
rename from cmd/mgmt/device/v23_internal_test.go
rename to services/device/device/v23_internal_test.go
diff --git a/services/mgmt/device/deviced/commands.go b/services/device/deviced/commands.go
similarity index 98%
rename from services/mgmt/device/deviced/commands.go
rename to services/device/deviced/commands.go
index 87af138..a8bc375 100644
--- a/services/mgmt/device/deviced/commands.go
+++ b/services/device/deviced/commands.go
@@ -12,7 +12,7 @@
 
 	"v.io/v23"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/services/mgmt/device/impl"
+	"v.io/x/ref/services/device/internal/impl"
 )
 
 var (
diff --git a/services/mgmt/device/deviced/main.go b/services/device/deviced/main.go
similarity index 100%
rename from services/mgmt/device/deviced/main.go
rename to services/device/deviced/main.go
diff --git a/services/mgmt/device/deviced/server.go b/services/device/deviced/server.go
similarity index 97%
rename from services/mgmt/device/deviced/server.go
rename to services/device/deviced/server.go
index 9279f00..95b7068 100644
--- a/services/mgmt/device/deviced/server.go
+++ b/services/device/deviced/server.go
@@ -20,8 +20,8 @@
 	"v.io/x/ref/lib/mgmt"
 	"v.io/x/ref/lib/signals"
 	_ "v.io/x/ref/profiles/roaming"
-	"v.io/x/ref/services/mgmt/device/config"
-	"v.io/x/ref/services/mgmt/device/starter"
+	"v.io/x/ref/services/device/internal/config"
+	"v.io/x/ref/services/device/internal/starter"
 
 	"v.io/v23"
 	"v.io/v23/context"
@@ -30,7 +30,7 @@
 	"v.io/x/lib/vlog"
 )
 
-const pkgPath = "v.io/x/ref/services/mgmt/device/deviced"
+const pkgPath = "v.io/x/ref/services/device/deviced"
 
 var (
 	errSplitHostPortFailed = verror.Register(pkgPath+".errSplitHostPortFailed", verror.NoRetry, "{1:}{2:} net.SplitHostPort({3}) failed{:_}")
diff --git a/cmd/mgmt/device/devicex b/services/device/devicex
similarity index 98%
rename from cmd/mgmt/device/devicex
rename to services/device/devicex
index 7e53c30..e910510 100755
--- a/cmd/mgmt/device/devicex
+++ b/services/device/devicex
@@ -123,7 +123,7 @@
 # Fetches binaries needed by device manager installation.
 # Globals:
 #   BIN_NAMES
-#   VANADIUM_ROOT
+#   V23_ROOT
 # Arguments:
 #   destination for binaries
 #   source of binaries
@@ -141,11 +141,11 @@
 
   # If source is not specified, try to look for it in the repository.
   if [[ -z "${BIN_SOURCE}" ]]; then
-    if [[ -z "${VANADIUM_ROOT}" ]]; then
+    if [[ -z "${V23_ROOT}" ]]; then
       echo 'ERROR: binary source not specified and no local repository available'
       exit 1
     fi
-    local -r REPO_BIN_DIR="${VANADIUM_ROOT}/release/go/bin"
+    local -r REPO_BIN_DIR="${V23_ROOT}/release/go/bin"
     echo "Fetching binaries:${bin_names_str} from build repository: ${REPO_BIN_DIR} ..."
     for bin_name in "${BIN_NAMES[@]}"; do
       copy_binary "${bin_name}" "${REPO_BIN_DIR}" "${BIN_INSTALL}"
diff --git a/services/mgmt/device/doc.go b/services/device/doc.go
similarity index 100%
rename from services/mgmt/device/doc.go
rename to services/device/doc.go
diff --git a/services/mgmt/inithelper/main.go b/services/device/inithelper/main.go
similarity index 98%
rename from services/mgmt/inithelper/main.go
rename to services/device/inithelper/main.go
index c9bf9e5..4916c28 100644
--- a/services/mgmt/inithelper/main.go
+++ b/services/device/inithelper/main.go
@@ -18,7 +18,7 @@
 	"fmt"
 	"os"
 
-	"v.io/x/ref/services/mgmt/sysinit"
+	"v.io/x/ref/lib/sysinit"
 )
 
 func usage() {
diff --git a/services/mgmt/device/config/config.go b/services/device/internal/config/config.go
similarity index 98%
rename from services/mgmt/device/config/config.go
rename to services/device/internal/config/config.go
index 16b96b0..b8c323c 100644
--- a/services/mgmt/device/config/config.go
+++ b/services/device/internal/config/config.go
@@ -34,7 +34,7 @@
 	"v.io/v23/verror"
 )
 
-const pkgPath = "v.io/x/ref/services/mgmt/device/config"
+const pkgPath = "v.io/x/ref/services/device/internal/config"
 
 var (
 	errNeedName           = verror.Register(pkgPath+".errNeedName", verror.NoRetry, "{1:}{2:} Name cannot be empty{:_}")
diff --git a/services/mgmt/device/config/config_test.go b/services/device/internal/config/config_test.go
similarity index 98%
rename from services/mgmt/device/config/config_test.go
rename to services/device/internal/config/config_test.go
index 4356961..968bda8 100644
--- a/services/mgmt/device/config/config_test.go
+++ b/services/device/internal/config/config_test.go
@@ -11,7 +11,7 @@
 	"strings"
 	"testing"
 
-	"v.io/x/ref/services/mgmt/device/config"
+	"v.io/x/ref/services/device/internal/config"
 
 	"v.io/v23/services/application"
 )
diff --git a/services/mgmt/device/config/const.go b/services/device/internal/config/const.go
similarity index 100%
rename from services/mgmt/device/config/const.go
rename to services/device/internal/config/const.go
diff --git a/services/mgmt/device/impl/acl_propagator.go b/services/device/internal/impl/acl_propagator.go
similarity index 96%
rename from services/mgmt/device/impl/acl_propagator.go
rename to services/device/internal/impl/acl_propagator.go
index 944ea60..37cfa38 100644
--- a/services/mgmt/device/impl/acl_propagator.go
+++ b/services/device/internal/impl/acl_propagator.go
@@ -10,7 +10,7 @@
 	"v.io/v23/security"
 	"v.io/v23/security/access"
 
-	"v.io/x/ref/services/mgmt/lib/acls"
+	"v.io/x/ref/services/internal/acls"
 )
 
 // computePath builds the desired path for the debug acls.
diff --git a/services/mgmt/device/impl/app_service.go b/services/device/internal/impl/app_service.go
similarity index 97%
rename from services/mgmt/device/impl/app_service.go
rename to services/device/internal/impl/app_service.go
index 3952e1e..322b8d9 100644
--- a/services/mgmt/device/impl/app_service.go
+++ b/services/device/internal/impl/app_service.go
@@ -149,16 +149,15 @@
 	"v.io/v23/services/device"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
-
 	"v.io/x/ref/envvar"
 	vexec "v.io/x/ref/lib/exec"
 	"v.io/x/ref/lib/mgmt"
-	vsecurity "v.io/x/ref/security"
-	"v.io/x/ref/security/agent"
-	"v.io/x/ref/security/agent/keymgr"
-	iconfig "v.io/x/ref/services/mgmt/device/config"
-	"v.io/x/ref/services/mgmt/lib/acls"
-	libpackages "v.io/x/ref/services/mgmt/lib/packages"
+	vsecurity "v.io/x/ref/lib/security"
+	"v.io/x/ref/services/agent"
+	"v.io/x/ref/services/agent/keymgr"
+	"v.io/x/ref/services/device/internal/config"
+	"v.io/x/ref/services/internal/acls"
+	"v.io/x/ref/services/internal/packages"
 )
 
 // instanceInfo holds state about a running instance.
@@ -200,7 +199,7 @@
 // appService implements the Device manager's Application interface.
 type appService struct {
 	callback *callbackState
-	config   *iconfig.State
+	config   *config.State
 	// suffix contains the name components of the current invocation name
 	// suffix.  It is used to identify an application, installation, or
 	// instance.
@@ -650,11 +649,11 @@
 	if err := os.MkdirAll(packagesDir, os.FileMode(0755)); err != nil {
 		return err
 	}
-	installFrom := func(packages application.Packages, sourceDir string) error {
-		for pkg, _ := range packages {
+	installFrom := func(pkgs application.Packages, sourceDir string) error {
+		for pkg, _ := range pkgs {
 			pkgFile := filepath.Join(sourceDir, "pkg", pkg)
 			dst := filepath.Join(packagesDir, pkg)
-			if err := libpackages.Install(pkgFile, dst); err != nil {
+			if err := packages.Install(pkgFile, dst); err != nil {
 				return err
 			}
 		}
@@ -778,7 +777,7 @@
 	cmd.Args = append(cmd.Args, "--progname", appName)
 
 	// Set the app's default namespace root to the local namespace.
-	cmd.Env = envvar.DoNotUse_AppendNamespaceRoot(nsRoot, cmd.Env)
+	cmd.Env = []string{envvar.NamespacePrefix + "=" + nsRoot}
 	cmd.Env = append(cmd.Env, envelope.Env...)
 	rootDir := filepath.Join(instanceDir, "root")
 	cmd.Dir = rootDir
@@ -840,6 +839,13 @@
 	appAclDir := filepath.Join(instanceDir, "debugacls", "data")
 	cfg.Set("v23.permissions.file", "runtime:"+appAclDir)
 
+	// This adds to cmd.Extrafiles. The helper expects a fixed fd, so this call needs
+	// to go before anything that conditionally adds to Extrafiles, like the agent
+	// setup code immediately below.
+	var handshaker appHandshaker
+	handshaker.prepareToStart(ctx, cmd)
+	defer handshaker.cleanup()
+
 	// Set up any agent-specific state.
 	// NOTE(caprita): This ought to belong in genCmd.
 	var agentCleaner func()
@@ -861,7 +867,7 @@
 		cmd.ExtraFiles = append(cmd.ExtraFiles, file)
 		cfg.Set(mgmt.SecurityAgentFDConfigKey, strconv.Itoa(fd))
 	} else {
-		cmd.Env = envvar.DoNotUse_AppendCredentials(filepath.Join(instanceDir, "credentials"), cmd.Env)
+		cmd.Env = append(cmd.Env, envvar.Credentials+"="+filepath.Join(instanceDir, "credentials"))
 	}
 	handle := vexec.NewParentHandle(cmd, vexec.ConfigOpt{cfg})
 	defer func() {
@@ -871,35 +877,30 @@
 			}
 		}
 	}()
+
 	// Start the child process.
-	if err := handle.Start(); err != nil {
-		if agentCleaner != nil {
-			agentCleaner()
-		}
-		return 0, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Start() failed: %v", err))
-	}
+	startErr := handle.Start()
+	// Perform unconditional cleanup before dealing with any error from handle.Start()
 	if agentCleaner != nil {
 		agentCleaner()
 	}
+	// Now react to any error in handle.Start()
+	if startErr != nil {
+		return 0, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Start() failed: %v", err))
+	}
 
-	// Wait for the suidhelper to exit.
+	// Wait for the suidhelper to exit. This is blocking as we assume the helper won't
+	// get stuck.
 	if err := handle.Wait(0); err != nil {
 		return 0, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Wait() on suidhelper failed: %v", err))
 	}
 
-	// Wait for the process invoked by suidhelper to become ready.
-	if err := handle.WaitForReady(childReadyTimeout); err != nil {
-		return 0, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("WaitForReady(%v) failed: %v", childReadyTimeout, err))
-	}
-	pid := handle.ChildPid()
-	childName, err := listener.waitForValue(childReadyTimeout)
+	pid, childName, err := handshaker.doHandshake(handle, listener)
+
 	if err != nil {
-		return 0, verror.New(ErrOperationFailed, nil)
+		return 0, err
 	}
 
-	// Because suidhelper uses Go's in-built support for setuid forking,
-	// handle.Pid() is the pid of suidhelper, not the pid of the app
-	// so use the pid returned in the app's ready status.
 	info.AppCycleMgrName, info.Pid = childName, pid
 	if err := saveInstanceInfo(ctx, instanceDir, info); err != nil {
 		return 0, err
@@ -1349,7 +1350,7 @@
 }
 
 // TODO(rjkroege): Consider maintaining an in-memory Permissions cache.
-func (i *appService) SetPermissions(call rpc.ServerCall, acl access.Permissions, etag string) error {
+func (i *appService) SetPermissions(call rpc.ServerCall, acl access.Permissions, version string) error {
 	dir, isInstance, err := dirFromSuffix(i.suffix, i.config.Root)
 	if err != nil {
 		return err
@@ -1360,10 +1361,10 @@
 			return err
 		}
 	}
-	return i.aclstore.Set(path.Join(dir, "acls"), acl, etag)
+	return i.aclstore.Set(path.Join(dir, "acls"), acl, version)
 }
 
-func (i *appService) GetPermissions(call rpc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (i *appService) GetPermissions(call rpc.ServerCall) (acl access.Permissions, version string, err error) {
 	dir, _, err := dirFromSuffix(i.suffix, i.config.Root)
 	if err != nil {
 		return nil, "", err
diff --git a/services/device/internal/impl/app_starting_util.go b/services/device/internal/impl/app_starting_util.go
new file mode 100644
index 0000000..76d9bed
--- /dev/null
+++ b/services/device/internal/impl/app_starting_util.go
@@ -0,0 +1,186 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package impl
+
+// TODO -- Ideally the code in this file would be integrated with the instance reaping,
+// so we avoid having two process polling loops. This code is currently separate because
+// the actions taken when the app dies (or is caught lying about its pid) prior to being
+// considered running are fairly different from what's currently done by the reaper in
+// handling deaths that occur after the app started successfully.
+
+import (
+	"encoding/binary"
+	"fmt"
+	"os"
+	"os/exec"
+	"syscall"
+	"time"
+
+	"v.io/v23/context"
+	"v.io/v23/verror"
+	"v.io/x/lib/vlog"
+	vexec "v.io/x/ref/lib/exec"
+	"v.io/x/ref/lib/suid"
+)
+
+// appWatcher watches the pid of a running app until either the pid exits or stop()
+// is called
+type appWatcher struct {
+	pid      int           // Pid to watch
+	callback func()        // Called if the pid exits or if stop() is invoked
+	stopper  chan struct{} // Used to stop the appWatcher
+}
+
+func newAppWatcher(pidToWatch int, callOnPidExit func()) *appWatcher {
+	return &appWatcher{
+		pid:      pidToWatch,
+		callback: callOnPidExit,
+		stopper:  make(chan struct{}, 1),
+	}
+}
+
+func (a *appWatcher) stop() {
+	close(a.stopper)
+}
+
+func (a *appWatcher) watchAppPid() {
+	defer a.callback()
+
+	ticker := time.NewTicker(1 * time.Second)
+	defer ticker.Stop()
+
+	for {
+		select {
+		case <-ticker.C:
+			if err := syscall.Kill(a.pid, 0); err != nil && err != syscall.EPERM {
+				vlog.Errorf("App died in startup: pid=%d: %v", a.pid, err)
+				return
+			} else {
+				vlog.VI(2).Infof("App pid %d is alive", a.pid)
+			}
+
+		case <-a.stopper:
+			vlog.Errorf("AppWatcher was stopped")
+			return
+		}
+	}
+	// Not reached.
+}
+
+// appHandshaker is a utility to do the app handshake for a newly started app while
+// reacting quickly if the app crashes. appHandshaker reads two pids from the app (one
+// from the helper that forked the app, and the other from the app itself). If the app
+// appears to be lying about its own pid, it will kill the app.
+type appHandshaker struct {
+	helperRead, helperWrite *os.File
+	ctx                     *context.T
+}
+
+func (a *appHandshaker) cleanup() {
+	if a.helperRead != nil {
+		a.helperRead.Close()
+		a.helperRead = nil
+	}
+	if a.helperWrite != nil {
+		a.helperWrite.Close()
+		a.helperWrite = nil
+	}
+}
+
+// prepareToStart sets up the pipe used to talk to the helper. It must be called before
+// the app is started so that the app will inherit the file descriptor
+func (a *appHandshaker) prepareToStart(ctx *context.T, cmd *exec.Cmd) error {
+	if suid.PipeToParentFD != (len(cmd.ExtraFiles) + vexec.FileOffset) {
+		return verror.New(ErrOperationFailed, ctx,
+			fmt.Sprintf("FD expected by helper (%v) was not available (%v) (%v)",
+				suid.PipeToParentFD, len(cmd.ExtraFiles), vexec.FileOffset))
+	}
+	a.ctx = ctx
+
+	var err error
+	a.helperRead, a.helperWrite, err = os.Pipe()
+	if err != nil {
+		vlog.Errorf("Failed to create pipe: %v", err)
+		return err
+	}
+	cmd.ExtraFiles = append(cmd.ExtraFiles, a.helperWrite)
+	return nil
+}
+
+// doAppHandshake executes the startup handshake for the app. Upon success, it returns the
+// pid and appCycle manager name for the started app.
+//
+// handle should have been set up to use a helper for the app and handle.Start()
+// and handle.Wait() should already have been called (so we know the helper is done)
+func (a *appHandshaker) doHandshake(handle *vexec.ParentHandle, listener callbackListener) (int, string, error) {
+	// Close our copy of helperWrite to make helperRead return EOF once the
+	// helper's copy of helperWrite is closed.
+	a.helperWrite.Close()
+	a.helperWrite = nil
+
+	// Get the app pid from the helper. This won't block as the helper is done
+	var pid32 int32
+	if err := binary.Read(a.helperRead, binary.LittleEndian, &pid32); err != nil {
+		vlog.Errorf("Error reading app pid from child: %v", err)
+		return 0, "", verror.New(ErrOperationFailed, a.ctx, fmt.Sprintf("failed to read pid from helper: %v", err))
+	}
+	pidFromHelper := int(pid32)
+	vlog.VI(1).Infof("read app pid %v from child", pidFromHelper)
+
+	// Watch the app pid in case it exits.
+	pidExitedChan := make(chan struct{}, 1)
+	watcher := newAppWatcher(pidFromHelper, func() {
+		listener.stop()
+		close(pidExitedChan)
+	})
+	go watcher.watchAppPid()
+	defer watcher.stop()
+
+	// Wait for the child to say it's ready and provide its own pid via the init handshake
+	childReadyErrChan := make(chan error, 1)
+	go func() {
+		if err := handle.WaitForReady(childReadyTimeout); err != nil {
+			childReadyErrChan <- verror.New(ErrOperationFailed, a.ctx, fmt.Sprintf("WaitForReady(%v) failed: %v", childReadyTimeout, err))
+		}
+		childReadyErrChan <- nil
+	}()
+
+	// Wait until we get the pid from the app, but return early if
+	// the watcher notices that the app failed
+	pidFromChild := 0
+
+	select {
+	case <-pidExitedChan:
+		return 0, "", verror.New(ErrOperationFailed, a.ctx,
+			fmt.Sprintf("App exited (pid %d)", pidFromHelper))
+
+	case err := <-childReadyErrChan:
+		if err != nil {
+			return 0, "", err
+		}
+		// Note: handle.Pid() is the pid of the helper, rather than that
+		// of the app that the helper then forked. ChildPid is the pid
+		// received via the app startup handshake
+		pidFromChild = handle.ChildPid()
+	}
+
+	if pidFromHelper != pidFromChild {
+		// Something nasty is going on and we should kill pidFromHelper.
+		// TODO(arup): In future we'll extend suidhelper to support a kill
+		// function, and invoke it here.
+		return 0, "", verror.New(ErrOperationFailed, a.ctx,
+			fmt.Sprintf("Child pids do not match! (%d != %d)", pidFromHelper, pidFromChild))
+	}
+
+	// The appWatcher will stop the listener if the pid dies while waiting below
+	childName, err := listener.waitForValue(childReadyTimeout)
+	if err != nil {
+		// TODO(arup) kill pidFromHelper here using suidhelper
+		return 0, "", verror.New(ErrOperationFailed, a.ctx,
+			fmt.Sprintf("Waiting for child name: %v", err))
+	}
+
+	return pidFromHelper, childName, nil
+}
diff --git a/services/mgmt/device/impl/app_state.go b/services/device/internal/impl/app_state.go
similarity index 100%
rename from services/mgmt/device/impl/app_state.go
rename to services/device/internal/impl/app_state.go
diff --git a/services/mgmt/device/impl/app_state_test.go b/services/device/internal/impl/app_state_test.go
similarity index 100%
rename from services/mgmt/device/impl/app_state_test.go
rename to services/device/internal/impl/app_state_test.go
diff --git a/services/mgmt/device/impl/args_darwin_test.go b/services/device/internal/impl/args_darwin_test.go
similarity index 100%
rename from services/mgmt/device/impl/args_darwin_test.go
rename to services/device/internal/impl/args_darwin_test.go
diff --git a/services/mgmt/device/impl/args_linux_test.go b/services/device/internal/impl/args_linux_test.go
similarity index 100%
rename from services/mgmt/device/impl/args_linux_test.go
rename to services/device/internal/impl/args_linux_test.go
diff --git a/services/mgmt/device/impl/associate_instance_test.go b/services/device/internal/impl/associate_instance_test.go
similarity index 100%
rename from services/mgmt/device/impl/associate_instance_test.go
rename to services/device/internal/impl/associate_instance_test.go
diff --git a/services/mgmt/device/impl/association_instance.go b/services/device/internal/impl/association_instance.go
similarity index 100%
rename from services/mgmt/device/impl/association_instance.go
rename to services/device/internal/impl/association_instance.go
diff --git a/services/mgmt/device/impl/association_state.go b/services/device/internal/impl/association_state.go
similarity index 100%
rename from services/mgmt/device/impl/association_state.go
rename to services/device/internal/impl/association_state.go
diff --git a/services/mgmt/device/impl/association_state_test.go b/services/device/internal/impl/association_state_test.go
similarity index 98%
rename from services/mgmt/device/impl/association_state_test.go
rename to services/device/internal/impl/association_state_test.go
index 0c5bb8a..b0b035c 100644
--- a/services/mgmt/device/impl/association_state_test.go
+++ b/services/device/internal/impl/association_state_test.go
@@ -12,7 +12,7 @@
 	"testing"
 
 	"v.io/v23/services/device"
-	"v.io/x/ref/services/mgmt/device/impl"
+	"v.io/x/ref/services/device/internal/impl"
 )
 
 // TestAssociationPersistance verifies correct operation of association
diff --git a/services/mgmt/device/impl/callback.go b/services/device/internal/impl/callback.go
similarity index 96%
rename from services/mgmt/device/impl/callback.go
rename to services/device/internal/impl/callback.go
index e48bc86..659ccdb 100644
--- a/services/mgmt/device/impl/callback.go
+++ b/services/device/internal/impl/callback.go
@@ -11,7 +11,7 @@
 
 	"v.io/x/ref/lib/exec"
 	"v.io/x/ref/lib/mgmt"
-	"v.io/x/ref/services/mgmt/device"
+	"v.io/x/ref/services/device"
 )
 
 // InvokeCallback provides the parent device manager with the given name (which
diff --git a/services/mgmt/device/impl/claim.go b/services/device/internal/impl/claim.go
similarity index 98%
rename from services/mgmt/device/impl/claim.go
rename to services/device/internal/impl/claim.go
index d58e9b2..921b1f2 100644
--- a/services/mgmt/device/impl/claim.go
+++ b/services/device/internal/impl/claim.go
@@ -15,7 +15,7 @@
 	"v.io/v23/security/access"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/services/mgmt/lib/acls"
+	"v.io/x/ref/services/internal/acls"
 )
 
 // claimable implements the device.Claimable RPC interface and the
diff --git a/services/mgmt/device/impl/config_service.go b/services/device/internal/impl/config_service.go
similarity index 100%
rename from services/mgmt/device/impl/config_service.go
rename to services/device/internal/impl/config_service.go
diff --git a/services/mgmt/device/impl/debug_acls_test.go b/services/device/internal/impl/debug_acls_test.go
similarity index 94%
rename from services/mgmt/device/impl/debug_acls_test.go
rename to services/device/internal/impl/debug_acls_test.go
index 57448c6..6f0f865 100644
--- a/services/mgmt/device/impl/debug_acls_test.go
+++ b/services/device/internal/impl/debug_acls_test.go
@@ -16,18 +16,18 @@
 	"v.io/v23/services/permissions"
 	"v.io/v23/verror"
 
-	mgmttest "v.io/x/ref/services/mgmt/lib/testutil"
+	"v.io/x/ref/services/internal/servicetest"
 	"v.io/x/ref/test/testutil"
 )
 
 func updateAccessList(t *testing.T, ctx *context.T, blessing, right string, name ...string) {
 	accessStub := permissions.ObjectClient(naming.Join(name...))
-	acl, etag, err := accessStub.GetPermissions(ctx)
+	acl, version, err := accessStub.GetPermissions(ctx)
 	if err != nil {
 		t.Fatalf(testutil.FormatLogLine(2, "GetPermissions(%v) failed %v", name, err))
 	}
 	acl.Add(security.BlessingPattern(blessing), right)
-	if err = accessStub.SetPermissions(ctx, acl, etag); err != nil {
+	if err = accessStub.SetPermissions(ctx, acl, version); err != nil {
 		t.Fatalf(testutil.FormatLogLine(2, "SetPermissions(%v, %v, %v) failed: %v", name, blessing, right, err))
 	}
 }
@@ -43,8 +43,8 @@
 	defer cleanup()
 
 	// Set up the device manager.
-	dmh := mgmttest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
-	mgmttest.ReadPID(t, dmh)
+	dmh := servicetest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
+	servicetest.ReadPID(t, dmh)
 	claimDevice(t, ctx, "dm", "mydevice", noPairingToken)
 
 	// Create the local server that the app uses to let us know it's ready.
@@ -198,8 +198,8 @@
 	}
 
 	// Set up the device manager.
-	dmh := mgmttest.RunCommand(t, sh, nil, deviceManagerCmd, "--log_dir="+extraLogDir, "dm", root, helperPath, "unused", "unused_curr_link")
-	mgmttest.ReadPID(t, dmh)
+	dmh := servicetest.RunCommand(t, sh, nil, deviceManagerCmd, "--log_dir="+extraLogDir, "dm", root, helperPath, "unused", "unused_curr_link")
+	servicetest.ReadPID(t, dmh)
 
 	// Make some users.
 	selfCtx := ctx
diff --git a/services/mgmt/device/impl/device_installer.go b/services/device/internal/impl/device_installer.go
similarity index 98%
rename from services/mgmt/device/impl/device_installer.go
rename to services/device/internal/impl/device_installer.go
index 233e1e5..01bdeb7 100644
--- a/services/mgmt/device/impl/device_installer.go
+++ b/services/device/internal/impl/device_installer.go
@@ -57,8 +57,8 @@
 	"v.io/v23/services/application"
 
 	"v.io/x/ref/envvar"
-	"v.io/x/ref/services/mgmt/device/config"
-	"v.io/x/ref/services/mgmt/sysinit"
+	"v.io/x/ref/lib/sysinit"
+	"v.io/x/ref/services/device/internal/config"
 )
 
 // restartExitCode is the exit code that the device manager should return when it
@@ -251,9 +251,7 @@
 	output += fmt.Sprintf("  TIMESTAMP=$(%s)\n", dateCommand)
 	output += fmt.Sprintf("  exec > %s-$TIMESTAMP 2> %s-$TIMESTAMP\n", stdoutLog, stderrLog)
 	output += "fi\n"
-	for _, v := range envvar.DoNotUse_AppendCredentials(principalDir, nil) {
-		output += fmt.Sprintf("%v ", v)
-	}
+	output += fmt.Sprintf("%s=%q ", envvar.Credentials, principalDir)
 	// Escape the path to the binary; %q uses Go-syntax escaping, but it's
 	// close enough to Bash that we're using it as an approximation.
 	//
diff --git a/services/mgmt/device/impl/device_service.go b/services/device/internal/impl/device_service.go
similarity index 98%
rename from services/mgmt/device/impl/device_service.go
rename to services/device/internal/impl/device_service.go
index 54f18ad..18eba41 100644
--- a/services/mgmt/device/impl/device_service.go
+++ b/services/device/internal/impl/device_service.go
@@ -61,14 +61,13 @@
 	"v.io/v23/services/binary"
 	"v.io/v23/services/device"
 	"v.io/v23/verror"
+	"v.io/x/lib/buildinfo"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/lib/flags/buildinfo"
-
 	"v.io/x/ref/envvar"
 	vexec "v.io/x/ref/lib/exec"
 	"v.io/x/ref/lib/mgmt"
-	vsecurity "v.io/x/ref/security"
-	"v.io/x/ref/services/mgmt/device/config"
+	vsecurity "v.io/x/ref/lib/security"
+	"v.io/x/ref/services/device/internal/config"
 	"v.io/x/ref/services/profile"
 )
 
@@ -363,7 +362,7 @@
 		if p, err = vsecurity.CreatePersistentPrincipal(credentialsDir, nil); err != nil {
 			return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("CreatePersistentPrincipal(%v, nil) failed: %v", credentialsDir, err))
 		}
-		cmd.Env = envvar.DoNotUse_AppendCredentials(credentialsDir, cmd.Env)
+		cmd.Env = append(cmd.Env, envvar.Credentials+"="+credentialsDir)
 	}
 	dmPrincipal := v23.GetPrincipal(ctx)
 	dmBlessings, err := dmPrincipal.Bless(p.PublicKey(), dmPrincipal.BlessingStore().Default(), "testdm", security.UnconstrainedUse())
@@ -627,12 +626,12 @@
 	return nil
 }
 
-func (s *deviceService) SetPermissions(_ rpc.ServerCall, acl access.Permissions, etag string) error {
+func (s *deviceService) SetPermissions(_ rpc.ServerCall, acl access.Permissions, version string) error {
 	d := AclDir(s.disp.config)
-	return s.disp.aclstore.Set(d, acl, etag)
+	return s.disp.aclstore.Set(d, acl, version)
 }
 
-func (s *deviceService) GetPermissions(rpc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (s *deviceService) GetPermissions(rpc.ServerCall) (acl access.Permissions, version string, err error) {
 	d := AclDir(s.disp.config)
 	return s.disp.aclstore.Get(d)
 }
diff --git a/services/mgmt/device/impl/dispatcher.go b/services/device/internal/impl/dispatcher.go
similarity index 97%
rename from services/mgmt/device/impl/dispatcher.go
rename to services/device/internal/impl/dispatcher.go
index 2ec2dcb..9227d9b 100644
--- a/services/mgmt/device/impl/dispatcher.go
+++ b/services/device/internal/impl/dispatcher.go
@@ -12,13 +12,6 @@
 	"strings"
 	"sync"
 
-	"v.io/x/ref/security/agent"
-	"v.io/x/ref/security/agent/keymgr"
-	"v.io/x/ref/services/logreader/logreaderlib"
-	idevice "v.io/x/ref/services/mgmt/device"
-	"v.io/x/ref/services/mgmt/device/config"
-	"v.io/x/ref/services/mgmt/lib/acls"
-
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
@@ -32,6 +25,12 @@
 	"v.io/v23/vdlroot/signature"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
+	"v.io/x/ref/services/agent"
+	"v.io/x/ref/services/agent/keymgr"
+	s_device "v.io/x/ref/services/device"
+	"v.io/x/ref/services/device/internal/config"
+	"v.io/x/ref/services/internal/acls"
+	"v.io/x/ref/services/logreader/logreaderlib"
 )
 
 // internalState wraps state shared between different device manager
@@ -69,7 +68,7 @@
 	deviceSuffix = "device"
 	configSuffix = "cfg"
 
-	pkgPath = "v.io/x/ref/services/mgmt/device/impl"
+	pkgPath = "v.io/x/ref/services/device/internal/impl"
 )
 
 var (
@@ -341,7 +340,7 @@
 		if len(components) != 2 {
 			return nil, nil, verror.New(ErrInvalidSuffix, nil)
 		}
-		receiver := idevice.ConfigServer(&configService{
+		receiver := s_device.ConfigServer(&configService{
 			callback: d.internal.callback,
 			suffix:   components[1],
 		})
diff --git a/services/mgmt/device/impl/helper_manager.go b/services/device/internal/impl/helper_manager.go
similarity index 100%
rename from services/mgmt/device/impl/helper_manager.go
rename to services/device/internal/impl/helper_manager.go
diff --git a/services/mgmt/device/impl/impl_helper_test.go b/services/device/internal/impl/impl_helper_test.go
similarity index 96%
rename from services/mgmt/device/impl/impl_helper_test.go
rename to services/device/internal/impl/impl_helper_test.go
index 67d318c..e2b7c81 100644
--- a/services/mgmt/device/impl/impl_helper_test.go
+++ b/services/device/internal/impl/impl_helper_test.go
@@ -13,7 +13,7 @@
 	"path"
 	"testing"
 
-	"v.io/x/ref/services/mgmt/device/impl"
+	"v.io/x/ref/services/device/internal/impl"
 )
 
 func TestBaseCleanupDir(t *testing.T) {
diff --git a/services/mgmt/device/impl/impl_test.go b/services/device/internal/impl/impl_test.go
similarity index 91%
rename from services/mgmt/device/impl/impl_test.go
rename to services/device/internal/impl/impl_test.go
index 990223a..521d126 100644
--- a/services/mgmt/device/impl/impl_test.go
+++ b/services/device/internal/impl/impl_test.go
@@ -45,13 +45,12 @@
 	"v.io/x/ref/envvar"
 	"v.io/x/ref/lib/mgmt"
 	"v.io/x/ref/lib/signals"
+	"v.io/x/ref/lib/suid"
 	"v.io/x/ref/services/binary/binarylib"
-	"v.io/x/ref/services/mgmt/device/config"
-	"v.io/x/ref/services/mgmt/device/impl"
-	"v.io/x/ref/services/mgmt/device/starter"
-	libbinary "v.io/x/ref/services/mgmt/lib/binary"
-	mgmttest "v.io/x/ref/services/mgmt/lib/testutil"
-	suidhelper "v.io/x/ref/services/mgmt/suidhelper/impl"
+	"v.io/x/ref/services/device/internal/config"
+	"v.io/x/ref/services/device/internal/impl"
+	"v.io/x/ref/services/device/internal/starter"
+	"v.io/x/ref/services/internal/servicetest"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/expect"
 	"v.io/x/ref/test/modules"
@@ -106,7 +105,7 @@
 		return
 	}
 	vlog.VI(1).Infof("TestSuidHelper starting")
-	if err := suidhelper.Run(os.Environ()); err != nil {
+	if err := suid.Run(os.Environ()); err != nil {
 		vlog.Fatalf("Failed to Run() setuidhelper: %v", err)
 	}
 }
@@ -240,9 +239,9 @@
 }
 
 func ping(ctx *context.T) {
-	helperEnv := os.Getenv(suidhelper.SavedArgs)
+	helperEnv := os.Getenv(suid.SavedArgs)
 	d := json.NewDecoder(strings.NewReader(helperEnv))
-	var savedArgs suidhelper.ArgsSavedForTest
+	var savedArgs suid.ArgsSavedForTest
 	if err := d.Decode(&savedArgs); err != nil {
 		vlog.Fatalf("Failed to decode preserved argument %v: %v", helperEnv, err)
 	}
@@ -287,7 +286,7 @@
 	}
 	publishName := args[0]
 
-	server, _ := mgmttest.NewServer(ctx)
+	server, _ := servicetest.NewServer(ctx)
 	defer server.Stop()
 	if err := server.Serve(publishName, new(appService), nil); err != nil {
 		vlog.Fatalf("Serve(%v) failed: %v", publishName, err)
@@ -349,14 +348,14 @@
 	ctx, shutdown := initForTest()
 	defer shutdown()
 
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, ctx, v23.GetPrincipal(ctx))
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, ctx, v23.GetPrincipal(ctx))
 	defer deferFn()
 
 	// Set up mock application and binary repositories.
 	envelope, cleanup := startMockRepos(t, ctx)
 	defer cleanup()
 
-	root, cleanup := mgmttest.SetupRootDir(t, "devicemanager")
+	root, cleanup := servicetest.SetupRootDir(t, "devicemanager")
 	defer cleanup()
 	if err := impl.SaveCreatorInfo(root); err != nil {
 		t.Fatal(err)
@@ -398,12 +397,12 @@
 	// demonstrates that the initial device manager could be started by hand
 	// as long as the right initial configuration is passed into the device
 	// manager implementation.
-	dmh := mgmttest.RunCommand(t, sh, dmPauseBeforeStopEnv, deviceManagerCmd, dmArgs...)
+	dmh := servicetest.RunCommand(t, sh, dmPauseBeforeStopEnv, deviceManagerCmd, dmArgs...)
 	defer func() {
 		syscall.Kill(dmh.Pid(), syscall.SIGINT)
 	}()
 
-	mgmttest.ReadPID(t, dmh)
+	servicetest.ReadPID(t, dmh)
 	// Brand new device manager must be claimed first.
 	claimDevice(t, ctx, "factoryDM", "mydevice", noPairingToken)
 
@@ -444,9 +443,9 @@
 	// relaunch it from the current link.
 	resolveExpectNotFound(t, ctx, "v2DM") // Ensure a clean slate.
 
-	dmh = mgmttest.RunCommand(t, sh, dmEnv, execScriptCmd, currLink)
+	dmh = servicetest.RunCommand(t, sh, dmEnv, execScriptCmd, currLink)
 
-	mgmttest.ReadPID(t, dmh)
+	servicetest.ReadPID(t, dmh)
 	resolve(t, ctx, "v2DM", 1) // Current link should have been launching v2.
 
 	// Try issuing an update without changing the envelope in the
@@ -457,7 +456,8 @@
 		t.Fatalf("script changed")
 	}
 
-	// Try issuing an update with a binary that has a different major version number. It should fail
+	// Try issuing an update with a binary that has a different major version
+	// number. It should fail.
 	resolveExpectNotFound(t, ctx, "v2.5DM") // Ensure a clean slate.
 	*envelope = envelopeFromShell(sh, dmEnv, deviceManagerV10Cmd, application.DeviceManagerTitle, "v2.5DM")
 	updateDeviceExpectError(t, ctx, "v2DM", impl.ErrOperationFailed.ID)
@@ -485,9 +485,9 @@
 	// Re-lanuch the device manager from current link.  We instruct the
 	// device manager to pause before stopping its server, so that we can
 	// verify that a second revert fails while a revert is in progress.
-	dmh = mgmttest.RunCommand(t, sh, dmPauseBeforeStopEnv, execScriptCmd, currLink)
+	dmh = servicetest.RunCommand(t, sh, dmPauseBeforeStopEnv, execScriptCmd, currLink)
 
-	mgmttest.ReadPID(t, dmh)
+	servicetest.ReadPID(t, dmh)
 	resolve(t, ctx, "v3DM", 1) // Current link should have been launching v3.
 
 	// Revert the device manager to its previous version (v2).
@@ -503,8 +503,8 @@
 
 	resolveExpectNotFound(t, ctx, "v2DM") // Ensure a clean slate.
 
-	dmh = mgmttest.RunCommand(t, sh, dmEnv, execScriptCmd, currLink)
-	mgmttest.ReadPID(t, dmh)
+	dmh = servicetest.RunCommand(t, sh, dmEnv, execScriptCmd, currLink)
+	servicetest.ReadPID(t, dmh)
 	resolve(t, ctx, "v2DM", 1) // Current link should have been launching v2.
 
 	// Revert the device manager to its previous version (factory).
@@ -518,8 +518,8 @@
 
 	resolveExpectNotFound(t, ctx, "factoryDM") // Ensure a clean slate.
 
-	dmh = mgmttest.RunCommand(t, sh, dmEnv, execScriptCmd, currLink)
-	mgmttest.ReadPID(t, dmh)
+	dmh = servicetest.RunCommand(t, sh, dmEnv, execScriptCmd, currLink)
+	servicetest.ReadPID(t, dmh)
 	resolve(t, ctx, "factoryDM", 1) // Current link should have been launching factory version.
 	stopDevice(t, ctx, "factoryDM")
 	dmh.Expect("factoryDM terminated")
@@ -527,8 +527,8 @@
 
 	// Re-launch the device manager, to exercise the behavior of Suspend.
 	resolveExpectNotFound(t, ctx, "factoryDM") // Ensure a clean slate.
-	dmh = mgmttest.RunCommand(t, sh, dmEnv, execScriptCmd, currLink)
-	mgmttest.ReadPID(t, dmh)
+	dmh = servicetest.RunCommand(t, sh, dmEnv, execScriptCmd, currLink)
+	servicetest.ReadPID(t, dmh)
 	resolve(t, ctx, "factoryDM", 1)
 	suspendDevice(t, ctx, "factoryDM")
 	dmh.Expect("restart handler")
@@ -550,7 +550,7 @@
 // returns a channel on which the app's ping message is returned, and a cleanup
 // function.
 func setupPingServer(t *testing.T, ctx *context.T) (<-chan pingArgs, func()) {
-	server, _ := mgmttest.NewServer(ctx)
+	server, _ := servicetest.NewServer(ctx)
 	pingCh := make(chan pingArgs, 1)
 	if err := server.Serve("pingserver", pingServer(pingCh), &openAuthorizer{}); err != nil {
 		t.Fatalf("Serve(%q, <dispatcher>) failed: %v", "pingserver", err)
@@ -614,14 +614,14 @@
 	ctx, shutdown := initForTest()
 	defer shutdown()
 
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, ctx, nil)
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, ctx, nil)
 	defer deferFn()
 
 	// Set up mock application and binary repositories.
 	envelope, cleanup := startMockRepos(t, ctx)
 	defer cleanup()
 
-	root, cleanup := mgmttest.SetupRootDir(t, "devicemanager")
+	root, cleanup := servicetest.SetupRootDir(t, "devicemanager")
 	defer cleanup()
 	if err := impl.SaveCreatorInfo(root); err != nil {
 		t.Fatal(err)
@@ -632,8 +632,8 @@
 
 	// Set up the device manager.  Since we won't do device manager updates,
 	// don't worry about its application envelope and current link.
-	dmh := mgmttest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
-	mgmttest.ReadPID(t, dmh)
+	dmh := servicetest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
+	servicetest.ReadPID(t, dmh)
 	claimDevice(t, ctx, "dm", "mydevice", noPairingToken)
 
 	// Create the local server that the app uses to let us know it's ready.
@@ -867,7 +867,7 @@
 	if err != nil {
 		t.Fatalf("binarylib.NewState failed: %v", err)
 	}
-	server, _ := mgmttest.NewServer(ctx)
+	server, _ := servicetest.NewServer(ctx)
 	d, err := binarylib.NewDispatcher(v23.GetPrincipal(ctx), state)
 	if err != nil {
 		t.Fatalf("server.NewDispatcher failed: %v", err)
@@ -898,14 +898,14 @@
 		t.Fatal(err)
 	}
 
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, ctx, nil)
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, ctx, nil)
 	defer deferFn()
 
 	// Set up mock application and binary repositories.
 	envelope, cleanup := startMockRepos(t, ctx)
 	defer cleanup()
 
-	root, cleanup := mgmttest.SetupRootDir(t, "devicemanager")
+	root, cleanup := servicetest.SetupRootDir(t, "devicemanager")
 	defer cleanup()
 	if err := impl.SaveCreatorInfo(root); err != nil {
 		t.Fatal(err)
@@ -917,8 +917,8 @@
 	// Set up the device manager.  Since we won't do device manager updates,
 	// don't worry about its application envelope and current link.
 	pairingToken := "abcxyz"
-	dmh := mgmttest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link", pairingToken)
-	pid := mgmttest.ReadPID(t, dmh)
+	dmh := servicetest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link", pairingToken)
+	pid := servicetest.ReadPID(t, dmh)
 	defer syscall.Kill(pid, syscall.SIGINT)
 
 	*envelope = envelopeFromShell(sh, nil, appCmd, "google naps", "trapp")
@@ -984,14 +984,14 @@
 	idp := testutil.NewIDProvider("root")
 	ctx = ctxWithNewPrincipal(t, ctx, idp, "self")
 
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, ctx, nil)
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, ctx, nil)
 	defer deferFn()
 
 	// Set up mock application and binary repositories.
 	envelope, cleanup := startMockRepos(t, ctx)
 	defer cleanup()
 
-	root, cleanup := mgmttest.SetupRootDir(t, "devicemanager")
+	root, cleanup := servicetest.SetupRootDir(t, "devicemanager")
 	defer cleanup()
 	if err := impl.SaveCreatorInfo(root); err != nil {
 		t.Fatal(err)
@@ -1002,8 +1002,8 @@
 
 	// Set up the device manager.  Since we won't do device manager updates,
 	// don't worry about its application envelope and current link.
-	dmh := mgmttest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, "unused_helper", "unused_app_repo_name", "unused_curr_link")
-	pid := mgmttest.ReadPID(t, dmh)
+	dmh := servicetest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, "unused_helper", "unused_app_repo_name", "unused_curr_link")
+	pid := servicetest.ReadPID(t, dmh)
 	defer syscall.Kill(pid, syscall.SIGINT)
 
 	// Create an envelope for an app.
@@ -1025,14 +1025,16 @@
 	if err := expectedAccessList.WriteTo(&b); err != nil {
 		t.Fatalf("Failed to save AccessList:%v", err)
 	}
+	// Note, "version" below refers to the Permissions version, not the device
+	// manager version.
 	md5hash := md5.Sum(b.Bytes())
-	expectedETAG := hex.EncodeToString(md5hash[:])
-	acl, etag, err := deviceStub.GetPermissions(selfCtx)
+	expectedVersion := hex.EncodeToString(md5hash[:])
+	acl, version, err := deviceStub.GetPermissions(selfCtx)
 	if err != nil {
 		t.Fatal(err)
 	}
-	if etag != expectedETAG {
-		t.Fatalf("getAccessList expected:%v(%v), got:%v(%v)", expectedAccessList, expectedETAG, acl, etag)
+	if version != expectedVersion {
+		t.Fatalf("getAccessList expected:%v(%v), got:%v(%v)", expectedAccessList, expectedVersion, acl, version)
 	}
 	// Install from octx should fail, since it does not match the AccessList.
 	installAppExpectError(t, octx, verror.ErrNoAccess.ID)
@@ -1042,9 +1044,9 @@
 		newAccessList.Add("root/other", string(tag))
 	}
 	if err := deviceStub.SetPermissions(selfCtx, newAccessList, "invalid"); err == nil {
-		t.Fatalf("SetPermissions should have failed with invalid etag")
+		t.Fatalf("SetPermissions should have failed with invalid version")
 	}
-	if err := deviceStub.SetPermissions(selfCtx, newAccessList, etag); err != nil {
+	if err := deviceStub.SetPermissions(selfCtx, newAccessList, version); err != nil {
 		t.Fatal(err)
 	}
 	// Install should now fail with selfCtx, which no longer matches the
@@ -1072,9 +1074,9 @@
 	ctx, shutdown := initForTest()
 	defer shutdown()
 
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, ctx, nil)
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, ctx, nil)
 	defer deferFn()
-	testDir, cleanup := mgmttest.SetupRootDir(t, "devicemanager")
+	testDir, cleanup := servicetest.SetupRootDir(t, "devicemanager")
 	defer cleanup()
 	// No need to call SaveCreatorInfo() here because that's part of SelfInstall below
 
@@ -1103,8 +1105,8 @@
 	if err := impl.Start(dmDir, os.Stderr, stdout); err != nil {
 		t.Fatalf("Start failed: %v", err)
 	}
-	dms := expect.NewSession(t, stdout, mgmttest.ExpectTimeout)
-	mgmttest.ReadPID(t, dms)
+	dms := expect.NewSession(t, stdout, servicetest.ExpectTimeout)
+	servicetest.ReadPID(t, dms)
 	claimDevice(t, ctx, "dm", "mydevice", noPairingToken)
 	revertDeviceExpectError(t, ctx, "dm", impl.ErrUpdateNoOp.ID) // No previous version available.
 
@@ -1132,14 +1134,14 @@
 	ctx, shutdown := initForTest()
 	defer shutdown()
 
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, ctx, nil)
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, ctx, nil)
 	defer deferFn()
 
 	// Set up mock application and binary repositories.
 	envelope, cleanup := startMockRepos(t, ctx)
 	defer cleanup()
 
-	root, cleanup := mgmttest.SetupRootDir(t, "devicemanager")
+	root, cleanup := servicetest.SetupRootDir(t, "devicemanager")
 	defer cleanup()
 	if err := impl.SaveCreatorInfo(root); err != nil {
 		t.Fatal(err)
@@ -1150,8 +1152,8 @@
 
 	// Set up the device manager.  Since we won't do device manager updates,
 	// don't worry about its application envelope and current link.
-	dmh := mgmttest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
-	pid := mgmttest.ReadPID(t, dmh)
+	dmh := servicetest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
+	pid := servicetest.ReadPID(t, dmh)
 	defer syscall.Kill(pid, syscall.SIGINT)
 
 	// Create the local server that the app uses to let us know it's ready.
@@ -1234,7 +1236,7 @@
 	ctx, shutdown := initForTest()
 	defer shutdown()
 
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, ctx, nil)
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, ctx, nil)
 	defer deferFn()
 
 	// Set up mock application and binary repositories.
@@ -1256,13 +1258,13 @@
 		}
 	}
 	createFile("hello.txt", "Hello World!")
-	if _, err := libbinary.UploadFromDir(ctx, naming.Join(binaryVON, "testpkg"), tmpdir); err != nil {
-		t.Fatalf("libbinary.UploadFromDir failed: %v", err)
+	if _, err := binarylib.UploadFromDir(ctx, naming.Join(binaryVON, "testpkg"), tmpdir); err != nil {
+		t.Fatalf("binarylib.UploadFromDir failed: %v", err)
 	}
 	createAndUpload := func(von, contents string) {
 		createFile("tempfile", contents)
-		if _, err := libbinary.UploadFromFile(ctx, naming.Join(binaryVON, von), filepath.Join(tmpdir, "tempfile")); err != nil {
-			t.Fatalf("libbinary.UploadFromFile failed: %v", err)
+		if _, err := binarylib.UploadFromFile(ctx, naming.Join(binaryVON, von), filepath.Join(tmpdir, "tempfile")); err != nil {
+			t.Fatalf("binarylib.UploadFromFile failed: %v", err)
 		}
 	}
 	createAndUpload("testfile", "Goodbye World!")
@@ -1270,7 +1272,7 @@
 	createAndUpload("rightshark", "Right shark")
 	createAndUpload("beachball", "Beach ball")
 
-	root, cleanup := mgmttest.SetupRootDir(t, "devicemanager")
+	root, cleanup := servicetest.SetupRootDir(t, "devicemanager")
 	defer cleanup()
 	if err := impl.SaveCreatorInfo(root); err != nil {
 		t.Fatal(err)
@@ -1281,8 +1283,8 @@
 
 	// Set up the device manager.  Since we won't do device manager updates,
 	// don't worry about its application envelope and current link.
-	dmh := mgmttest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
-	pid := mgmttest.ReadPID(t, dmh)
+	dmh := servicetest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
+	pid := servicetest.ReadPID(t, dmh)
 	defer syscall.Kill(pid, syscall.SIGINT)
 
 	// Create the local server that the app uses to let us know it's ready.
@@ -1376,10 +1378,10 @@
 	ctx, shutdown := initForTest()
 	defer shutdown()
 
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, ctx, nil)
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, ctx, nil)
 	defer deferFn()
 
-	root, cleanup := mgmttest.SetupRootDir(t, "devicemanager")
+	root, cleanup := servicetest.SetupRootDir(t, "devicemanager")
 	defer cleanup()
 	if err := impl.SaveCreatorInfo(root); err != nil {
 		t.Fatal(err)
@@ -1398,8 +1400,8 @@
 		v23.GetPrincipal(c).AddToRoots(v23.GetPrincipal(ctx).BlessingStore().Default())
 	}
 
-	dmh := mgmttest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, "unused_helper", "unused_app_repo_name", "unused_curr_link")
-	pid := mgmttest.ReadPID(t, dmh)
+	dmh := servicetest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, "unused_helper", "unused_app_repo_name", "unused_curr_link")
+	pid := servicetest.ReadPID(t, dmh)
 	defer syscall.Kill(pid, syscall.SIGINT)
 
 	deviceStub := device.DeviceClient("dm/device")
@@ -1478,14 +1480,14 @@
 		t.Fatal(err)
 	}
 
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, ctx, nil)
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, ctx, nil)
 	defer deferFn()
 
 	// Set up mock application and binary repositories.
 	envelope, cleanup := startMockRepos(t, ctx)
 	defer cleanup()
 
-	root, cleanup := mgmttest.SetupRootDir(t, "devicemanager")
+	root, cleanup := servicetest.SetupRootDir(t, "devicemanager")
 	defer cleanup()
 	if err := impl.SaveCreatorInfo(root); err != nil {
 		t.Fatal(err)
@@ -1497,8 +1499,8 @@
 	// Create a script wrapping the test target that implements suidhelper.
 	helperPath := generateSuidHelperScript(t, root)
 
-	dmh := mgmttest.RunCommand(t, sh, nil, deviceManagerCmd, "-mocksetuid", "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
-	pid := mgmttest.ReadPID(t, dmh)
+	dmh := servicetest.RunCommand(t, sh, nil, deviceManagerCmd, "-mocksetuid", "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
+	pid := servicetest.ReadPID(t, dmh)
 	defer syscall.Kill(pid, syscall.SIGINT)
 	// Claim the devicemanager with selfCtx as root/self/alice
 	claimDevice(t, selfCtx, "dm", "alice", noPairingToken)
@@ -1607,7 +1609,7 @@
 	ctx, shutdown := initForTest()
 	defer shutdown()
 
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, ctx, nil)
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, ctx, nil)
 	defer deferFn()
 
 	binaryVON := "binary"
@@ -1616,7 +1618,7 @@
 
 	up := testutil.RandomBytes(testutil.Intn(5 << 20))
 	mediaInfo := repository.MediaInfo{Type: "application/octet-stream"}
-	sig, err := libbinary.Upload(ctx, naming.Join(binaryVON, "testbinary"), up, mediaInfo)
+	sig, err := binarylib.Upload(ctx, naming.Join(binaryVON, "testbinary"), up, mediaInfo)
 	if err != nil {
 		t.Fatalf("Upload(%v) failed:%v", binaryVON, err)
 	}
@@ -1631,16 +1633,16 @@
 	if err := ioutil.WriteFile(filepath.Join(tmpdir, "pkg.txt"), pkgContents, 0600); err != nil {
 		t.Fatalf("ioutil.WriteFile failed: %v", err)
 	}
-	pkgSig, err := libbinary.UploadFromDir(ctx, pkgVON, tmpdir)
+	pkgSig, err := binarylib.UploadFromDir(ctx, pkgVON, tmpdir)
 	if err != nil {
-		t.Fatalf("libbinary.UploadFromDir failed: %v", err)
+		t.Fatalf("binarylib.UploadFromDir failed: %v", err)
 	}
 
 	// Start the application repository
 	envelope, serverStop := startApplicationRepository(ctx)
 	defer serverStop()
 
-	root, cleanup := mgmttest.SetupRootDir(t, "devicemanager")
+	root, cleanup := servicetest.SetupRootDir(t, "devicemanager")
 	defer cleanup()
 	if err := impl.SaveCreatorInfo(root); err != nil {
 		t.Fatal(err)
@@ -1651,8 +1653,8 @@
 
 	// Set up the device manager.  Since we won't do device manager updates,
 	// don't worry about its application envelope and current link.
-	dmh := mgmttest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
-	pid := mgmttest.ReadPID(t, dmh)
+	dmh := servicetest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
+	pid := servicetest.ReadPID(t, dmh)
 	defer syscall.Kill(pid, syscall.SIGINT)
 	claimDevice(t, ctx, "dm", "mydevice", noPairingToken)
 
@@ -1679,10 +1681,10 @@
 
 	// Verify that when the binary is corrupted, signature verification fails.
 	up[0] = up[0] ^ 0xFF
-	if err := libbinary.Delete(ctx, naming.Join(binaryVON, "testbinary")); err != nil {
+	if err := binarylib.Delete(ctx, naming.Join(binaryVON, "testbinary")); err != nil {
 		t.Fatalf("Delete(%v) failed:%v", binaryVON, err)
 	}
-	if _, err := libbinary.Upload(ctx, naming.Join(binaryVON, "testbinary"), up, mediaInfo); err != nil {
+	if _, err := binarylib.Upload(ctx, naming.Join(binaryVON, "testbinary"), up, mediaInfo); err != nil {
 		t.Fatalf("Upload(%v) failed:%v", binaryVON, err)
 	}
 	if _, err := appStub().Install(ctx, mockApplicationRepoName, device.Config{}, nil); verror.ErrorID(err) != impl.ErrOperationFailed.ID {
@@ -1691,10 +1693,10 @@
 
 	// Restore the binary and verify that installation succeeds.
 	up[0] = up[0] ^ 0xFF
-	if err := libbinary.Delete(ctx, naming.Join(binaryVON, "testbinary")); err != nil {
+	if err := binarylib.Delete(ctx, naming.Join(binaryVON, "testbinary")); err != nil {
 		t.Fatalf("Delete(%v) failed:%v", binaryVON, err)
 	}
-	if _, err := libbinary.Upload(ctx, naming.Join(binaryVON, "testbinary"), up, mediaInfo); err != nil {
+	if _, err := binarylib.Upload(ctx, naming.Join(binaryVON, "testbinary"), up, mediaInfo); err != nil {
 		t.Fatalf("Upload(%v) failed:%v", binaryVON, err)
 	}
 	if _, err := appStub().Install(ctx, mockApplicationRepoName, device.Config{}, nil); err != nil {
@@ -1703,7 +1705,7 @@
 
 	// Verify that when the package contents are corrupted, signature verification fails.
 	pkgContents[0] = pkgContents[0] ^ 0xFF
-	if err := libbinary.Delete(ctx, pkgVON); err != nil {
+	if err := binarylib.Delete(ctx, pkgVON); err != nil {
 		t.Fatalf("Delete(%v) failed:%v", pkgVON, err)
 	}
 	if err := os.Remove(filepath.Join(tmpdir, "pkg.txt")); err != nil {
@@ -1712,8 +1714,8 @@
 	if err := ioutil.WriteFile(filepath.Join(tmpdir, "pkg.txt"), pkgContents, 0600); err != nil {
 		t.Fatalf("ioutil.WriteFile failed: %v", err)
 	}
-	if _, err = libbinary.UploadFromDir(ctx, pkgVON, tmpdir); err != nil {
-		t.Fatalf("libbinary.UploadFromDir failed: %v", err)
+	if _, err = binarylib.UploadFromDir(ctx, pkgVON, tmpdir); err != nil {
+		t.Fatalf("binarylib.UploadFromDir failed: %v", err)
 	}
 	if _, err := appStub().Install(ctx, mockApplicationRepoName, device.Config{}, nil); verror.ErrorID(err) != impl.ErrOperationFailed.ID {
 		t.Fatalf("Failed to verify signature mismatch for package:%v", pkgVON)
diff --git a/services/mgmt/device/impl/instance_reaping.go b/services/device/internal/impl/instance_reaping.go
similarity index 100%
rename from services/mgmt/device/impl/instance_reaping.go
rename to services/device/internal/impl/instance_reaping.go
diff --git a/services/mgmt/device/impl/instance_reaping_test.go b/services/device/internal/impl/instance_reaping_test.go
similarity index 92%
rename from services/mgmt/device/impl/instance_reaping_test.go
rename to services/device/internal/impl/instance_reaping_test.go
index 8b0e906..bac5e15 100644
--- a/services/mgmt/device/impl/instance_reaping_test.go
+++ b/services/device/internal/impl/instance_reaping_test.go
@@ -19,7 +19,7 @@
 	"v.io/v23/vdl"
 
 	"v.io/x/ref/envvar"
-	mgmttest "v.io/x/ref/services/mgmt/lib/testutil"
+	"v.io/x/ref/services/internal/servicetest"
 )
 
 func TestReaperNoticesAppDeath(t *testing.T) {
@@ -28,8 +28,8 @@
 
 	// Set up the device manager.  Since we won't do device manager updates,
 	// don't worry about its application envelope and current link.
-	dmh := mgmttest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
-	mgmttest.ReadPID(t, dmh)
+	dmh := servicetest.RunCommand(t, sh, nil, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
+	servicetest.ReadPID(t, dmh)
 	claimDevice(t, ctx, "dm", "mydevice", noPairingToken)
 
 	// Create the local server that the app uses to let us know it's ready.
@@ -107,8 +107,8 @@
 	defer os.RemoveAll(dmCreds)
 	dmEnv := []string{fmt.Sprintf("%v=%v", envvar.Credentials, dmCreds)}
 
-	dmh := mgmttest.RunCommand(t, sh, dmEnv, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
-	mgmttest.ReadPID(t, dmh)
+	dmh := servicetest.RunCommand(t, sh, dmEnv, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
+	servicetest.ReadPID(t, dmh)
 	claimDevice(t, ctx, "dm", "mydevice", noPairingToken)
 
 	// Create the local server that the app uses to let us know it's ready.
@@ -152,8 +152,8 @@
 	}
 
 	// Run another device manager to replace the dead one.
-	dmh = mgmttest.RunCommand(t, sh, dmEnv, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
-	mgmttest.ReadPID(t, dmh)
+	dmh = servicetest.RunCommand(t, sh, dmEnv, deviceManagerCmd, "dm", root, helperPath, "unused_app_repo_name", "unused_curr_link")
+	servicetest.ReadPID(t, dmh)
 	resolve(t, ctx, "dm", 1) // Verify the device manager has published itself.
 
 	// By now, we've reconciled the state of the tree with which processes
diff --git a/services/mgmt/device/impl/mock_repo_test.go b/services/device/internal/impl/mock_repo_test.go
similarity index 93%
rename from services/mgmt/device/impl/mock_repo_test.go
rename to services/device/internal/impl/mock_repo_test.go
index 527c01c..6f2bece 100644
--- a/services/mgmt/device/impl/mock_repo_test.go
+++ b/services/device/internal/impl/mock_repo_test.go
@@ -23,7 +23,7 @@
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
 
-	mgmttest "v.io/x/ref/services/mgmt/lib/testutil"
+	"v.io/x/ref/services/internal/servicetest"
 )
 
 const mockBinaryRepoName = "br"
@@ -43,7 +43,7 @@
 // repository.  It returns a pointer to the envelope that the repository returns
 // to clients (so that it can be changed).  It also returns a cleanup function.
 func startApplicationRepository(ctx *context.T) (*application.Envelope, func()) {
-	server, _ := mgmttest.NewServer(ctx)
+	server, _ := servicetest.NewServer(ctx)
 	invoker := new(arInvoker)
 	name := mockApplicationRepoName
 	if err := server.Serve(name, repository.ApplicationServer(invoker), &openAuthorizer{}); err != nil {
@@ -76,11 +76,11 @@
 	return i.envelope, nil
 }
 
-func (i *arInvoker) GetPermissions(rpc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (i *arInvoker) GetPermissions(rpc.ServerCall) (acl access.Permissions, version string, err error) {
 	return nil, "", nil
 }
 
-func (i *arInvoker) SetPermissions(_ rpc.ServerCall, acl access.Permissions, etag string) error {
+func (i *arInvoker) SetPermissions(_ rpc.ServerCall, acl access.Permissions, version string) error {
 	return nil
 }
 
@@ -91,7 +91,7 @@
 // startBinaryRepository sets up a server running the binary repository and
 // returns a cleanup function.
 func startBinaryRepository(ctx *context.T) func() {
-	server, _ := mgmttest.NewServer(ctx)
+	server, _ := servicetest.NewServer(ctx)
 	name := mockBinaryRepoName
 	if err := server.Serve(name, repository.BinaryServer(new(brInvoker)), &openAuthorizer{}); err != nil {
 		vlog.Fatalf("Serve(%q) failed: %v", name, err)
@@ -106,7 +106,7 @@
 // BINARY REPOSITORY INTERFACE IMPLEMENTATION
 
 // TODO(toddw): Move the errors from dispatcher.go into a common location.
-const pkgPath = "v.io/x/ref/services/mgmt/device/impl"
+const pkgPath = "v.io/x/ref/services/device/internal/impl"
 
 var ErrOperationFailed = verror.Register(pkgPath+".OperationFailed", verror.NoRetry, "")
 
@@ -170,10 +170,10 @@
 	return nil
 }
 
-func (i *brInvoker) GetPermissions(call rpc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (i *brInvoker) GetPermissions(call rpc.ServerCall) (acl access.Permissions, version string, err error) {
 	return nil, "", nil
 }
 
-func (i *brInvoker) SetPermissions(call rpc.ServerCall, acl access.Permissions, etag string) error {
+func (i *brInvoker) SetPermissions(call rpc.ServerCall, acl access.Permissions, version string) error {
 	return nil
 }
diff --git a/services/mgmt/device/impl/only_for_test.go b/services/device/internal/impl/only_for_test.go
similarity index 100%
rename from services/mgmt/device/impl/only_for_test.go
rename to services/device/internal/impl/only_for_test.go
diff --git a/services/mgmt/device/impl/profile.go b/services/device/internal/impl/profile.go
similarity index 99%
rename from services/mgmt/device/impl/profile.go
rename to services/device/internal/impl/profile.go
index 8b86817..f21cdb3 100644
--- a/services/mgmt/device/impl/profile.go
+++ b/services/device/internal/impl/profile.go
@@ -156,7 +156,7 @@
 			Format:      build.ELF,
 		},
 		{
-			Label:       "linux-x86",
+			Label:       "linux-386",
 			Description: "",
 			Arch:        build.X86,
 			Os:          build.Linux,
diff --git a/services/mgmt/device/impl/proxy_invoker.go b/services/device/internal/impl/proxy_invoker.go
similarity index 100%
rename from services/mgmt/device/impl/proxy_invoker.go
rename to services/device/internal/impl/proxy_invoker.go
diff --git a/services/mgmt/device/impl/proxy_invoker_test.go b/services/device/internal/impl/proxy_invoker_test.go
similarity index 100%
rename from services/mgmt/device/impl/proxy_invoker_test.go
rename to services/device/internal/impl/proxy_invoker_test.go
diff --git a/services/mgmt/device/impl/shell_darwin.go b/services/device/internal/impl/shell_darwin.go
similarity index 100%
rename from services/mgmt/device/impl/shell_darwin.go
rename to services/device/internal/impl/shell_darwin.go
diff --git a/services/mgmt/device/impl/shell_linux.go b/services/device/internal/impl/shell_linux.go
similarity index 100%
rename from services/mgmt/device/impl/shell_linux.go
rename to services/device/internal/impl/shell_linux.go
diff --git a/services/mgmt/device/impl/util.go b/services/device/internal/impl/util.go
similarity index 95%
rename from services/mgmt/device/impl/util.go
rename to services/device/internal/impl/util.go
index 59f5796..36ec927 100644
--- a/services/mgmt/device/impl/util.go
+++ b/services/device/internal/impl/util.go
@@ -14,8 +14,8 @@
 	"strings"
 	"time"
 
-	"v.io/x/ref/services/mgmt/device/config"
-	"v.io/x/ref/services/mgmt/lib/binary"
+	"v.io/x/ref/services/binary/binarylib"
+	"v.io/x/ref/services/device/internal/config"
 
 	"v.io/v23/context"
 	"v.io/v23/security"
@@ -46,7 +46,7 @@
 func downloadBinary(ctx *context.T, publisher security.Blessings, bin *application.SignedFile, workspace, fileName string) error {
 	// TODO(gauthamt): Reduce the number of passes we make over the binary/package
 	// data to verify its checksum and signature.
-	data, _, err := binary.Download(ctx, bin.File)
+	data, _, err := binarylib.Download(ctx, bin.File)
 	if err != nil {
 		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Download(%v) failed: %v", bin.File, err))
 	}
@@ -67,7 +67,7 @@
 			return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("invalid local package name: %q", localPkg))
 		}
 		path := filepath.Join(pkgDir, localPkg)
-		if err := binary.DownloadToFile(ctx, pkgName.File, path); err != nil {
+		if err := binarylib.DownloadToFile(ctx, pkgName.File, path); err != nil {
 			return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("DownloadToFile(%q, %q) failed: %v", pkgName, path, err))
 		}
 		data, err := ioutil.ReadFile(path)
diff --git a/services/mgmt/device/impl/util_test.go b/services/device/internal/impl/util_test.go
similarity index 97%
rename from services/mgmt/device/impl/util_test.go
rename to services/device/internal/impl/util_test.go
index 8158ddc..3cc4314 100644
--- a/services/mgmt/device/impl/util_test.go
+++ b/services/device/internal/impl/util_test.go
@@ -33,8 +33,8 @@
 	"v.io/v23/verror"
 
 	_ "v.io/x/ref/profiles/roaming"
-	"v.io/x/ref/services/mgmt/device/impl"
-	mgmttest "v.io/x/ref/services/mgmt/lib/testutil"
+	"v.io/x/ref/services/device/internal/impl"
+	"v.io/x/ref/services/internal/servicetest"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/modules"
 	"v.io/x/ref/test/testutil"
@@ -96,7 +96,7 @@
 
 func claimDevice(t *testing.T, ctx *context.T, name, extension, pairingToken string) {
 	// Setup blessings to be granted to the claimed device
-	g := &granter{p: v23.GetPrincipal(ctx), extension: extension}
+	g := &granter{extension: extension}
 	s := options.SkipServerEndpointAuthorization{}
 	// Call the Claim RPC: Skip server authorization because the unclaimed
 	// device presents nothing that can be used to recognize it.
@@ -122,7 +122,7 @@
 
 func claimDeviceExpectError(t *testing.T, ctx *context.T, name, extension, pairingToken string, errID verror.ID) {
 	// Setup blessings to be granted to the claimed device
-	g := &granter{p: v23.GetPrincipal(ctx), extension: extension}
+	g := &granter{extension: extension}
 	s := options.SkipServerEndpointAuthorization{}
 	// Call the Claim RPC
 	if err := device.ClaimableClient(name).Claim(ctx, pairingToken, g, s); verror.ErrorID(err) != errID {
@@ -218,8 +218,10 @@
 	extension string
 }
 
-func (g *granter) Grant(other security.Blessings) (security.Blessings, error) {
-	return g.p.Bless(other.PublicKey(), g.p.BlessingStore().Default(), g.extension, security.UnconstrainedUse())
+func (g *granter) Grant(ctx *context.T) (security.Blessings, error) {
+	call := security.GetCall(ctx)
+	p := call.LocalPrincipal()
+	return p.Bless(call.RemoteBlessings().PublicKey(), p.BlessingStore().Default(), g.extension, security.UnconstrainedUse())
 }
 
 func startAppImpl(t *testing.T, ctx *context.T, appID, grant string) (string, error) {
@@ -463,12 +465,12 @@
 	idp := testutil.NewIDProvider("root")
 	ctx = ctxWithNewPrincipal(t, ctx, idp, "self")
 
-	sh, deferFn := mgmttest.CreateShellAndMountTable(t, ctx, nil)
+	sh, deferFn := servicetest.CreateShellAndMountTable(t, ctx, nil)
 
 	// Set up mock application and binary repositories.
 	envelope, envCleanup := startMockRepos(t, ctx)
 
-	root, rootCleanup := mgmttest.SetupRootDir(t, "devicemanager")
+	root, rootCleanup := servicetest.SetupRootDir(t, "devicemanager")
 	if err := impl.SaveCreatorInfo(root); err != nil {
 		t.Fatal(err)
 	}
diff --git a/services/mgmt/device/impl/v23_test.go b/services/device/internal/impl/v23_test.go
similarity index 100%
rename from services/mgmt/device/impl/v23_test.go
rename to services/device/internal/impl/v23_test.go
diff --git a/services/mgmt/device/starter/starter.go b/services/device/internal/starter/starter.go
similarity index 94%
rename from services/mgmt/device/starter/starter.go
rename to services/device/internal/starter/starter.go
index a854f24..b0a636c 100644
--- a/services/mgmt/device/starter/starter.go
+++ b/services/device/internal/starter/starter.go
@@ -17,10 +17,10 @@
 	"v.io/x/lib/netstate"
 	"v.io/x/ref/profiles/roaming"
 	"v.io/x/ref/services/debug/debuglib"
-	"v.io/x/ref/services/mgmt/device/config"
-	"v.io/x/ref/services/mgmt/device/impl"
-	"v.io/x/ref/services/mgmt/lib/acls"
-	mounttable "v.io/x/ref/services/mounttable/lib"
+	"v.io/x/ref/services/device/internal/config"
+	"v.io/x/ref/services/device/internal/impl"
+	"v.io/x/ref/services/internal/acls"
+	"v.io/x/ref/services/mounttable/mounttablelib"
 
 	"v.io/v23"
 	"v.io/v23/context"
@@ -30,7 +30,7 @@
 	"v.io/x/lib/vlog"
 )
 
-const pkgPath = "v.io/x/ref/services/mgmt/device/starter"
+const pkgPath = "v.io/x/ref/services/device/internal/starter"
 
 var (
 	errCantSaveInfo       = verror.Register(pkgPath+".errCantSaveInfo", verror.NoRetry, "{1:}{2:} failed to save info{:_}")
@@ -226,13 +226,12 @@
 		vlog.Errorf("Failed to start mounttable service: %v", err)
 		return nil, err
 	}
-	// TODO(caprita): We link in a proxy server into the device manager so
-	// that we can bootstrap with install-local before we can install an
-	// actual proxy app.  Once support is added to the RPC layer to allow
-	// install-local to serve on the same connection it established to the
-	// device manager (see TODO in
-	// v.io/x/ref/cmd/mgmt/device/impl/local_install.go), we can get rid of
-	// this local proxy altogether.
+	// TODO(caprita): We link in a proxy server into the device manager so that we
+	// can bootstrap with install-local before we can install an actual proxy app.
+	// Once support is added to the RPC layer to allow install-local to serve on
+	// the same connection it established to the device manager (see TODO in
+	// v.io/x/ref/services/device/device/local_install.go), we can get rid of this
+	// local proxy altogether.
 	stopProxy, err := startProxyServer(ctx, args.Proxy, mtName)
 	if err != nil {
 		vlog.Errorf("Failed to start proxy service: %v", err)
@@ -293,9 +292,9 @@
 }
 
 func startMounttable(ctx *context.T, n NamespaceArgs) (string, func(), error) {
-	mtName, stopMT, err := mounttable.StartServers(ctx, n.ListenSpec, n.Name, n.Neighborhood, n.AccessListFile)
+	mtName, stopMT, err := mounttablelib.StartServers(ctx, n.ListenSpec, n.Name, n.Neighborhood, n.AccessListFile)
 	if err != nil {
-		vlog.Errorf("mounttable.StartServers(%#v) failed: %v", n, err)
+		vlog.Errorf("mounttablelib.StartServers(%#v) failed: %v", n, err)
 	} else {
 		vlog.Infof("Local mounttable (%v) published as %q", mtName, n.Name)
 	}
diff --git a/cmd/mgmt/mgmt_v23_test.go b/services/device/mgmt_v23_test.go
similarity index 96%
rename from cmd/mgmt/mgmt_v23_test.go
rename to services/device/mgmt_v23_test.go
index 49bc382..7fc2c4f 100644
--- a/cmd/mgmt/mgmt_v23_test.go
+++ b/services/device/mgmt_v23_test.go
@@ -23,7 +23,7 @@
 // to test a device manager with multi-account support enabled for app
 // account vanaguest.
 //
-package mgmt_test
+package device_test
 
 //go:generate v23 test generate .
 
@@ -85,7 +85,7 @@
 		// applicationd/binaryd servers will be run by alice too.
 		namespaceBin    = i.BuildV23Pkg("v.io/x/ref/cmd/namespace").WithStartOpts(aliceOpts)
 		debugBin        = i.BuildV23Pkg("v.io/x/ref/services/debug/debug").WithStartOpts(aliceOpts)
-		deviceBin       = i.BuildV23Pkg("v.io/x/ref/cmd/mgmt/device").WithStartOpts(aliceOpts)
+		deviceBin       = i.BuildV23Pkg("v.io/x/ref/services/device/device").WithStartOpts(aliceOpts)
 		binaryBin       = i.BuildV23Pkg("v.io/x/ref/services/binary/binary").WithStartOpts(aliceOpts)
 		applicationBin  = i.BuildV23Pkg("v.io/x/ref/services/application/application").WithStartOpts(aliceOpts)
 		binarydBin      = i.BuildV23Pkg("v.io/x/ref/services/binary/binaryd").WithStartOpts(aliceOpts)
@@ -98,7 +98,7 @@
 		// waiting to be claimed.
 		//
 		// Other binaries, like applicationd and binaryd will be run by alice.
-		deviceScript = i.BinaryFromPath("device/devicex").WithEnv("V23_DEVICE_DIR=" + dmInstallDir)
+		deviceScript = i.BinaryFromPath("./devicex").WithEnv("V23_DEVICE_DIR=" + dmInstallDir)
 
 		mtName = "devices/" + hostname // Name under which the device manager will publish itself.
 	)
@@ -107,10 +107,10 @@
 	buildAndCopyBinaries(
 		i,
 		binStagingDir,
-		"v.io/x/ref/services/mgmt/device/deviced",
-		"v.io/x/ref/security/agent/agentd",
-		"v.io/x/ref/services/mgmt/suidhelper",
-		"v.io/x/ref/services/mgmt/inithelper")
+		"v.io/x/ref/services/device/deviced",
+		"v.io/x/ref/services/agent/agentd",
+		"v.io/x/ref/services/device/suidhelper",
+		"v.io/x/ref/services/device/inithelper")
 
 	appDName := "applicationd"
 	devicedAppName := filepath.Join(appDName, "deviced", "test")
@@ -284,7 +284,7 @@
 
 	// Upload a deviced binary
 	devicedAppBinName := binarydName + "/deviced"
-	binaryBin.Run("upload", devicedAppBinName, i.BuildGoPkg("v.io/x/ref/services/mgmt/device/deviced").Path())
+	binaryBin.Run("upload", devicedAppBinName, i.BuildGoPkg("v.io/x/ref/services/device/deviced").Path())
 
 	// Upload a device manager envelope.
 	devicedEnvelopeFilename := filepath.Join(workDir, "deviced.envelope")
diff --git a/cmd/mgmt/shell.sh b/services/device/shell.sh
similarity index 100%
rename from cmd/mgmt/shell.sh
rename to services/device/shell.sh
diff --git a/cmd/mgmt/shell_test.sh b/services/device/shell_test.sh
similarity index 99%
rename from cmd/mgmt/shell_test.sh
rename to services/device/shell_test.sh
index eafdc96..9d66678 100755
--- a/cmd/mgmt/shell_test.sh
+++ b/services/device/shell_test.sh
@@ -265,7 +265,7 @@
 #   main "$@"
 shell_test::enable_agent() {
   if [[ ! -n ${shell_test_RUNNING_UNDER_AGENT+1} ]]; then
-    local -r AGENTD="$(shell_test::build_go_binary 'v.io/x/ref/security/agent/agentd')"
+    local -r AGENTD="$(shell_test::build_go_binary 'v.io/x/ref/services/agent/agentd')"
     local -r WORKDIR="${shell_test_WORK_DIR}"
     export shell_test_RUNNING_UNDER_AGENT=1
     V23_CREDENTIALS="${WORKDIR}/credentials" exec ${AGENTD} --no-passphrase --additional-principals="${WORKDIR}/childcredentials" bash -"$-" "$0" "$@"
diff --git a/cmd/mgmt/suid_test.sh b/services/device/suid_test.sh
similarity index 97%
rename from cmd/mgmt/suid_test.sh
rename to services/device/suid_test.sh
index ea320e2..2c09107 100755
--- a/cmd/mgmt/suid_test.sh
+++ b/services/device/suid_test.sh
@@ -56,15 +56,15 @@
   BINARY_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/binary/binary')"
   APPLICATIOND_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/application/applicationd')"
   APPLICATION_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/application/application')"
-  AGENTD_BIN="$(shell_test::build_go_binary 'v.io/x/ref/security/agent/agentd')"
-  SUIDHELPER_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/mgmt/suidhelper')"
-  INITHELPER_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/mgmt/inithelper')"
-  DEVICEMANAGER_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/mgmt/device/deviced')"
-  DEVICE_BIN="$(shell_test::build_go_binary 'v.io/x/ref/cmd/mgmt/device')"
+  AGENTD_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/agent/agentd')"
+  SUIDHELPER_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/device/suidhelper')"
+  INITHELPER_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/device/inithelper')"
+  DEVICEMANAGER_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/device/deviced')"
+  DEVICE_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/device/device')"
   NAMESPACE_BIN="$(shell_test::build_go_binary 'v.io/x/ref/cmd/namespace')"
   PRINCIPAL_BIN="$(shell_test::build_go_binary 'v.io/x/ref/cmd/principal')"
   DEBUG_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/debug/debug')"
-  DEVICE_SCRIPT="$(go list -f {{.Dir}} v.io/x/ref/cmd/mgmt/device)/devicex"
+  DEVICE_SCRIPT="$(go list -f {{.Dir}} v.io/x/ref/services/device)/devicex"
 }
 
 # TODO(caprita): Move to shell_tesh.sh
diff --git a/services/mgmt/suidhelper/main.go b/services/device/suidhelper/main.go
similarity index 88%
rename from services/mgmt/suidhelper/main.go
rename to services/device/suidhelper/main.go
index b36e1b8..92fc1c9 100644
--- a/services/mgmt/suidhelper/main.go
+++ b/services/device/suidhelper/main.go
@@ -14,13 +14,13 @@
 	"fmt"
 	"os"
 
-	"v.io/x/ref/services/mgmt/suidhelper/impl"
+	"v.io/x/ref/lib/suid"
 )
 
 func main() {
 	flag.Parse()
 	fmt.Fprintln(os.Stderr, os.Args)
-	if err := impl.Run(os.Environ()); err != nil {
+	if err := suid.Run(os.Environ()); err != nil {
 		fmt.Fprintln(os.Stderr, "Failed with:", err)
 		// TODO(rjkroege): We should really only print the usage message
 		// if the error is related to interpreting flags.
diff --git a/cmd/mgmt/test.sh b/services/device/test.sh
similarity index 100%
rename from cmd/mgmt/test.sh
rename to services/device/test.sh
diff --git a/cmd/mgmt/v23_test.go b/services/device/v23_test.go
similarity index 95%
rename from cmd/mgmt/v23_test.go
rename to services/device/v23_test.go
index eca31e6..597fed2 100644
--- a/cmd/mgmt/v23_test.go
+++ b/services/device/v23_test.go
@@ -4,7 +4,7 @@
 
 // This file was auto-generated via go generate.
 // DO NOT UPDATE MANUALLY
-package mgmt_test
+package device_test
 
 import "testing"
 import "os"
diff --git a/services/security/discharger.vdl b/services/discharger/discharger.vdl
similarity index 97%
rename from services/security/discharger.vdl
rename to services/discharger/discharger.vdl
index 040fe21..7aed262 100644
--- a/services/security/discharger.vdl
+++ b/services/discharger/discharger.vdl
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package security
+package discharger
 
 import "v.io/v23/security"
 
diff --git a/services/security/discharger.vdl.go b/services/discharger/discharger.vdl.go
similarity index 95%
rename from services/security/discharger.vdl.go
rename to services/discharger/discharger.vdl.go
index 3b0715a..1024842 100644
--- a/services/security/discharger.vdl.go
+++ b/services/discharger/discharger.vdl.go
@@ -5,7 +5,7 @@
 // This file was auto-generated by the vanadium vdl tool.
 // Source: discharger.vdl
 
-package security
+package discharger
 
 import (
 	// VDL system imports
@@ -21,7 +21,7 @@
 
 var (
 	// Indicates that the Caveat does not require a discharge
-	ErrNotAThirdPartyCaveat = verror.Register("v.io/x/ref/services/security.NotAThirdPartyCaveat", verror.NoRetry, "{1:}{2:} discharges are not required for non-third-party caveats (id: {c.id})")
+	ErrNotAThirdPartyCaveat = verror.Register("v.io/x/ref/services/discharger.NotAThirdPartyCaveat", verror.NoRetry, "{1:}{2:} discharges are not required for non-third-party caveats (id: {c.id})")
 )
 
 func init() {
@@ -132,7 +132,7 @@
 // descDischarger hides the desc to keep godoc clean.
 var descDischarger = rpc.InterfaceDesc{
 	Name:    "Discharger",
-	PkgPath: "v.io/x/ref/services/security",
+	PkgPath: "v.io/x/ref/services/discharger",
 	Doc:     "// Discharger is the interface for obtaining discharges for ThirdPartyCaveats.",
 	Methods: []rpc.MethodDesc{
 		{
diff --git a/services/security/discharger/discharger.go b/services/discharger/dischargerlib/discharger.go
similarity index 86%
rename from services/security/discharger/discharger.go
rename to services/discharger/dischargerlib/discharger.go
index 30ad199..1c3e405 100644
--- a/services/security/discharger/discharger.go
+++ b/services/discharger/dischargerlib/discharger.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package discharger
+package dischargerlib
 
 import (
 	"fmt"
@@ -10,7 +10,7 @@
 
 	"v.io/v23/rpc"
 	"v.io/v23/security"
-	services "v.io/x/ref/services/security"
+	"v.io/x/ref/services/discharger"
 )
 
 // dischargerd issues discharges for all caveats present in the current
@@ -22,7 +22,7 @@
 	secCall := security.GetCall(ctx)
 	tp := caveat.ThirdPartyDetails()
 	if tp == nil {
-		return security.Discharge{}, services.NewErrNotAThirdPartyCaveat(call.Context(), caveat)
+		return security.Discharge{}, discharger.NewErrNotAThirdPartyCaveat(call.Context(), caveat)
 	}
 	if err := tp.Dischargeable(ctx); err != nil {
 		return security.Discharge{}, fmt.Errorf("third-party caveat %v cannot be discharged for this context: %v", tp, err)
@@ -40,6 +40,6 @@
 // Discharges are valid for 15 minutes.
 // TODO(ashankar,ataly): Parameterize this? Make it easier for clients to add
 // caveats on the discharge?
-func NewDischarger() services.DischargerServerMethods {
+func NewDischarger() discharger.DischargerServerMethods {
 	return dischargerd{}
 }
diff --git a/services/security/groups/README b/services/groups/README
similarity index 66%
rename from services/security/groups/README
rename to services/groups/README
index 4d1e921..fa22167 100644
--- a/services/security/groups/README
+++ b/services/groups/README
@@ -1,6 +1,6 @@
 WORK IN PROGRESS. DO NOT DEPEND ON ANYTHING IN THIS DIRECTORY.
 
-This directory provides an implementation of groups.
+This directory provides an implementation of groups for managing access control.
 
 Group support is under development. Code and interfaces in this directory may
 change at any time.
diff --git a/services/security/groups/grpserverd/main.go b/services/groups/groupsd/main.go
similarity index 84%
rename from services/security/groups/grpserverd/main.go
rename to services/groups/groupsd/main.go
index b5d2c3d..39222de 100644
--- a/services/security/groups/grpserverd/main.go
+++ b/services/groups/groupsd/main.go
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// grpserverd is a group server daemon.
+// Daemon groupsd manages groups for access control.
 package main
 
 // Example invocation:
-// grpserverd --v23.tcp.address="127.0.0.1:0" --name=grpserverd
+// groupsd --v23.tcp.address="127.0.0.1:0" --name=groupsd
 
 import (
 	"flag"
@@ -17,8 +17,8 @@
 
 	"v.io/x/ref/lib/signals"
 	_ "v.io/x/ref/profiles/roaming"
-	"v.io/x/ref/services/security/groups/memstore"
-	"v.io/x/ref/services/security/groups/server"
+	"v.io/x/ref/services/groups/internal/memstore"
+	"v.io/x/ref/services/groups/internal/server"
 )
 
 // TODO(sadovsky): Perhaps this should be one of the standard Vanadium flags.
diff --git a/services/security/groups/memstore/memstore.go b/services/groups/internal/memstore/memstore.go
similarity index 67%
rename from services/security/groups/memstore/memstore.go
rename to services/groups/internal/memstore/memstore.go
index 7785c6b..3a5ae6c 100644
--- a/services/security/groups/memstore/memstore.go
+++ b/services/groups/internal/memstore/memstore.go
@@ -11,12 +11,12 @@
 	"strconv"
 	"sync"
 
-	"v.io/x/ref/services/security/groups/server"
+	"v.io/x/ref/services/groups/internal/server"
 )
 
 type entry struct {
-	v    interface{}
-	etag int
+	v       interface{}
+	version int
 }
 
 type memstore struct {
@@ -30,14 +30,14 @@
 	return &memstore{data: map[string]*entry{}}
 }
 
-func (st *memstore) Get(k string) (v interface{}, etag string, err error) {
+func (st *memstore) Get(k string) (v interface{}, version string, err error) {
 	st.mu.Lock()
 	defer st.mu.Unlock()
 	e, ok := st.data[k]
 	if !ok {
 		return nil, "", &server.ErrUnknownKey{Key: k}
 	}
-	return e.v, strconv.Itoa(e.etag), nil
+	return e.v, strconv.Itoa(e.version), nil
 }
 
 func (st *memstore) Insert(k string, v interface{}) error {
@@ -50,39 +50,39 @@
 	return nil
 }
 
-func (st *memstore) Update(k string, v interface{}, etag string) error {
+func (st *memstore) Update(k string, v interface{}, version string) error {
 	st.mu.Lock()
 	defer st.mu.Unlock()
 	e, ok := st.data[k]
 	if !ok {
 		return &server.ErrUnknownKey{Key: k}
 	}
-	if err := e.checkEtag(etag); err != nil {
+	if err := e.checkVersion(version); err != nil {
 		return err
 	}
 	e.v = v
-	e.etag++
+	e.version++
 	return nil
 }
 
-func (st *memstore) Delete(k string, etag string) error {
+func (st *memstore) Delete(k string, version string) error {
 	st.mu.Lock()
 	defer st.mu.Unlock()
 	e, ok := st.data[k]
 	if !ok {
 		return &server.ErrUnknownKey{Key: k}
 	}
-	if err := e.checkEtag(etag); err != nil {
+	if err := e.checkVersion(version); err != nil {
 		return err
 	}
 	delete(st.data, k)
 	return nil
 }
 
-func (e *entry) checkEtag(etag string) error {
-	newEtag := strconv.Itoa(e.etag)
-	if etag != newEtag {
-		return &server.ErrBadEtag{}
+func (e *entry) checkVersion(version string) error {
+	newVersion := strconv.Itoa(e.version)
+	if version != newVersion {
+		return &server.ErrBadVersion{}
 	}
 	return nil
 }
diff --git a/services/security/groups/server/doc.go b/services/groups/internal/server/doc.go
similarity index 100%
rename from services/security/groups/server/doc.go
rename to services/groups/internal/server/doc.go
diff --git a/services/security/groups/server/group.go b/services/groups/internal/server/group.go
similarity index 74%
rename from services/security/groups/server/group.go
rename to services/groups/internal/server/group.go
index 51a92bb..2d04399 100644
--- a/services/security/groups/server/group.go
+++ b/services/groups/internal/server/group.go
@@ -68,54 +68,54 @@
 	return nil
 }
 
-func (g *group) Delete(call rpc.ServerCall, etag string) error {
-	return g.readModifyWrite(call, etag, func(gd *groupData, etagSt string) error {
-		return g.m.st.Delete(g.name, etagSt)
+func (g *group) Delete(call rpc.ServerCall, version string) error {
+	return g.readModifyWrite(call, version, func(gd *groupData, versionSt string) error {
+		return g.m.st.Delete(g.name, versionSt)
 	})
 }
 
-func (g *group) Add(call rpc.ServerCall, entry groups.BlessingPatternChunk, etag string) error {
-	return g.update(call, etag, func(gd *groupData) {
+func (g *group) Add(call rpc.ServerCall, entry groups.BlessingPatternChunk, version string) error {
+	return g.update(call, version, func(gd *groupData) {
 		gd.Entries[entry] = struct{}{}
 	})
 }
 
-func (g *group) Remove(call rpc.ServerCall, entry groups.BlessingPatternChunk, etag string) error {
-	return g.update(call, etag, func(gd *groupData) {
+func (g *group) Remove(call rpc.ServerCall, entry groups.BlessingPatternChunk, version string) error {
+	return g.update(call, version, func(gd *groupData) {
 		delete(gd.Entries, entry)
 	})
 }
 
 // TODO(sadovsky): Replace fake implementation with real implementation.
-func (g *group) Get(call rpc.ServerCall, req groups.GetRequest, reqEtag string) (res groups.GetResponse, etag string, err error) {
-	gd, etag, err := g.getInternal(call)
+func (g *group) Get(call rpc.ServerCall, req groups.GetRequest, reqVersion string) (res groups.GetResponse, version string, err error) {
+	gd, version, err := g.getInternal(call)
 	if err != nil {
 		return groups.GetResponse{}, "", err
 	}
-	return groups.GetResponse{Entries: gd.Entries}, etag, nil
+	return groups.GetResponse{Entries: gd.Entries}, version, nil
 }
 
 // TODO(sadovsky): Replace fake implementation with real implementation.
-func (g *group) Rest(call rpc.ServerCall, req groups.RestRequest, reqEtag string) (res groups.RestResponse, etag string, err error) {
-	_, etag, err = g.getInternal(call)
+func (g *group) Rest(call rpc.ServerCall, req groups.RestRequest, reqVersion string) (res groups.RestResponse, version string, err error) {
+	_, version, err = g.getInternal(call)
 	if err != nil {
 		return groups.RestResponse{}, "", err
 	}
-	return groups.RestResponse{}, etag, nil
+	return groups.RestResponse{}, version, nil
 }
 
-func (g *group) SetPermissions(call rpc.ServerCall, acl access.Permissions, etag string) error {
-	return g.update(call, etag, func(gd *groupData) {
+func (g *group) SetPermissions(call rpc.ServerCall, acl access.Permissions, version string) error {
+	return g.update(call, version, func(gd *groupData) {
 		gd.AccessList = acl
 	})
 }
 
-func (g *group) GetPermissions(call rpc.ServerCall) (acl access.Permissions, etag string, err error) {
-	gd, etag, err := g.getInternal(call)
+func (g *group) GetPermissions(call rpc.ServerCall) (acl access.Permissions, version string, err error) {
+	gd, version, err := g.getInternal(call)
 	if err != nil {
 		return nil, "", err
 	}
-	return gd.AccessList, etag, nil
+	return gd.AccessList, version, nil
 }
 
 ////////////////////////////////////////
@@ -136,8 +136,8 @@
 }
 
 // Returns a VDL-compatible error. Performs access check.
-func (g *group) getInternal(call rpc.ServerCall) (gd groupData, etag string, err error) {
-	v, etag, err := g.m.st.Get(g.name)
+func (g *group) getInternal(call rpc.ServerCall) (gd groupData, version string, err error) {
+	v, version, err := g.m.st.Get(g.name)
 	if err != nil {
 		if _, ok := err.(*ErrUnknownKey); ok {
 			// TODO(sadovsky): Return NoExist if appropriate.
@@ -152,39 +152,39 @@
 	if err := g.authorize(call, gd.AccessList); err != nil {
 		return groupData{}, "", err
 	}
-	return gd, etag, nil
+	return gd, version, nil
 }
 
 // Returns a VDL-compatible error. Performs access check.
-func (g *group) update(call rpc.ServerCall, etag string, fn func(gd *groupData)) error {
-	return g.readModifyWrite(call, etag, func(gd *groupData, etagSt string) error {
+func (g *group) update(call rpc.ServerCall, version string, fn func(gd *groupData)) error {
+	return g.readModifyWrite(call, version, func(gd *groupData, versionSt string) error {
 		fn(gd)
-		return g.m.st.Update(g.name, *gd, etagSt)
+		return g.m.st.Update(g.name, *gd, versionSt)
 	})
 }
 
 // Returns a VDL-compatible error. Performs access check.
 // fn should perform the "modify, write" part of "read, modify, write", and
 // should return a Store error.
-func (g *group) readModifyWrite(call rpc.ServerCall, etag string, fn func(gd *groupData, etagSt string) error) error {
+func (g *group) readModifyWrite(call rpc.ServerCall, version string, fn func(gd *groupData, versionSt string) error) error {
 	// Transaction retry loop.
 	for i := 0; i < 3; i++ {
-		gd, etagSt, err := g.getInternal(call)
+		gd, versionSt, err := g.getInternal(call)
 		if err != nil {
 			return err
 		}
 		// Fail early if possible.
-		if etag != "" && etag != etagSt {
-			return verror.NewErrBadEtag(call.Context())
+		if version != "" && version != versionSt {
+			return verror.NewErrBadVersion(call.Context())
 		}
-		if err := fn(&gd, etagSt); err != nil {
-			if err, ok := err.(*ErrBadEtag); ok {
-				// Retry on etag error if the original etag was empty.
-				if etag != "" {
-					return verror.NewErrBadEtag(call.Context())
+		if err := fn(&gd, versionSt); err != nil {
+			if err, ok := err.(*ErrBadVersion); ok {
+				// Retry on version error if the original version was empty.
+				if version != "" {
+					return verror.NewErrBadVersion(call.Context())
 				}
 			} else {
-				// Abort on non-etag error.
+				// Abort on non-version error.
 				return verror.New(verror.ErrInternal, call.Context(), err)
 			}
 		} else {
diff --git a/services/security/groups/server/manager.go b/services/groups/internal/server/manager.go
similarity index 100%
rename from services/security/groups/server/manager.go
rename to services/groups/internal/server/manager.go
diff --git a/services/security/groups/server/server_test.go b/services/groups/internal/server/server_test.go
similarity index 73%
rename from services/security/groups/server/server_test.go
rename to services/groups/internal/server/server_test.go
index fa308df..a01d355 100644
--- a/services/security/groups/server/server_test.go
+++ b/services/groups/internal/server/server_test.go
@@ -19,8 +19,8 @@
 	"v.io/x/lib/vlog"
 
 	_ "v.io/x/ref/profiles"
-	"v.io/x/ref/services/security/groups/memstore"
-	"v.io/x/ref/services/security/groups/server"
+	"v.io/x/ref/services/groups/internal/memstore"
+	"v.io/x/ref/services/groups/internal/server"
 	"v.io/x/ref/test/testutil"
 )
 
@@ -44,13 +44,13 @@
 	return res
 }
 
-func getEtagOrDie(g groups.GroupClientStub, ctx *context.T, t *testing.T) string {
-	_, etag, err := g.Get(ctx, groups.GetRequest{}, "")
+func getVersionOrDie(g groups.GroupClientStub, ctx *context.T, t *testing.T) string {
+	_, version, err := g.Get(ctx, groups.GetRequest{}, "")
 	if err != nil {
 		debug.PrintStack()
 		t.Fatal("Get failed: ", err)
 	}
-	return etag
+	return version
 }
 
 func bpc(chunk string) groups.BlessingPatternChunk {
@@ -91,7 +91,8 @@
 		vlog.Fatal("s.Listen() failed: ", err)
 	}
 
-	// TODO(sadovsky): Pass in an AccessList and test AccessList-checking in Group.Create().
+	// TODO(sadovsky): Pass in an AccessList and test AccessList-checking in
+	// Group.Create().
 	acl := access.Permissions{}
 	m := server.NewManager(memstore.New(), acl)
 
@@ -179,8 +180,8 @@
 		t.Fatal("Create should have failed")
 	}
 
-	// Create a group with an AccessList and a few entries, including some redundant
-	// ones.
+	// Create a group with an AccessList and a few entries, including some
+	// redundant ones.
 	g = groups.GroupClient(naming.JoinAddressName(serverName, "grpB"))
 	acl = access.Permissions{}
 	// Allow Admin and Read so that we can call GetPermissions and Get.
@@ -206,19 +207,19 @@
 	ctx, serverName, cleanup := setupOrDie()
 	defer cleanup()
 
-	// Create a group with a default AccessList and no entries, check that we can delete
-	// it.
+	// Create a group with a default AccessList and no entries, check that we can
+	// delete it.
 	g := groups.GroupClient(naming.JoinAddressName(serverName, "grpA"))
 	if err := g.Create(ctx, nil, nil); err != nil {
 		t.Fatal("Create failed: ", err)
 	}
-	// Delete with bad etag should fail.
-	if err := g.Delete(ctx, "20"); verror.ErrorID(err) != verror.ErrBadEtag.ID {
-		t.Fatal("Delete should have failed with etag error")
+	// Delete with bad version should fail.
+	if err := g.Delete(ctx, "20"); verror.ErrorID(err) != verror.ErrBadVersion.ID {
+		t.Fatal("Delete should have failed with version error")
 	}
-	// Delete with correct etag should succeed.
-	etag := getEtagOrDie(g, ctx, t)
-	if err := g.Delete(ctx, etag); err != nil {
+	// Delete with correct version should succeed.
+	version := getVersionOrDie(g, ctx, t)
+	if err := g.Delete(ctx, version); err != nil {
 		t.Fatal("Delete failed: ", err)
 	}
 	// Check that the group was actually deleted.
@@ -231,7 +232,7 @@
 	if err := g.Create(ctx, nil, bpcSlice("foo", "bar", "foo")); err != nil {
 		t.Fatal("Create failed: ", err)
 	}
-	// Delete with empty etag should succeed.
+	// Delete with empty version should succeed.
 	if err := g.Delete(ctx, ""); err != nil {
 		t.Fatal("Delete failed: ", err)
 	}
@@ -244,8 +245,8 @@
 		t.Fatal("Create failed: ", err)
 	}
 
-	// Create a group with an AccessList that disallows Delete(), check that Delete()
-	// fails.
+	// Create a group with an AccessList that disallows Delete(), check that
+	// Delete() fails.
 	g = groups.GroupClient(naming.JoinAddressName(serverName, "grpC"))
 	acl := access.Permissions{}
 	acl.Add(security.BlessingPattern("server/client"), string(access.Admin))
@@ -276,73 +277,75 @@
 	}
 
 	var aclBefore, aclAfter access.Permissions
-	var etagBefore, etagAfter string
+	var versionBefore, versionAfter string
 
-	getAccessListAndEtagOrDie := func() (access.Permissions, string) {
-		// Doesn't use getEtagOrDie since that requires access.Read permission.
-		acl, etag, err := g.GetPermissions(ctx)
+	getAccessListAndVersionOrDie := func() (access.Permissions, string) {
+		// Doesn't use getVersionOrDie since that requires access.Read permission.
+		acl, version, err := g.GetPermissions(ctx)
 		if err != nil {
 			debug.PrintStack()
 			t.Fatal("GetPermissions failed: ", err)
 		}
-		return acl, etag
+		return acl, version
 	}
 
-	// SetPermissions with bad etag should fail.
-	aclBefore, etagBefore = getAccessListAndEtagOrDie()
-	if err := g.SetPermissions(ctx, myacl, "20"); verror.ErrorID(err) != verror.ErrBadEtag.ID {
-		t.Fatal("SetPermissions should have failed with etag error")
+	// SetPermissions with bad version should fail.
+	aclBefore, versionBefore = getAccessListAndVersionOrDie()
+	if err := g.SetPermissions(ctx, myacl, "20"); verror.ErrorID(err) != verror.ErrBadVersion.ID {
+		t.Fatal("SetPermissions should have failed with version error")
 	}
-	// Since SetPermissions failed, the AccessList and etag should not have changed.
-	aclAfter, etagAfter = getAccessListAndEtagOrDie()
+	// Since SetPermissions failed, the AccessList and version should not have
+	// changed.
+	aclAfter, versionAfter = getAccessListAndVersionOrDie()
 	if !reflect.DeepEqual(aclBefore, aclAfter) {
 		t.Errorf("AccessLists do not match: want %v, got %v", aclBefore, aclAfter)
 	}
-	if etagBefore != etagAfter {
-		t.Errorf("Etags do not match: want %v, got %v", etagBefore, etagAfter)
+	if versionBefore != versionAfter {
+		t.Errorf("Versions do not match: want %v, got %v", versionBefore, versionAfter)
 	}
 
-	// SetPermissions with correct etag should succeed.
-	aclBefore, etagBefore = aclAfter, etagAfter
-	if err := g.SetPermissions(ctx, myacl, etagBefore); err != nil {
+	// SetPermissions with correct version should succeed.
+	aclBefore, versionBefore = aclAfter, versionAfter
+	if err := g.SetPermissions(ctx, myacl, versionBefore); err != nil {
 		t.Fatal("SetPermissions failed: ", err)
 	}
-	// Check that the AccessList and etag actually changed.
-	aclAfter, etagAfter = getAccessListAndEtagOrDie()
+	// Check that the AccessList and version actually changed.
+	aclAfter, versionAfter = getAccessListAndVersionOrDie()
 	if !reflect.DeepEqual(myacl, aclAfter) {
 		t.Errorf("AccessLists do not match: want %v, got %v", myacl, aclAfter)
 	}
-	if etagBefore == etagAfter {
-		t.Errorf("Etags should not match: %v", etagBefore)
+	if versionBefore == versionAfter {
+		t.Errorf("Versions should not match: %v", versionBefore)
 	}
 
-	// SetPermissions with empty etag should succeed.
-	aclBefore, etagBefore = aclAfter, etagAfter
+	// SetPermissions with empty version should succeed.
+	aclBefore, versionBefore = aclAfter, versionAfter
 	myacl.Add(security.BlessingPattern("server/client"), string(access.Read))
 	if err := g.SetPermissions(ctx, myacl, ""); err != nil {
 		t.Fatal("SetPermissions failed: ", err)
 	}
-	// Check that the AccessList and etag actually changed.
-	aclAfter, etagAfter = getAccessListAndEtagOrDie()
+	// Check that the AccessList and version actually changed.
+	aclAfter, versionAfter = getAccessListAndVersionOrDie()
 	if !reflect.DeepEqual(myacl, aclAfter) {
 		t.Errorf("AccessLists do not match: want %v, got %v", myacl, aclAfter)
 	}
-	if etagBefore == etagAfter {
-		t.Errorf("Etags should not match: %v", etagBefore)
+	if versionBefore == versionAfter {
+		t.Errorf("Versions should not match: %v", versionBefore)
 	}
 
-	// SetPermissions with unchanged AccessList should succeed, and etag should still change.
-	aclBefore, etagBefore = aclAfter, etagAfter
+	// SetPermissions with unchanged AccessList should succeed, and version should
+	// still change.
+	aclBefore, versionBefore = aclAfter, versionAfter
 	if err := g.SetPermissions(ctx, myacl, ""); err != nil {
 		t.Fatal("SetPermissions failed: ", err)
 	}
-	// Check that the AccessList did not change and the etag did change.
-	aclAfter, etagAfter = getAccessListAndEtagOrDie()
+	// Check that the AccessList did not change and the version did change.
+	aclAfter, versionAfter = getAccessListAndVersionOrDie()
 	if !reflect.DeepEqual(aclBefore, aclAfter) {
 		t.Errorf("AccessLists do not match: want %v, got %v", aclBefore, aclAfter)
 	}
-	if etagBefore == etagAfter {
-		t.Errorf("Etags should not match: %v", etagBefore)
+	if versionBefore == versionAfter {
+		t.Errorf("Versions should not match: %v", versionBefore)
 	}
 
 	// Take away our access. SetPermissions and GetPermissions should fail.
@@ -373,35 +376,35 @@
 		t.Errorf("Entries do not match: want %v, got %v", want, got)
 	}
 
-	var etagBefore, etagAfter string
-	etagBefore = getEtagOrDie(g, ctx, t)
-	// Add with bad etag should fail.
-	if err := g.Add(ctx, bpc("foo"), "20"); verror.ErrorID(err) != verror.ErrBadEtag.ID {
-		t.Fatal("Add should have failed with etag error")
+	var versionBefore, versionAfter string
+	versionBefore = getVersionOrDie(g, ctx, t)
+	// Add with bad version should fail.
+	if err := g.Add(ctx, bpc("foo"), "20"); verror.ErrorID(err) != verror.ErrBadVersion.ID {
+		t.Fatal("Add should have failed with version error")
 	}
-	// Etag should not have changed.
-	etagAfter = getEtagOrDie(g, ctx, t)
-	if etagBefore != etagAfter {
-		t.Errorf("Etags do not match: want %v, got %v", etagBefore, etagAfter)
+	// Version should not have changed.
+	versionAfter = getVersionOrDie(g, ctx, t)
+	if versionBefore != versionAfter {
+		t.Errorf("Versions do not match: want %v, got %v", versionBefore, versionAfter)
 	}
 
-	// Add an entry, verify it was added and the etag changed.
-	etagBefore = etagAfter
-	if err := g.Add(ctx, bpc("foo"), etagBefore); err != nil {
+	// Add an entry, verify it was added and the version changed.
+	versionBefore = versionAfter
+	if err := g.Add(ctx, bpc("foo"), versionBefore); err != nil {
 		t.Fatal("Add failed: ", err)
 	}
 	want, got = bpcSet("foo"), getEntriesOrDie(g, ctx, t)
 	if !entriesEqual(want, got) {
 		t.Errorf("Entries do not match: want %v, got %v", want, got)
 	}
-	etagAfter = getEtagOrDie(g, ctx, t)
-	if etagBefore == etagAfter {
-		t.Errorf("Etags should not match: %v", etagBefore)
+	versionAfter = getVersionOrDie(g, ctx, t)
+	if versionBefore == versionAfter {
+		t.Errorf("Versions should not match: %v", versionBefore)
 	}
 
-	// Add another entry, verify it was added and the etag changed.
-	etagBefore = etagAfter
-	// Add with empty etag should succeed.
+	// Add another entry, verify it was added and the version changed.
+	versionBefore = versionAfter
+	// Add with empty version should succeed.
 	if err := g.Add(ctx, bpc("bar"), ""); err != nil {
 		t.Fatal("Add failed: ", err)
 	}
@@ -409,27 +412,28 @@
 	if !entriesEqual(want, got) {
 		t.Errorf("Entries do not match: want %v, got %v", want, got)
 	}
-	etagAfter = getEtagOrDie(g, ctx, t)
-	if etagBefore == etagAfter {
-		t.Errorf("Etags should not match: %v", etagBefore)
+	versionAfter = getVersionOrDie(g, ctx, t)
+	if versionBefore == versionAfter {
+		t.Errorf("Versions should not match: %v", versionBefore)
 	}
 
-	// Add "bar" again, verify entries are still ["foo", "bar"] and the etag
+	// Add "bar" again, verify entries are still ["foo", "bar"] and the version
 	// changed.
-	etagBefore = etagAfter
-	if err := g.Add(ctx, bpc("bar"), etagBefore); err != nil {
+	versionBefore = versionAfter
+	if err := g.Add(ctx, bpc("bar"), versionBefore); err != nil {
 		t.Fatal("Add failed: ", err)
 	}
 	want, got = bpcSet("foo", "bar"), getEntriesOrDie(g, ctx, t)
 	if !entriesEqual(want, got) {
 		t.Errorf("Entries do not match: want %v, got %v", want, got)
 	}
-	etagAfter = getEtagOrDie(g, ctx, t)
-	if etagBefore == etagAfter {
-		t.Errorf("Etags should not match: %v", etagBefore)
+	versionAfter = getVersionOrDie(g, ctx, t)
+	if versionBefore == versionAfter {
+		t.Errorf("Versions should not match: %v", versionBefore)
 	}
 
-	// Create a group with an AccessList that disallows Add(), check that Add() fails.
+	// Create a group with an AccessList that disallows Add(), check that Add()
+	// fails.
 	g = groups.GroupClient(naming.JoinAddressName(serverName, "grpB"))
 	acl := access.Permissions{}
 	acl.Add(security.BlessingPattern("server/client"), string(access.Admin))
@@ -458,35 +462,35 @@
 		t.Errorf("Entries do not match: want %v, got %v", want, got)
 	}
 
-	var etagBefore, etagAfter string
-	etagBefore = getEtagOrDie(g, ctx, t)
-	// Remove with bad etag should fail.
-	if err := g.Remove(ctx, bpc("foo"), "20"); verror.ErrorID(err) != verror.ErrBadEtag.ID {
-		t.Fatal("Remove should have failed with etag error")
+	var versionBefore, versionAfter string
+	versionBefore = getVersionOrDie(g, ctx, t)
+	// Remove with bad version should fail.
+	if err := g.Remove(ctx, bpc("foo"), "20"); verror.ErrorID(err) != verror.ErrBadVersion.ID {
+		t.Fatal("Remove should have failed with version error")
 	}
-	// Etag should not have changed.
-	etagAfter = getEtagOrDie(g, ctx, t)
-	if etagBefore != etagAfter {
-		t.Errorf("Etags do not match: want %v, got %v", etagBefore, etagAfter)
+	// Version should not have changed.
+	versionAfter = getVersionOrDie(g, ctx, t)
+	if versionBefore != versionAfter {
+		t.Errorf("Versions do not match: want %v, got %v", versionBefore, versionAfter)
 	}
 
-	// Remove an entry, verify it was removed and the etag changed.
-	etagBefore = etagAfter
-	if err := g.Remove(ctx, bpc("foo"), etagBefore); err != nil {
+	// Remove an entry, verify it was removed and the version changed.
+	versionBefore = versionAfter
+	if err := g.Remove(ctx, bpc("foo"), versionBefore); err != nil {
 		t.Fatal("Remove failed: ", err)
 	}
 	want, got = bpcSet("bar"), getEntriesOrDie(g, ctx, t)
 	if !entriesEqual(want, got) {
 		t.Errorf("Entries do not match: want %v, got %v", want, got)
 	}
-	etagAfter = getEtagOrDie(g, ctx, t)
-	if etagBefore == etagAfter {
-		t.Errorf("Etags should not match: %v", etagBefore)
+	versionAfter = getVersionOrDie(g, ctx, t)
+	if versionBefore == versionAfter {
+		t.Errorf("Versions should not match: %v", versionBefore)
 	}
 
-	// Remove another entry, verify it was removed and the etag changed.
-	etagBefore = etagAfter
-	// Remove with empty etag should succeed.
+	// Remove another entry, verify it was removed and the version changed.
+	versionBefore = versionAfter
+	// Remove with empty version should succeed.
 	if err := g.Remove(ctx, bpc("bar"), ""); err != nil {
 		t.Fatal("Remove failed: ", err)
 	}
@@ -494,27 +498,27 @@
 	if !entriesEqual(want, got) {
 		t.Errorf("Entries do not match: want %v, got %v", want, got)
 	}
-	etagAfter = getEtagOrDie(g, ctx, t)
-	if etagBefore == etagAfter {
-		t.Errorf("Etags should not match: %v", etagBefore)
+	versionAfter = getVersionOrDie(g, ctx, t)
+	if versionBefore == versionAfter {
+		t.Errorf("Versions should not match: %v", versionBefore)
 	}
 
-	// Remove "bar" again, verify entries are still [] and the etag changed.
-	etagBefore = etagAfter
-	if err := g.Remove(ctx, bpc("bar"), etagBefore); err != nil {
+	// Remove "bar" again, verify entries are still [] and the version changed.
+	versionBefore = versionAfter
+	if err := g.Remove(ctx, bpc("bar"), versionBefore); err != nil {
 		t.Fatal("Remove failed: ", err)
 	}
 	want, got = bpcSet(), getEntriesOrDie(g, ctx, t)
 	if !entriesEqual(want, got) {
 		t.Errorf("Entries do not match: want %v, got %v", want, got)
 	}
-	etagAfter = getEtagOrDie(g, ctx, t)
-	if etagBefore == etagAfter {
-		t.Errorf("Etags should not match: %v", etagBefore)
+	versionAfter = getVersionOrDie(g, ctx, t)
+	if versionBefore == versionAfter {
+		t.Errorf("Versions should not match: %v", versionBefore)
 	}
 
-	// Create a group with an AccessList that disallows Remove(), check that Remove()
-	// fails.
+	// Create a group with an AccessList that disallows Remove(), check that
+	// Remove() fails.
 	g = groups.GroupClient(naming.JoinAddressName(serverName, "grpB"))
 	acl := access.Permissions{}
 	acl.Add(security.BlessingPattern("server/client"), string(access.Admin))
diff --git a/services/groups/internal/server/store.go b/services/groups/internal/server/store.go
new file mode 100644
index 0000000..83f605e
--- /dev/null
+++ b/services/groups/internal/server/store.go
@@ -0,0 +1,53 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package server
+
+// Store is a key-value store that uses versions for optimistic concurrency
+// control. The versions passed to Update and Delete must come from Get. If in
+// the meantime some client has called Update or Delete on the same key, the
+// version will be stale and the method call will fail.
+//
+// Note, this API disallows empty versions to simplify implementation. The group
+// server is the only client of this API and always specifies versions.
+type Store interface {
+	// Fails if the given key is unknown (ErrUnknownKey).
+	Get(k string) (v interface{}, version string, err error)
+
+	// Fails if an entry already exists for the given key (ErrKeyAlreadyExists).
+	Insert(k string, v interface{}) error
+
+	// Fails if the given key is unknown (ErrUnknownKey).
+	// Fails if version doesn't match (ErrBadVersion).
+	Update(k string, v interface{}, version string) error
+
+	// Fails if the given key is unknown (ErrUnknownKey).
+	// Fails if version doesn't match (ErrBadVersion).
+	Delete(k string, version string) error
+}
+
+////////////////////////////////////////
+// Store error types
+
+type ErrUnknownKey struct {
+	Key string
+}
+
+func (err *ErrUnknownKey) Error() string {
+	return "unknown key: " + err.Key
+}
+
+type ErrKeyAlreadyExists struct {
+	Key string
+}
+
+func (err *ErrKeyAlreadyExists) Error() string {
+	return "key already exists: " + err.Key
+}
+
+type ErrBadVersion struct{}
+
+func (err *ErrBadVersion) Error() string {
+	return "version is out of date"
+}
diff --git a/services/security/groups/server/types.vdl b/services/groups/internal/server/types.vdl
similarity index 100%
rename from services/security/groups/server/types.vdl
rename to services/groups/internal/server/types.vdl
diff --git a/services/security/groups/server/types.vdl.go b/services/groups/internal/server/types.vdl.go
similarity index 91%
rename from services/security/groups/server/types.vdl.go
rename to services/groups/internal/server/types.vdl.go
index b0ffa4e..0a2eb83 100644
--- a/services/security/groups/server/types.vdl.go
+++ b/services/groups/internal/server/types.vdl.go
@@ -24,7 +24,7 @@
 }
 
 func (groupData) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/security/groups/server.groupData"
+	Name string "v.io/x/ref/services/groups/internal/server.groupData"
 }) {
 }
 
diff --git a/services/security/groups/server/v23_internal_test.go b/services/groups/internal/server/v23_internal_test.go
similarity index 100%
rename from services/security/groups/server/v23_internal_test.go
rename to services/groups/internal/server/v23_internal_test.go
diff --git a/services/identity/identityd/identityd_v23_test.go b/services/identity/identityd/identityd_v23_test.go
index 36e9b28..474c7b2 100644
--- a/services/identity/identityd/identityd_v23_test.go
+++ b/services/identity/identityd/identityd_v23_test.go
@@ -69,7 +69,7 @@
 	// In production, the two share a common root certificate and thus
 	// recognize each other. The same is done here, i.Principal()
 	// wields the root key.
-	identityd := i.BuildV23Pkg("v.io/x/ref/services/identity/identityd_test")
+	identityd := i.BuildV23Pkg("v.io/x/ref/services/identity/internal/identityd_test")
 	creds, err := i.Shell().NewChildCredentials("identityd")
 	if err != nil {
 		i.Fatal(err)
diff --git a/services/identity/modules/test_identityd.go b/services/identity/identitylib/test_identityd.go
similarity index 99%
rename from services/identity/modules/test_identityd.go
rename to services/identity/identitylib/test_identityd.go
index 724445a..6287264 100644
--- a/services/identity/modules/test_identityd.go
+++ b/services/identity/identitylib/test_identityd.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package core
+package identitylib
 
 import (
 	"flag"
diff --git a/services/identity/internal/auditor/blessing_auditor.go b/services/identity/internal/auditor/blessing_auditor.go
index 22670a2..1c5b274 100644
--- a/services/identity/internal/auditor/blessing_auditor.go
+++ b/services/identity/internal/auditor/blessing_auditor.go
@@ -12,7 +12,7 @@
 
 	"v.io/v23/security"
 	"v.io/v23/vom"
-	"v.io/x/ref/security/audit"
+	"v.io/x/ref/lib/security/audit"
 )
 
 // BlessingLogReader provides the Read method to read audit logs.
diff --git a/services/identity/internal/auditor/blessing_auditor_test.go b/services/identity/internal/auditor/blessing_auditor_test.go
index ed15f90..5813382 100644
--- a/services/identity/internal/auditor/blessing_auditor_test.go
+++ b/services/identity/internal/auditor/blessing_auditor_test.go
@@ -10,8 +10,8 @@
 	"time"
 
 	"v.io/v23/security"
-	vsecurity "v.io/x/ref/security"
-	"v.io/x/ref/security/audit"
+	vsecurity "v.io/x/ref/lib/security"
+	"v.io/x/ref/lib/security/audit"
 )
 
 func TestBlessingAuditor(t *testing.T) {
diff --git a/services/identity/internal/auditor/mock_auditor.go b/services/identity/internal/auditor/mock_auditor.go
index 9530af0..9473b22 100644
--- a/services/identity/internal/auditor/mock_auditor.go
+++ b/services/identity/internal/auditor/mock_auditor.go
@@ -6,7 +6,8 @@
 
 import (
 	"reflect"
-	"v.io/x/ref/security/audit"
+
+	"v.io/x/ref/lib/security/audit"
 )
 
 func NewMockBlessingAuditor() (audit.Auditor, BlessingLogReader) {
diff --git a/services/identity/identityd_test/main.go b/services/identity/internal/identityd_test/main.go
similarity index 100%
rename from services/identity/identityd_test/main.go
rename to services/identity/internal/identityd_test/main.go
diff --git a/services/identity/internal/revocation/revocation_test.go b/services/identity/internal/revocation/revocation_test.go
index 463f12d..ce54d9b 100644
--- a/services/identity/internal/revocation/revocation_test.go
+++ b/services/identity/internal/revocation/revocation_test.go
@@ -8,8 +8,8 @@
 	"testing"
 
 	_ "v.io/x/ref/profiles"
-	services "v.io/x/ref/services/security"
-	"v.io/x/ref/services/security/discharger"
+	"v.io/x/ref/services/discharger"
+	"v.io/x/ref/services/discharger/dischargerlib"
 	"v.io/x/ref/test"
 
 	"v.io/v23"
@@ -29,7 +29,7 @@
 	if err != nil {
 		t.Fatalf("dischargerServer.Listen failed: %v", err)
 	}
-	dischargerServiceStub := services.DischargerServer(discharger.NewDischarger())
+	dischargerServiceStub := discharger.DischargerServer(dischargerlib.NewDischarger())
 	if err := dischargerServer.Serve("", dischargerServiceStub, nil); err != nil {
 		t.Fatalf("dischargerServer.Serve revoker: %s", err)
 	}
@@ -48,7 +48,7 @@
 	dcKey, dc, revoker, closeFunc := revokerSetup(t, ctx)
 	defer closeFunc()
 
-	discharger := services.DischargerClient(dc)
+	discharger := discharger.DischargerClient(dc)
 	caveat, err := revoker.NewCaveat(dcKey, dc)
 	if err != nil {
 		t.Fatalf("failed to create revocation caveat: %s", err)
diff --git a/services/identity/internal/server/identityd.go b/services/identity/internal/server/identityd.go
index 089a765..6797c39 100644
--- a/services/identity/internal/server/identityd.go
+++ b/services/identity/internal/server/identityd.go
@@ -24,9 +24,10 @@
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
-
+	"v.io/x/ref/lib/security/audit"
 	"v.io/x/ref/lib/signals"
-	"v.io/x/ref/security/audit"
+	"v.io/x/ref/services/discharger"
+	"v.io/x/ref/services/discharger/dischargerlib"
 	"v.io/x/ref/services/identity/internal/auditor"
 	"v.io/x/ref/services/identity/internal/blesser"
 	"v.io/x/ref/services/identity/internal/caveats"
@@ -35,8 +36,6 @@
 	"v.io/x/ref/services/identity/internal/revocation"
 	"v.io/x/ref/services/identity/internal/templates"
 	"v.io/x/ref/services/identity/internal/util"
-	services "v.io/x/ref/services/security"
-	"v.io/x/ref/services/security/discharger"
 )
 
 const (
@@ -242,7 +241,7 @@
 func newDispatcher(macaroonKey []byte, blesserParams blesser.OAuthBlesserParams) rpc.Dispatcher {
 	d := dispatcher(map[string]interface{}{
 		macaroonService:     blesser.NewMacaroonBlesserServer(macaroonKey),
-		dischargerService:   services.DischargerServer(discharger.NewDischarger()),
+		dischargerService:   discharger.DischargerServer(dischargerlib.NewDischarger()),
 		oauthBlesserService: blesser.NewOAuthBlesserServer(blesserParams),
 	})
 	// Set up the glob invoker.
diff --git a/services/mgmt/lib/acls/aclaccess.go b/services/internal/acls/aclaccess.go
similarity index 72%
rename from services/mgmt/lib/acls/aclaccess.go
rename to services/internal/acls/aclaccess.go
index 7d11555..9be795e 100644
--- a/services/mgmt/lib/acls/aclaccess.go
+++ b/services/internal/acls/aclaccess.go
@@ -14,16 +14,16 @@
 	"path/filepath"
 	"sync"
 
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/security/access"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
-
-	"v.io/x/ref/security/serialization"
+	"v.io/x/ref/lib/security/serialization"
 )
 
 const (
-	pkgPath = "v.io/x/ref/services/mgmt/lib/acls"
+	pkgPath = "v.io/x/ref/services/internal/acls"
 	sigName = "signature"
 	aclName = "data"
 )
@@ -97,27 +97,26 @@
 		vlog.Errorf("ReadPermissions(%s) failed: %v", aclpath, err)
 		return nil, "", err
 	}
-	etag, err := ComputeEtag(acl)
+	version, err := ComputeVersion(acl)
 	if err != nil {
-		vlog.Errorf("acls.ComputeEtag failed: %v", err)
+		vlog.Errorf("acls.ComputeVersion failed: %v", err)
 		return nil, "", err
 	}
-	return acl, etag, nil
+	return acl, version, nil
 }
 
-// Set writes the specified Permissions to the provided
-// directory with enforcement of etag synchronization mechanism and
-// locking.
-func (store PathStore) Set(dir string, acl access.Permissions, etag string) error {
+// Set writes the specified Permissions to the provided directory with
+// enforcement of version synchronization mechanism and locking.
+func (store PathStore) Set(dir string, acl access.Permissions, version string) error {
 	aclpath := filepath.Join(dir, aclName)
 	sigpath := filepath.Join(dir, sigName)
 	defer store.lockPath(dir)()
-	_, oetag, err := getCore(store.principal, aclpath, sigpath)
+	_, oversion, err := getCore(store.principal, aclpath, sigpath)
 	if err != nil && !os.IsNotExist(err) {
 		return verror.New(ErrOperationFailed, nil)
 	}
-	if len(etag) > 0 && etag != oetag {
-		return verror.NewErrBadEtag(nil)
+	if len(version) > 0 && version != oversion {
+		return verror.NewErrBadVersion(nil)
 	}
 	return write(store.principal, aclpath, sigpath, dir, acl)
 }
@@ -174,3 +173,42 @@
 	}
 	return tam, false, nil
 }
+
+// PrefixPatterns creates a pattern containing all of the prefix patterns of
+// the provided blessings.
+func PrefixPatterns(blessings []string) []security.BlessingPattern {
+	var patterns []security.BlessingPattern
+	for _, b := range blessings {
+		patterns = append(patterns, security.BlessingPattern(b).PrefixPatterns()...)
+	}
+	return patterns
+}
+
+// PermissionsForBlessings creates the  Permissions list  that should be used
+// with a newly created object.
+func PermissionsForBlessings(blessings []string) access.Permissions {
+	tam := make(access.Permissions)
+
+	// Add the invoker's blessings and all its prefixes.
+	for _, p := range PrefixPatterns(blessings) {
+		for _, tag := range access.AllTypicalTags() {
+			tam.Add(p, string(tag))
+		}
+	}
+	return tam
+}
+
+// NilAuthPermissions creates an AccessList that mimics the default
+// authorization policy (i.e., the AccessList is matched by all blessings
+// that are either extensions of one of the local blessings or can be
+// extended to form one of the local blessings.)
+func NilAuthPermissions(call rpc.ServerCall) access.Permissions {
+	tam := make(access.Permissions)
+	lb := security.LocalBlessingNames(call.Context())
+	for _, p := range PrefixPatterns(lb) {
+		for _, tag := range access.AllTypicalTags() {
+			tam.Add(p, string(tag))
+		}
+	}
+	return tam
+}
diff --git a/services/mgmt/lib/acls/hierarchical_authorizer.go b/services/internal/acls/hierarchical_authorizer.go
similarity index 100%
rename from services/mgmt/lib/acls/hierarchical_authorizer.go
rename to services/internal/acls/hierarchical_authorizer.go
diff --git a/services/mgmt/lib/acls/etag.go b/services/internal/acls/version.go
similarity index 66%
rename from services/mgmt/lib/acls/etag.go
rename to services/internal/acls/version.go
index 50d84bf..4b8839a 100644
--- a/services/mgmt/lib/acls/etag.go
+++ b/services/internal/acls/version.go
@@ -14,16 +14,16 @@
 	"v.io/v23/security/access"
 )
 
-// ComputeEtag produces the tag value returned by access.GetPermissions() (per
-// v.io/v23/security/access/service.vdl) that GetPermissions()/SetPermissions()
+// ComputeVersion produces the tag value returned by access.GetPermissions()
+// (per v23/services/permissions/service.vdl) that GetPermissions/SetPermissions
 // use to determine if the AccessLists have been asynchronously modified.
-func ComputeEtag(acl access.Permissions) (string, error) {
+func ComputeVersion(acl access.Permissions) (string, error) {
 	b := new(bytes.Buffer)
 	if err := acl.WriteTo(b); err != nil {
 		return "", err
 	}
 
 	md5hash := md5.Sum(b.Bytes())
-	etag := hex.EncodeToString(md5hash[:])
-	return etag, nil
+	version := hex.EncodeToString(md5hash[:])
+	return version, nil
 }
diff --git a/services/mgmt/lib/fs/only_for_test.go b/services/internal/fs/only_for_test.go
similarity index 100%
rename from services/mgmt/lib/fs/only_for_test.go
rename to services/internal/fs/only_for_test.go
diff --git a/services/mgmt/lib/fs/simplestore.go b/services/internal/fs/simplestore.go
similarity index 99%
rename from services/mgmt/lib/fs/simplestore.go
rename to services/internal/fs/simplestore.go
index 7d9c1c8..d51cca1 100644
--- a/services/mgmt/lib/fs/simplestore.go
+++ b/services/internal/fs/simplestore.go
@@ -27,7 +27,7 @@
 // TODO(rjkroege@google.com) Switch Memstore to the mid-August 2014
 // style store API.
 
-const pkgPath = "v.io/x/ref/services/mgmt/lib/fs"
+const pkgPath = "v.io/x/ref/services/internal/fs"
 
 // Errors
 var (
diff --git a/services/mgmt/lib/fs/simplestore_test.go b/services/internal/fs/simplestore_test.go
similarity index 99%
rename from services/mgmt/lib/fs/simplestore_test.go
rename to services/internal/fs/simplestore_test.go
index a929596..0960235 100644
--- a/services/mgmt/lib/fs/simplestore_test.go
+++ b/services/internal/fs/simplestore_test.go
@@ -14,7 +14,7 @@
 	"v.io/v23/naming"
 	"v.io/v23/services/application"
 	"v.io/v23/verror"
-	"v.io/x/ref/services/mgmt/lib/fs"
+	"v.io/x/ref/services/internal/fs"
 	_ "v.io/x/ref/services/profile"
 )
 
diff --git a/services/mgmt/lib/packages/packages.go b/services/internal/packages/packages.go
similarity index 98%
rename from services/mgmt/lib/packages/packages.go
rename to services/internal/packages/packages.go
index 2522a04..3f9af83 100644
--- a/services/mgmt/lib/packages/packages.go
+++ b/services/internal/packages/packages.go
@@ -38,7 +38,7 @@
 	".tar.bz2": repository.MediaInfo{Type: "application/x-tar", Encoding: "bzip2"},
 }
 
-const pkgPath = "v.io/x/ref/services/mgmt/lib/packages"
+const pkgPath = "v.io/x/ref/services/internal/packages"
 
 var (
 	errBadMediaType    = verror.Register(pkgPath+".errBadMediaType", verror.NoRetry, "{1:}{2:} unsupported media type{:_}")
diff --git a/services/mgmt/lib/packages/packages_test.go b/services/internal/packages/packages_test.go
similarity index 99%
rename from services/mgmt/lib/packages/packages_test.go
rename to services/internal/packages/packages_test.go
index 43a062d..a6b130c 100644
--- a/services/mgmt/lib/packages/packages_test.go
+++ b/services/internal/packages/packages_test.go
@@ -18,7 +18,7 @@
 
 	"v.io/v23/services/repository"
 
-	"v.io/x/ref/services/mgmt/lib/packages"
+	"v.io/x/ref/services/internal/packages"
 )
 
 func TestInstall(t *testing.T) {
diff --git a/services/mgmt/lib/testutil/modules.go b/services/internal/servicetest/modules.go
similarity index 96%
rename from services/mgmt/lib/testutil/modules.go
rename to services/internal/servicetest/modules.go
index 9fa84fc..9883ebc 100644
--- a/services/mgmt/lib/testutil/modules.go
+++ b/services/internal/servicetest/modules.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package testutil
+package servicetest
 
 import (
 	"fmt"
@@ -21,7 +21,7 @@
 	"v.io/x/lib/vlog"
 
 	"v.io/x/ref/envvar"
-	mounttable "v.io/x/ref/services/mounttable/lib"
+	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test/modules"
 	"v.io/x/ref/test/testutil"
 )
@@ -47,9 +47,9 @@
 	if err != nil {
 		return fmt.Errorf("root failed: %v", err)
 	}
-	mt, err := mounttable.NewMountTableDispatcher("")
+	mt, err := mounttablelib.NewMountTableDispatcher("")
 	if err != nil {
-		return fmt.Errorf("mounttable.NewMountTableDispatcher failed: %s", err)
+		return fmt.Errorf("mounttablelib.NewMountTableDispatcher failed: %s", err)
 	}
 	eps, err := server.Listen(lspec)
 	if err != nil {
diff --git a/services/mgmt/lib/testutil/timeouts.go b/services/internal/servicetest/timeouts.go
similarity index 93%
rename from services/mgmt/lib/testutil/timeouts.go
rename to services/internal/servicetest/timeouts.go
index 38888a4..bae8ff7 100644
--- a/services/mgmt/lib/testutil/timeouts.go
+++ b/services/internal/servicetest/timeouts.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package testutil
+package servicetest
 
 import (
 	"time"
diff --git a/services/mgmt/suidhelper/impl/flag/flag.go b/services/mgmt/suidhelper/impl/flag/flag.go
deleted file mode 100644
index ee06320..0000000
--- a/services/mgmt/suidhelper/impl/flag/flag.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package flag provides flag definitions for the suidhelper package.
-//
-// It does NOT depend on any packages outside the Go standard library.
-// This allows v.io/x/ref/lib/test to depend on this
-// package, thereby ensuring that the suidhelper flags are defined
-// before the flag.Parse call in testutil.init is made.
-//
-// This is a hack! This file should go away once testutil.init
-// is changed to not parse flags in init().
-// TODO(cnicolaou,ashankar): See above!
-package flag
-
-import "flag"
-
-var (
-	Username, Workspace, LogDir, Run, ProgName *string
-	MinimumUid                                 *int64
-	Remove, Dryrun                             *bool
-)
-
-func init() {
-	SetupFlags(flag.CommandLine)
-}
-
-func SetupFlags(fs *flag.FlagSet) {
-	Username = fs.String("username", "", "The UNIX user name used for the other functions of this tool.")
-	Workspace = fs.String("workspace", "", "Path to the application's workspace directory.")
-	LogDir = fs.String("logdir", "", "Path to the log directory.")
-	Run = fs.String("run", "", "Path to the application to exec.")
-	ProgName = fs.String("progname", "unnamed_app", "Visible name of the application, used in argv[0]")
-	MinimumUid = fs.Int64("minuid", uidThreshold, "UIDs cannot be less than this number.")
-	Remove = fs.Bool("rm", false, "Remove the file trees given as command-line arguments.")
-	Dryrun = fs.Bool("dryrun", false, "Elides root-requiring systemcalls.")
-}
-
-const uidThreshold = 501
diff --git a/services/mounttable/lib/v23_internal_test.go b/services/mounttable/lib/v23_internal_test.go
deleted file mode 100644
index 8b6b541..0000000
--- a/services/mounttable/lib/v23_internal_test.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This file was auto-generated via go generate.
-// DO NOT UPDATE MANUALLY
-package mounttable
-
-import "testing"
-import "os"
-
-import "v.io/x/ref/test"
-
-func TestMain(m *testing.M) {
-	test.Init()
-	os.Exit(m.Run())
-}
diff --git a/services/mounttable/mounttabled/mounttable.go b/services/mounttable/mounttabled/mounttable.go
index 0318179..d2afd5a 100644
--- a/services/mounttable/mounttabled/mounttable.go
+++ b/services/mounttable/mounttabled/mounttable.go
@@ -15,7 +15,7 @@
 
 	"v.io/x/ref/lib/signals"
 	_ "v.io/x/ref/profiles/roaming"
-	mounttable "v.io/x/ref/services/mounttable/lib"
+	"v.io/x/ref/services/mounttable/mounttablelib"
 )
 
 var (
@@ -28,9 +28,9 @@
 	ctx, shutdown := v23.Init()
 	defer shutdown()
 
-	name, stop, err := mounttable.StartServers(ctx, v23.GetListenSpec(ctx), *mountName, *nhName, *aclFile)
+	name, stop, err := mounttablelib.StartServers(ctx, v23.GetListenSpec(ctx), *mountName, *nhName, *aclFile)
 	if err != nil {
-		vlog.Errorf("mounttable.StartServers failed: %v", err)
+		vlog.Errorf("mounttablelib.StartServers failed: %v", err)
 		os.Exit(1)
 	}
 	defer stop()
diff --git a/services/mounttable/lib/collection_test_interface.vdl b/services/mounttable/mounttablelib/collection_test_interface.vdl
similarity index 96%
rename from services/mounttable/lib/collection_test_interface.vdl
rename to services/mounttable/mounttablelib/collection_test_interface.vdl
index 876164e..2795079 100644
--- a/services/mounttable/lib/collection_test_interface.vdl
+++ b/services/mounttable/mounttablelib/collection_test_interface.vdl
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package mounttable
+package mounttablelib
 
 type Collection interface {
 	// Export sets the value for a name.  Overwrite controls the behavior when
diff --git a/services/mounttable/lib/collection_test_interface.vdl.go b/services/mounttable/mounttablelib/collection_test_interface.vdl.go
similarity index 98%
rename from services/mounttable/lib/collection_test_interface.vdl.go
rename to services/mounttable/mounttablelib/collection_test_interface.vdl.go
index 71b5369..ba3f3ed 100644
--- a/services/mounttable/lib/collection_test_interface.vdl.go
+++ b/services/mounttable/mounttablelib/collection_test_interface.vdl.go
@@ -5,7 +5,7 @@
 // This file was auto-generated by the vanadium vdl tool.
 // Source: collection_test_interface.vdl
 
-package mounttable
+package mounttablelib
 
 import (
 	// VDL system imports
@@ -130,7 +130,7 @@
 // descCollection hides the desc to keep godoc clean.
 var descCollection = rpc.InterfaceDesc{
 	Name:    "Collection",
-	PkgPath: "v.io/x/ref/services/mounttable/lib",
+	PkgPath: "v.io/x/ref/services/mounttable/mounttablelib",
 	Methods: []rpc.MethodDesc{
 		{
 			Name: "Export",
diff --git a/services/mounttable/lib/collectionserver_test.go b/services/mounttable/mounttablelib/collectionserver_test.go
similarity index 98%
rename from services/mounttable/lib/collectionserver_test.go
rename to services/mounttable/mounttablelib/collectionserver_test.go
index c803fc1..c3cada7 100644
--- a/services/mounttable/lib/collectionserver_test.go
+++ b/services/mounttable/mounttablelib/collectionserver_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package mounttable
+package mounttablelib
 
 import (
 	"sync"
diff --git a/services/mounttable/lib/mounttable.go b/services/mounttable/mounttablelib/mounttable.go
similarity index 98%
rename from services/mounttable/lib/mounttable.go
rename to services/mounttable/mounttablelib/mounttable.go
index f4e059f..6e1c19d 100644
--- a/services/mounttable/lib/mounttable.go
+++ b/services/mounttable/mounttablelib/mounttable.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package mounttable
+package mounttablelib
 
 import (
 	"encoding/json"
@@ -25,7 +25,7 @@
 	"v.io/x/lib/vlog"
 )
 
-const pkgPath = "v.io/x/ref/services/mounttable/lib"
+const pkgPath = "v.io/x/ref/services/mounttable/mounttablelib"
 
 var (
 	errMalformedAddress = verror.Register(pkgPath+".errMalformedAddress", verror.NoRetry, "{1:}{2:} malformed address {3} for mounted server {4}{:_}")
@@ -733,7 +733,7 @@
 	ch <- naming.GlobReplyEntry{naming.MountEntry{Name: "", Servers: servers}}
 }
 
-func (ms *mountContext) SetPermissions(call rpc.ServerCall, tam access.Permissions, etag string) error {
+func (ms *mountContext) SetPermissions(call rpc.ServerCall, tam access.Permissions, version string) error {
 	vlog.VI(2).Infof("SetPermissions %q", ms.name)
 	mt := ms.mt
 
@@ -748,7 +748,7 @@
 	}
 	n.parent.Unlock()
 	defer n.Unlock()
-	n.acls, err = n.acls.Set(etag, tam)
+	n.acls, err = n.acls.Set(version, tam)
 	if err == nil {
 		n.explicitAccessLists = true
 	}
@@ -769,6 +769,6 @@
 	}
 	n.parent.Unlock()
 	defer n.Unlock()
-	etag, tam := n.acls.Get()
-	return tam, etag, nil
+	version, tam := n.acls.Get()
+	return tam, version, nil
 }
diff --git a/services/mounttable/lib/mounttable_test.go b/services/mounttable/mounttablelib/mounttable_test.go
similarity index 97%
rename from services/mounttable/lib/mounttable_test.go
rename to services/mounttable/mounttablelib/mounttable_test.go
index a156f10..300e997 100644
--- a/services/mounttable/lib/mounttable_test.go
+++ b/services/mounttable/mounttablelib/mounttable_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package mounttable
+package mounttablelib
 
 import (
 	"errors"
@@ -72,7 +72,7 @@
 	}
 }
 
-func doGetPermissions(t *testing.T, ctx *context.T, ep, suffix string, shouldSucceed bool) (acl access.Permissions, etag string) {
+func doGetPermissions(t *testing.T, ctx *context.T, ep, suffix string, shouldSucceed bool) (acl access.Permissions, version string) {
 	name := naming.JoinAddressName(ep, suffix)
 	client := v23.GetClient(ctx)
 	call, err := client.StartCall(ctx, name, "GetPermissions", nil, options.NoResolve{})
@@ -82,7 +82,7 @@
 		}
 		boom(t, "Failed to GetPermissions %s: %s", name, err)
 	}
-	if err := call.Finish(&acl, &etag); err != nil {
+	if err := call.Finish(&acl, &version); err != nil {
 		if !shouldSucceed {
 			return
 		}
@@ -91,10 +91,10 @@
 	return
 }
 
-func doSetPermissions(t *testing.T, ctx *context.T, ep, suffix string, acl access.Permissions, etag string, shouldSucceed bool) {
+func doSetPermissions(t *testing.T, ctx *context.T, ep, suffix string, acl access.Permissions, version string, shouldSucceed bool) {
 	name := naming.JoinAddressName(ep, suffix)
 	client := v23.GetClient(ctx)
-	call, err := client.StartCall(ctx, name, "SetPermissions", []interface{}{acl, etag}, options.NoResolve{})
+	call, err := client.StartCall(ctx, name, "SetPermissions", []interface{}{acl, version}, options.NoResolve{})
 	if err != nil {
 		if !shouldSucceed {
 			return
@@ -311,14 +311,14 @@
 	checkContents(t, bobCtx, naming.JoinAddressName(mtAddr, "a/b/falls"), "falls mainly on the plain", false)
 
 	// Test getting/setting AccessLists.
-	acl, etag := doGetPermissions(t, rootCtx, mtAddr, "stuff", true)
-	doSetPermissions(t, rootCtx, mtAddr, "stuff", acl, "xyzzy", false) // bad etag
-	doSetPermissions(t, rootCtx, mtAddr, "stuff", acl, etag, true)     // good etag
-	_, netag := doGetPermissions(t, rootCtx, mtAddr, "stuff", true)
-	if netag == etag {
-		boom(t, "etag didn't change after SetPermissions: %s", netag)
+	acl, version := doGetPermissions(t, rootCtx, mtAddr, "stuff", true)
+	doSetPermissions(t, rootCtx, mtAddr, "stuff", acl, "xyzzy", false) // bad version
+	doSetPermissions(t, rootCtx, mtAddr, "stuff", acl, version, true)  // correct version
+	_, nversion := doGetPermissions(t, rootCtx, mtAddr, "stuff", true)
+	if nversion == version {
+		boom(t, "version didn't change after SetPermissions: %s", nversion)
 	}
-	doSetPermissions(t, rootCtx, mtAddr, "stuff", acl, "", true) // no etag
+	doSetPermissions(t, rootCtx, mtAddr, "stuff", acl, "", true) // no version
 
 	// Bob should be able to create nodes under the mounttable root but not alice.
 	doSetPermissions(t, aliceCtx, mtAddr, "onlybob", acl, "", false)
diff --git a/services/mounttable/lib/neighborhood.go b/services/mounttable/mounttablelib/neighborhood.go
similarity index 98%
rename from services/mounttable/lib/neighborhood.go
rename to services/mounttable/mounttablelib/neighborhood.go
index a757414..3be9878 100644
--- a/services/mounttable/lib/neighborhood.go
+++ b/services/mounttable/mounttablelib/neighborhood.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package mounttable
+package mounttablelib
 
 import (
 	"net"
@@ -290,10 +290,10 @@
 	}
 }
 
-func (*neighborhoodService) SetPermissions(call rpc.ServerCall, acl access.Permissions, etag string) error {
+func (*neighborhoodService) SetPermissions(call rpc.ServerCall, acl access.Permissions, version string) error {
 	return verror.New(errDoesntImplementSetPermissions, call.Context())
 }
 
-func (*neighborhoodService) GetPermissions(call rpc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (*neighborhoodService) GetPermissions(call rpc.ServerCall) (acl access.Permissions, version string, err error) {
 	return nil, "", nil
 }
diff --git a/services/mounttable/lib/neighborhood_test.go b/services/mounttable/mounttablelib/neighborhood_test.go
similarity index 98%
rename from services/mounttable/lib/neighborhood_test.go
rename to services/mounttable/mounttablelib/neighborhood_test.go
index 8175954..75d1b34 100644
--- a/services/mounttable/lib/neighborhood_test.go
+++ b/services/mounttable/mounttablelib/neighborhood_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package mounttable
+package mounttablelib
 
 import (
 	"fmt"
diff --git a/services/mounttable/lib/serverlist.go b/services/mounttable/mounttablelib/serverlist.go
similarity index 98%
rename from services/mounttable/lib/serverlist.go
rename to services/mounttable/mounttablelib/serverlist.go
index 294fe60..0738a94 100644
--- a/services/mounttable/lib/serverlist.go
+++ b/services/mounttable/mounttablelib/serverlist.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package mounttable
+package mounttablelib
 
 import (
 	"container/list"
diff --git a/services/mounttable/lib/serverlist_test.go b/services/mounttable/mounttablelib/serverlist_test.go
similarity index 98%
rename from services/mounttable/lib/serverlist_test.go
rename to services/mounttable/mounttablelib/serverlist_test.go
index 2b9fd19..b17ffd0 100644
--- a/services/mounttable/lib/serverlist_test.go
+++ b/services/mounttable/mounttablelib/serverlist_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package mounttable
+package mounttablelib
 
 import (
 	"reflect"
diff --git a/services/mounttable/lib/servers.go b/services/mounttable/mounttablelib/servers.go
similarity index 98%
rename from services/mounttable/lib/servers.go
rename to services/mounttable/mounttablelib/servers.go
index 8c56d47..77f358c 100644
--- a/services/mounttable/lib/servers.go
+++ b/services/mounttable/mounttablelib/servers.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package mounttable
+package mounttablelib
 
 import (
 	"net"
diff --git a/services/mounttable/lib/tamg.go b/services/mounttable/mounttablelib/tamg.go
similarity index 93%
rename from services/mounttable/lib/tamg.go
rename to services/mounttable/mounttablelib/tamg.go
index 568852e..26a8597 100644
--- a/services/mounttable/lib/tamg.go
+++ b/services/mounttable/mounttablelib/tamg.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package mounttable
+package mounttablelib
 
 import (
 	"strconv"
@@ -31,10 +31,10 @@
 	if len(genstr) > 0 {
 		gen, err := strconv.ParseInt(genstr, 10, 32)
 		if err != nil {
-			return b, verror.NewErrBadEtag(nil)
+			return b, verror.NewErrBadVersion(nil)
 		}
 		if gen >= 0 && int32(gen) != b.generation {
-			return b, verror.NewErrBadEtag(nil)
+			return b, verror.NewErrBadVersion(nil)
 		}
 	}
 	b.tam = tam
diff --git a/services/mounttable/lib/testdata/invalid.acl b/services/mounttable/mounttablelib/testdata/invalid.acl
similarity index 100%
rename from services/mounttable/lib/testdata/invalid.acl
rename to services/mounttable/mounttablelib/testdata/invalid.acl
diff --git a/services/mounttable/lib/testdata/noRoot.acl b/services/mounttable/mounttablelib/testdata/noRoot.acl
similarity index 100%
rename from services/mounttable/lib/testdata/noRoot.acl
rename to services/mounttable/mounttablelib/testdata/noRoot.acl
diff --git a/services/mounttable/lib/testdata/test.acl b/services/mounttable/mounttablelib/testdata/test.acl
similarity index 100%
rename from services/mounttable/lib/testdata/test.acl
rename to services/mounttable/mounttablelib/testdata/test.acl
diff --git a/services/mgmt/lib/binary/v23_internal_test.go b/services/mounttable/mounttablelib/v23_internal_test.go
similarity index 93%
rename from services/mgmt/lib/binary/v23_internal_test.go
rename to services/mounttable/mounttablelib/v23_internal_test.go
index fe3cb00..1d210b4 100644
--- a/services/mgmt/lib/binary/v23_internal_test.go
+++ b/services/mounttable/mounttablelib/v23_internal_test.go
@@ -4,7 +4,7 @@
 
 // This file was auto-generated via go generate.
 // DO NOT UPDATE MANUALLY
-package binary
+package mounttablelib
 
 import "testing"
 import "os"
diff --git a/services/profile/profile/doc.go b/services/profile/profile/doc.go
index 85d1ed1..caa2d02 100644
--- a/services/profile/profile/doc.go
+++ b/services/profile/profile/doc.go
@@ -57,28 +57,6 @@
    If true, dump all stored traces on runtime shutdown.
  -v23.vtrace.sample-rate=0
    Rate (from 0.0 to 1.0) to sample vtrace traces.
- -vanadium.i18n_catalogue=
-   18n catalogue files to load, comma separated
- -veyron.credentials=
-   directory to use for storing security credentials
- -veyron.namespace.root=[/ns.dev.v.io:8101]
-   local namespace root; can be repeated to provided multiple roots
- -veyron.proxy=
-   object name of proxy service to use to export services across network
-   boundaries
- -veyron.tcp.address=
-   address to listen on
- -veyron.tcp.protocol=wsh
-   protocol to listen with
- -veyron.vtrace.cache_size=1024
-   The number of vtrace traces to store in memory.
- -veyron.vtrace.collect_regexp=
-   Spans and annotations that match this regular expression will trigger trace
-   collection.
- -veyron.vtrace.dump_on_shutdown=true
-   If true, dump all stored traces on runtime shutdown.
- -veyron.vtrace.sample_rate=0
-   Rate (from 0.0 to 1.0) to sample vtrace traces.
  -vmodule=
    comma-separated list of pattern=N settings for file-filtered logging
 
diff --git a/services/profile/profile/main.go b/services/profile/profile/main.go
index 3af5487..e33dc99 100644
--- a/services/profile/profile/main.go
+++ b/services/profile/profile/main.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // The following enables go generate to generate the doc.go file.
-//go:generate go run $VANADIUM_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
+//go:generate go run $V23_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go .
 
 package main
 
diff --git a/services/profile/profiled/dispatcher.go b/services/profile/profiled/dispatcher.go
index 171b7f8..16f386f 100644
--- a/services/profile/profiled/dispatcher.go
+++ b/services/profile/profiled/dispatcher.go
@@ -10,7 +10,7 @@
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 
-	"v.io/x/ref/services/mgmt/lib/fs"
+	"v.io/x/ref/services/internal/fs"
 	"v.io/x/ref/services/repository"
 )
 
diff --git a/services/profile/profiled/main.go b/services/profile/profiled/main.go
index 1c6b01f..ab1ab3d 100644
--- a/services/profile/profiled/main.go
+++ b/services/profile/profiled/main.go
@@ -9,10 +9,10 @@
 
 	"v.io/v23"
 	"v.io/x/lib/vlog"
-
+	"v.io/x/ref/lib/security/securityflag"
 	"v.io/x/ref/lib/signals"
+
 	_ "v.io/x/ref/profiles/roaming"
-	vflag "v.io/x/ref/security/flag"
 )
 
 var (
@@ -33,7 +33,7 @@
 		vlog.Fatalf("NewServer() failed: %v", err)
 	}
 
-	dispatcher, err := NewDispatcher(*store, vflag.NewAuthorizerOrDie())
+	dispatcher, err := NewDispatcher(*store, securityflag.NewAuthorizerOrDie())
 	if err != nil {
 		vlog.Fatalf("NewDispatcher() failed: %v", err)
 	}
diff --git a/services/profile/profiled/service.go b/services/profile/profiled/service.go
index 7b0cc1b..23e11b2 100644
--- a/services/profile/profiled/service.go
+++ b/services/profile/profiled/service.go
@@ -7,7 +7,7 @@
 import (
 	"errors"
 
-	"v.io/x/ref/services/mgmt/lib/fs"
+	"v.io/x/ref/services/internal/fs"
 	"v.io/x/ref/services/profile"
 	"v.io/x/ref/services/repository"
 
diff --git a/services/security/role.vdl b/services/role/role.vdl
similarity index 97%
rename from services/security/role.vdl
rename to services/role/role.vdl
index 26e970a..454d0dc 100644
--- a/services/security/role.vdl
+++ b/services/role/role.vdl
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package security
+package role
 
 import "v.io/v23/security"
 
diff --git a/services/security/role.vdl.go b/services/role/role.vdl.go
similarity index 98%
rename from services/security/role.vdl.go
rename to services/role/role.vdl.go
index e15db68..1b4ab83 100644
--- a/services/security/role.vdl.go
+++ b/services/role/role.vdl.go
@@ -5,7 +5,7 @@
 // This file was auto-generated by the vanadium vdl tool.
 // Source: role.vdl
 
-package security
+package role
 
 import (
 	// VDL system imports
@@ -130,7 +130,7 @@
 // descRole hides the desc to keep godoc clean.
 var descRole = rpc.InterfaceDesc{
 	Name:    "Role",
-	PkgPath: "v.io/x/ref/services/security",
+	PkgPath: "v.io/x/ref/services/role",
 	Doc:     "// Role is an interface to request blessings from a role account server. The\n// returned blessings are bound to the client's public key thereby authorizing\n// the client to acquire the role. The server may tie the returned blessings\n// with the client's presented blessing name in order to maintain audit\n// information in the blessing.\n//\n// In order to avoid granting role blessings to all delegates of a principal,\n// the role server requires that each authorized blessing presented by the\n// client have the string \"_role\" as suffix.",
 	Methods: []rpc.MethodDesc{
 		{
diff --git a/services/security/roled/internal/caveats.vdl b/services/role/roled/internal/caveats.vdl
similarity index 100%
rename from services/security/roled/internal/caveats.vdl
rename to services/role/roled/internal/caveats.vdl
diff --git a/services/security/roled/internal/caveats.vdl.go b/services/role/roled/internal/caveats.vdl.go
similarity index 100%
rename from services/security/roled/internal/caveats.vdl.go
rename to services/role/roled/internal/caveats.vdl.go
diff --git a/services/security/roled/internal/config.vdl b/services/role/roled/internal/config.vdl
similarity index 100%
rename from services/security/roled/internal/config.vdl
rename to services/role/roled/internal/config.vdl
diff --git a/services/security/roled/internal/config.vdl.go b/services/role/roled/internal/config.vdl.go
similarity index 95%
rename from services/security/roled/internal/config.vdl.go
rename to services/role/roled/internal/config.vdl.go
index 6e10437..0928eb7 100644
--- a/services/security/roled/internal/config.vdl.go
+++ b/services/role/roled/internal/config.vdl.go
@@ -40,7 +40,7 @@
 }
 
 func (Config) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/security/roled/internal.Config"
+	Name string "v.io/x/ref/services/role/roled/internal.Config"
 }) {
 }
 
diff --git a/services/security/roled/internal/discharger.go b/services/role/roled/internal/discharger.go
similarity index 77%
rename from services/security/roled/internal/discharger.go
rename to services/role/roled/internal/discharger.go
index 8bcab33..0ac7fd9 100644
--- a/services/security/roled/internal/discharger.go
+++ b/services/role/roled/internal/discharger.go
@@ -13,7 +13,7 @@
 	"v.io/v23/security"
 	"v.io/v23/verror"
 
-	isecurity "v.io/x/ref/services/security"
+	"v.io/x/ref/services/discharger"
 
 	"v.io/x/lib/vlog"
 )
@@ -26,12 +26,14 @@
 
 }
 
-type discharger struct{}
+type dischargerImpl struct {
+	serverConfig *serverConfig
+}
 
-func (discharger) Discharge(call rpc.ServerCall, caveat security.Caveat, impetus security.DischargeImpetus) (security.Discharge, error) {
+func (dischargerImpl) Discharge(call rpc.ServerCall, caveat security.Caveat, impetus security.DischargeImpetus) (security.Discharge, error) {
 	details := caveat.ThirdPartyDetails()
 	if details == nil {
-		return security.Discharge{}, isecurity.NewErrNotAThirdPartyCaveat(call.Context(), caveat)
+		return security.Discharge{}, discharger.NewErrNotAThirdPartyCaveat(call.Context(), caveat)
 	}
 	if err := details.Dischargeable(call.Context()); err != nil {
 		return security.Discharge{}, err
@@ -58,3 +60,7 @@
 	}
 	return discharge, nil
 }
+
+func (d *dischargerImpl) GlobChildren__(call rpc.ServerCall) (<-chan string, error) {
+	return globChildren(call.Context(), d.serverConfig)
+}
diff --git a/services/security/roled/internal/dispatcher.go b/services/role/roled/internal/dispatcher.go
similarity index 73%
rename from services/security/roled/internal/dispatcher.go
rename to services/role/roled/internal/dispatcher.go
index 22478b9..1d31cc0 100644
--- a/services/security/roled/internal/dispatcher.go
+++ b/services/role/roled/internal/dispatcher.go
@@ -16,12 +16,13 @@
 	"v.io/v23/security"
 	"v.io/v23/verror"
 
-	isecurity "v.io/x/ref/services/security"
+	"v.io/x/ref/services/discharger"
+	"v.io/x/ref/services/role"
 
 	"v.io/x/lib/vlog"
 )
 
-const requiredSuffix = security.ChainSeparator + isecurity.RoleSuffix
+const requiredSuffix = security.ChainSeparator + role.RoleSuffix
 
 // NewDispatcher returns a dispatcher object for a role service and its
 // associated discharger service.
@@ -31,33 +32,37 @@
 // service for the third-party caveats attached to the role blessings returned
 // by the role service.
 func NewDispatcher(configRoot, dischargerLocation string) rpc.Dispatcher {
-	return &dispatcher{configRoot, dischargerLocation}
+	return &dispatcher{&serverConfig{configRoot, dischargerLocation}}
+}
+
+type serverConfig struct {
+	root               string
+	dischargerLocation string
 }
 
 type dispatcher struct {
-	configRoot         string
-	dischargerLocation string
+	config *serverConfig
 }
 
 func (d *dispatcher) Lookup(suffix string) (interface{}, security.Authorizer, error) {
 	if len(suffix) == 0 {
-		return isecurity.DischargerServer(&discharger{}), &openAuthorizer{}, nil
+		return discharger.DischargerServer(&dischargerImpl{d.config}), &openAuthorizer{}, nil
 	}
-	fileName := filepath.Join(d.configRoot, filepath.FromSlash(suffix+".conf"))
-	if !strings.HasPrefix(fileName, d.configRoot) {
+	fileName := filepath.Join(d.config.root, filepath.FromSlash(suffix+".conf"))
+	if !strings.HasPrefix(fileName, d.config.root) {
 		// Guard against ".." in the suffix that could be used to read
 		// files outside of the config root.
 		return nil, nil, verror.New(verror.ErrNoExistOrNoAccess, nil)
 	}
-	config, err := loadExpandedConfig(fileName, nil)
+	roleConfig, err := loadExpandedConfig(fileName, nil)
 	if err != nil && !os.IsNotExist(err) {
 		// The config file exists, but we failed to read it for some
 		// reason. This is likely a server configuration error.
-		vlog.Errorf("loadConfig(%q, %q): %v", d.configRoot, suffix, err)
+		vlog.Errorf("loadConfig(%q, %q): %v", d.config.root, suffix, err)
 		return nil, nil, verror.Convert(verror.ErrInternal, nil, err)
 	}
-	obj := &roleService{role: suffix, config: config, dischargerLocation: d.dischargerLocation}
-	return isecurity.RoleServer(obj), &authorizer{config}, nil
+	obj := &roleService{serverConfig: d.config, role: suffix, roleConfig: roleConfig}
+	return role.RoleServer(obj), &authorizer{roleConfig}, nil
 }
 
 type openAuthorizer struct{}
@@ -71,19 +76,31 @@
 }
 
 func (a *authorizer) Authorize(ctx *context.T) error {
+	if security.GetCall(ctx).Method() == "__Glob" {
+		// The Glob implementation only shows objects that the caller
+		// has access to. So this blanket approval is OK.
+		return nil
+	}
 	if a.config == nil {
 		return verror.New(verror.ErrNoExistOrNoAccess, ctx)
 	}
 	remoteBlessingNames, _ := security.RemoteBlessingNames(ctx)
 
-	for _, pattern := range a.config.Members {
-		if pattern.MatchedBy(remoteBlessingNames...) {
-			return nil
-		}
+	if hasAccess(a.config, remoteBlessingNames) {
+		return nil
 	}
 	return verror.New(verror.ErrNoExistOrNoAccess, ctx)
 }
 
+func hasAccess(c *Config, blessingNames []string) bool {
+	for _, pattern := range c.Members {
+		if pattern.MatchedBy(blessingNames...) {
+			return true
+		}
+	}
+	return false
+}
+
 func loadExpandedConfig(fileName string, seenFiles map[string]struct{}) (*Config, error) {
 	if seenFiles == nil {
 		seenFiles = make(map[string]struct{})
diff --git a/services/security/roled/internal/doc.go b/services/role/roled/internal/doc.go
similarity index 90%
rename from services/security/roled/internal/doc.go
rename to services/role/roled/internal/doc.go
index 118ee40..f72d7c5 100644
--- a/services/security/roled/internal/doc.go
+++ b/services/role/roled/internal/doc.go
@@ -2,5 +2,5 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package internal implements the role service defined in v.io/x/ref/services/security
+// Package internal implements the role service defined in v.io/x/ref/services/role
 package internal
diff --git a/services/role/roled/internal/glob.go b/services/role/roled/internal/glob.go
new file mode 100644
index 0000000..224b5f6
--- /dev/null
+++ b/services/role/roled/internal/glob.go
@@ -0,0 +1,86 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package internal
+
+import (
+	"os"
+	"path/filepath"
+	"strings"
+
+	"v.io/v23/context"
+	"v.io/v23/security"
+	"v.io/v23/verror"
+)
+
+func globChildren(ctx *context.T, serverConfig *serverConfig) (<-chan string, error) {
+	n := findRoles(ctx, serverConfig.root)
+	suffix := security.GetCall(ctx).Suffix()
+	if len(suffix) > 0 {
+		n = n.find(strings.Split(suffix, "/"), false)
+	}
+	if n == nil {
+		return nil, verror.New(verror.ErrNoExistOrNoAccess, ctx)
+	}
+	ch := make(chan string, len(n.children))
+	for c := range n.children {
+		ch <- c
+	}
+	close(ch)
+	return ch, nil
+}
+
+// findRoles finds all the roles to which the caller has access.
+func findRoles(ctx *context.T, root string) *node {
+	blessingNames, _ := security.RemoteBlessingNames(ctx)
+	tree := newNode()
+	filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
+		if info.IsDir() || !strings.HasSuffix(path, ".conf") {
+			return nil
+		}
+		c, err := loadExpandedConfig(path, nil)
+		if err != nil {
+			return nil
+		}
+		if !hasAccess(c, blessingNames) {
+			return nil
+		}
+		relPath, err := filepath.Rel(root, path)
+		if err != nil {
+			return nil
+		}
+		tree.find(strings.Split(strings.TrimSuffix(relPath, ".conf"), string(filepath.Separator)), true)
+		return nil
+	})
+	return tree
+}
+
+type node struct {
+	children map[string]*node
+}
+
+func newNode() *node {
+	return &node{children: make(map[string]*node)}
+}
+
+func (n *node) find(names []string, create bool) *node {
+	for {
+		if len(names) == 0 {
+			return n
+		}
+		if next, ok := n.children[names[0]]; ok {
+			n = next
+			names = names[1:]
+			continue
+		}
+		if create {
+			nn := newNode()
+			n.children[names[0]] = nn
+			n = nn
+			names = names[1:]
+			continue
+		}
+		return nil
+	}
+}
diff --git a/services/security/roled/internal/role.go b/services/role/roled/internal/role.go
similarity index 81%
rename from services/security/roled/internal/role.go
rename to services/role/roled/internal/role.go
index c3e8b24..ee578d4 100644
--- a/services/security/roled/internal/role.go
+++ b/services/role/roled/internal/role.go
@@ -16,17 +16,17 @@
 
 	"v.io/x/lib/vlog"
 
-	isecurity "v.io/x/ref/services/security"
+	"v.io/x/ref/services/role"
 )
 
 var (
-	errNoLocalBlessings = verror.Register("v.io/x/ref/services/security/roled/internal/noLocalBlessings", verror.NoRetry, "{1:}{2:} no local blessings")
+	errNoLocalBlessings = verror.Register("v.io/x/ref/services/role/roled/internal/noLocalBlessings", verror.NoRetry, "{1:}{2:} no local blessings")
 )
 
 type roleService struct {
-	role               string
-	config             *Config
-	dischargerLocation string
+	serverConfig *serverConfig
+	role         string
+	roleConfig   *Config
 }
 
 func (i *roleService) SeekBlessings(call rpc.ServerCall) (security.Blessings, error) {
@@ -40,13 +40,17 @@
 		return security.Blessings{}, verror.New(verror.ErrNoAccess, ctx)
 	}
 
-	extensions := extensions(i.config, i.role, members)
-	caveats, err := caveats(ctx, i.config)
+	extensions := extensions(i.roleConfig, i.role, members)
+	caveats, err := caveats(ctx, i.roleConfig)
 	if err != nil {
 		return security.Blessings{}, err
 	}
 
-	return createBlessings(ctx, i.config, v23.GetPrincipal(ctx), extensions, caveats, i.dischargerLocation)
+	return createBlessings(ctx, i.roleConfig, v23.GetPrincipal(ctx), extensions, caveats, i.serverConfig.dischargerLocation)
+}
+
+func (i *roleService) GlobChildren__(call rpc.ServerCall) (<-chan string, error) {
+	return globChildren(call.Context(), i.serverConfig)
 }
 
 // filterNonMembers returns only the blessing names that are authorized members
@@ -58,7 +62,7 @@
 		// blessings. We need to know exactly which names matched.
 		// These names will be used later to construct the role
 		// blessings.
-		for _, pattern := range i.config.Members {
+		for _, pattern := range i.roleConfig.Members {
 			if pattern.MatchedBy(name) {
 				results = append(results, name)
 				break
@@ -68,14 +72,14 @@
 	return results
 }
 
-func extensions(config *Config, role string, blessingNames []string) []string {
+func extensions(config *Config, roleStr string, blessingNames []string) []string {
 	if !config.Extend {
-		return []string{role}
+		return []string{roleStr}
 	}
 	var extensions []string
 	for _, b := range blessingNames {
-		b = strings.TrimSuffix(b, security.ChainSeparator+isecurity.RoleSuffix)
-		extensions = append(extensions, role+security.ChainSeparator+b)
+		b = strings.TrimSuffix(b, security.ChainSeparator+role.RoleSuffix)
+		extensions = append(extensions, roleStr+security.ChainSeparator+b)
 	}
 	return extensions
 }
diff --git a/services/security/roled/internal/role_internal_test.go b/services/role/roled/internal/role_internal_test.go
similarity index 100%
rename from services/security/roled/internal/role_internal_test.go
rename to services/role/roled/internal/role_internal_test.go
diff --git a/services/security/roled/internal/role_test.go b/services/role/roled/internal/role_test.go
similarity index 72%
rename from services/security/roled/internal/role_test.go
rename to services/role/roled/internal/role_test.go
index b1f5c43..483279f 100644
--- a/services/security/roled/internal/role_test.go
+++ b/services/role/roled/internal/role_test.go
@@ -17,12 +17,12 @@
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
+	vsecurity "v.io/x/ref/lib/security"
+	"v.io/x/ref/services/role"
+	irole "v.io/x/ref/services/role/roled/internal"
+	"v.io/x/ref/test/testutil"
 
 	_ "v.io/x/ref/profiles"
-	vsecurity "v.io/x/ref/security"
-	isecurity "v.io/x/ref/services/security"
-	irole "v.io/x/ref/services/security/roled/internal"
-	"v.io/x/ref/test/testutil"
 )
 
 func TestSeekBlessings(t *testing.T) {
@@ -40,7 +40,7 @@
 		Members: []security.BlessingPattern{
 			"root/users/user1/_role",
 			"root/users/user2/_role",
-			"root/users/user3", // _role/A implied
+			"root/users/user3", // _role implied
 		},
 		Extend: true,
 	}
@@ -104,7 +104,7 @@
 	addr := newRoleServer(t, newPrincipalContext(t, ctx, root, "roles"), workdir)
 	for _, tc := range testcases {
 		user := v23.GetPrincipal(tc.ctx).BlessingStore().Default()
-		c := isecurity.RoleClient(naming.Join(addr, tc.role))
+		c := role.RoleClient(naming.Join(addr, tc.role))
 		blessings, err := c.SeekBlessings(tc.ctx)
 		if verror.ErrorID(err) != tc.errID {
 			t.Errorf("unexpected error ID for (%q, %q). Got %#v, expected %#v", user, tc.role, verror.ErrorID(err), tc.errID)
@@ -123,6 +123,59 @@
 	}
 }
 
+func TestGlob(t *testing.T) {
+	ctx, shutdown := v23.Init()
+	defer shutdown()
+
+	workdir, err := ioutil.TempDir("", "test-role-server-")
+	if err != nil {
+		t.Fatal("ioutil.TempDir failed: %v", err)
+	}
+	defer os.RemoveAll(workdir)
+	os.Mkdir(filepath.Join(workdir, "sub1"), 0700)
+	os.Mkdir(filepath.Join(workdir, "sub1", "sub2"), 0700)
+	os.Mkdir(filepath.Join(workdir, "sub3"), 0700)
+
+	// Role that user1 has access to.
+	roleAConf := irole.Config{Members: []security.BlessingPattern{"root/user1"}}
+	irole.WriteConfig(t, roleAConf, filepath.Join(workdir, "A.conf"))
+	irole.WriteConfig(t, roleAConf, filepath.Join(workdir, "sub1/B.conf"))
+	irole.WriteConfig(t, roleAConf, filepath.Join(workdir, "sub1/C.conf"))
+	irole.WriteConfig(t, roleAConf, filepath.Join(workdir, "sub1/sub2/D.conf"))
+
+	// Role that user2 has access to.
+	roleBConf := irole.Config{Members: []security.BlessingPattern{"root/user2"}}
+	irole.WriteConfig(t, roleBConf, filepath.Join(workdir, "sub1/sub2/X.conf"))
+
+	root := testutil.NewIDProvider("root")
+	user1 := newPrincipalContext(t, ctx, root, "user1/_role")
+	user2 := newPrincipalContext(t, ctx, root, "user2/_role")
+	user3 := newPrincipalContext(t, ctx, root, "user3/_role")
+	addr := newRoleServer(t, newPrincipalContext(t, ctx, root, "roles"), workdir)
+
+	testcases := []struct {
+		user    *context.T
+		name    string
+		pattern string
+		results []string
+	}{
+		{user1, "", "*", []string{"A", "sub1"}},
+		{user1, "sub1", "*", []string{"B", "C", "sub2"}},
+		{user1, "sub1/sub2", "*", []string{"D"}},
+		{user1, "", "...", []string{"", "A", "sub1", "sub1/B", "sub1/C", "sub1/sub2", "sub1/sub2/D"}},
+		{user2, "", "*", []string{"sub1"}},
+		{user2, "", "...", []string{"", "sub1", "sub1/sub2", "sub1/sub2/X"}},
+		{user3, "", "*", []string{}},
+		{user3, "", "...", []string{""}},
+	}
+	for i, tc := range testcases {
+		matches, _, _ := testutil.GlobName(tc.user, naming.Join(addr, tc.name), tc.pattern)
+		if !reflect.DeepEqual(matches, tc.results) {
+			t.Errorf("unexpected results for tc #%d. Got %q, expected %q", i, matches, tc.results)
+		}
+	}
+}
+
 func newPrincipalContext(t *testing.T, ctx *context.T, root *testutil.IDProvider, names ...string) *context.T {
 	principal := testutil.NewPrincipal()
 	var blessings []security.Blessings
diff --git a/services/security/roled/main.go b/services/role/roled/main.go
similarity index 95%
rename from services/security/roled/main.go
rename to services/role/roled/main.go
index 38a3a61..655156c 100644
--- a/services/security/roled/main.go
+++ b/services/role/roled/main.go
@@ -14,7 +14,7 @@
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/signals"
 	_ "v.io/x/ref/profiles/static"
-	irole "v.io/x/ref/services/security/roled/internal"
+	irole "v.io/x/ref/services/role/roled/internal"
 )
 
 var (
diff --git a/services/security/groups/server/store.go b/services/security/groups/server/store.go
deleted file mode 100644
index b523c65..0000000
--- a/services/security/groups/server/store.go
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package server
-
-// Store is a key-value store that uses etags for optimistic concurrency
-// control. The etags passed to Update and Delete must come from Get. If in the
-// meantime some client has called Update or Delete on the same key, the etag
-// will be stale and the method call will fail.
-//
-// Note, this API disallows empty etags to simplify implementation. The group
-// server is the only client of this API and always specifies etags.
-type Store interface {
-	// Fails if the given key is unknown (ErrUnknownKey).
-	Get(k string) (v interface{}, etag string, err error)
-
-	// Fails if an entry already exists for the given key (ErrKeyAlreadyExists).
-	Insert(k string, v interface{}) error
-
-	// Fails if the given key is unknown (ErrUnknownKey).
-	// Fails if etag doesn't match (ErrBadEtag).
-	Update(k string, v interface{}, etag string) error
-
-	// Fails if the given key is unknown (ErrUnknownKey).
-	// Fails if etag doesn't match (ErrBadEtag).
-	Delete(k string, etag string) error
-}
-
-////////////////////////////////////////
-// Store error types
-
-type ErrUnknownKey struct {
-	Key string
-}
-
-func (err *ErrUnknownKey) Error() string {
-	return "unknown key: " + err.Key
-}
-
-type ErrKeyAlreadyExists struct {
-	Key string
-}
-
-func (err *ErrKeyAlreadyExists) Error() string {
-	return "key already exists: " + err.Key
-}
-
-type ErrBadEtag struct{}
-
-func (err *ErrBadEtag) Error() string {
-	return "etag is out of date"
-}
diff --git a/services/wsprd/browspr/main/main_nacl.go b/services/wspr/browsprd/main_nacl.go
similarity index 98%
rename from services/wsprd/browspr/main/main_nacl.go
rename to services/wspr/browsprd/main_nacl.go
index 5b8bd6c..7b4f7a3 100644
--- a/services/wsprd/browspr/main/main_nacl.go
+++ b/services/wspr/browsprd/main_nacl.go
@@ -16,11 +16,11 @@
 	"v.io/v23/security"
 	"v.io/v23/vdl"
 	"v.io/x/lib/vlog"
+	vsecurity "v.io/x/ref/lib/security"
 	_ "v.io/x/ref/profiles/chrome"
 	"v.io/x/ref/profiles/internal/lib/websocket"
-	vsecurity "v.io/x/ref/security"
-	"v.io/x/ref/services/wsprd/browspr"
-	"v.io/x/ref/services/wsprd/channel/channel_nacl"
+	"v.io/x/ref/services/wspr/internal/browspr"
+	"v.io/x/ref/services/wspr/internal/channel/channel_nacl"
 )
 
 func main() {
diff --git a/services/wsprd/account/account.go b/services/wspr/internal/account/account.go
similarity index 98%
rename from services/wsprd/account/account.go
rename to services/wspr/internal/account/account.go
index 857ca84..f577b59 100644
--- a/services/wsprd/account/account.go
+++ b/services/wspr/internal/account/account.go
@@ -15,7 +15,7 @@
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/services/wsprd/principal"
+	"v.io/x/ref/services/wspr/internal/principal"
 )
 
 type BlesserService interface {
diff --git a/services/wsprd/account/account.vdl b/services/wspr/internal/account/account.vdl
similarity index 100%
rename from services/wsprd/account/account.vdl
rename to services/wspr/internal/account/account.vdl
diff --git a/services/wsprd/account/account.vdl.go b/services/wspr/internal/account/account.vdl.go
similarity index 89%
rename from services/wsprd/account/account.vdl.go
rename to services/wspr/internal/account/account.vdl.go
index 9b14fc6..cc306d0 100644
--- a/services/wsprd/account/account.vdl.go
+++ b/services/wspr/internal/account/account.vdl.go
@@ -20,7 +20,7 @@
 }
 
 func (Caveat) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/account.Caveat"
+	Name string "v.io/x/ref/services/wspr/internal/account.Caveat"
 }) {
 }
 
diff --git a/services/wsprd/app/app.go b/services/wspr/internal/app/app.go
similarity index 97%
rename from services/wsprd/app/app.go
rename to services/wspr/internal/app/app.go
index b71db40..6c8b51c 100644
--- a/services/wsprd/app/app.go
+++ b/services/wspr/internal/app/app.go
@@ -27,15 +27,15 @@
 	"v.io/v23/vom"
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/services/wsprd/lib"
-	"v.io/x/ref/services/wsprd/namespace"
-	"v.io/x/ref/services/wsprd/principal"
-	"v.io/x/ref/services/wsprd/rpc/server"
+	"v.io/x/ref/services/wspr/internal/lib"
+	"v.io/x/ref/services/wspr/internal/namespace"
+	"v.io/x/ref/services/wspr/internal/principal"
+	"v.io/x/ref/services/wspr/internal/rpc/server"
 )
 
 const (
 	// pkgPath is the prefix os errors in this package.
-	pkgPath = "v.io/x/ref/services/wsprd/app"
+	pkgPath = "v.io/x/ref/services/wspr/internal/app"
 )
 
 // Errors
@@ -750,3 +750,14 @@
 	blessings, _ := clientCall.RemoteBlessings()
 	return blessings, nil
 }
+
+func (c *Controller) SendLogMessage(level lib.LogLevel, msg string) error {
+	c.Lock()
+	defer c.Unlock()
+	id := c.lastGeneratedId
+	c.lastGeneratedId += 2
+	return c.writerCreator(id).Send(lib.ResponseLog, lib.LogMessage{
+		Level:   level,
+		Message: msg,
+	})
+}
diff --git a/services/wsprd/app/app.vdl b/services/wspr/internal/app/app.vdl
similarity index 100%
rename from services/wsprd/app/app.vdl
rename to services/wspr/internal/app/app.vdl
diff --git a/services/wsprd/app/app.vdl.go b/services/wspr/internal/app/app.vdl.go
similarity index 93%
rename from services/wsprd/app/app.vdl.go
rename to services/wspr/internal/app/app.vdl.go
index 8573ee7..60dfc1f 100644
--- a/services/wsprd/app/app.vdl.go
+++ b/services/wspr/internal/app/app.vdl.go
@@ -32,7 +32,7 @@
 }
 
 func (RpcRequest) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/app.RpcRequest"
+	Name string "v.io/x/ref/services/wspr/internal/app.RpcRequest"
 }) {
 }
 
@@ -54,7 +54,7 @@
 	RpcCallOptionRetryTimeout struct{ Value time.Duration }
 	// __RpcCallOptionReflect describes the RpcCallOption union type.
 	__RpcCallOptionReflect struct {
-		Name  string "v.io/x/ref/services/wsprd/app.RpcCallOption"
+		Name  string "v.io/x/ref/services/wspr/internal/app.RpcCallOption"
 		Type  RpcCallOption
 		Union struct {
 			AllowedServersPolicy RpcCallOptionAllowedServersPolicy
@@ -79,7 +79,7 @@
 }
 
 func (RpcResponse) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/app.RpcResponse"
+	Name string "v.io/x/ref/services/wspr/internal/app.RpcResponse"
 }) {
 }
 
diff --git a/services/wsprd/app/app_test.go b/services/wspr/internal/app/app_test.go
similarity index 97%
rename from services/wsprd/app/app_test.go
rename to services/wspr/internal/app/app_test.go
index c6ea428..fbb96fc 100644
--- a/services/wsprd/app/app_test.go
+++ b/services/wspr/internal/app/app_test.go
@@ -24,13 +24,12 @@
 	"v.io/v23/verror"
 	"v.io/v23/vom"
 	"v.io/v23/vtrace"
-
+	vsecurity "v.io/x/ref/lib/security"
 	"v.io/x/ref/profiles"
-	vsecurity "v.io/x/ref/security"
-	mounttable "v.io/x/ref/services/mounttable/lib"
-	"v.io/x/ref/services/wsprd/lib"
-	"v.io/x/ref/services/wsprd/lib/testwriter"
-	"v.io/x/ref/services/wsprd/rpc/server"
+	"v.io/x/ref/services/mounttable/mounttablelib"
+	"v.io/x/ref/services/wspr/internal/lib"
+	"v.io/x/ref/services/wspr/internal/lib/testwriter"
+	"v.io/x/ref/services/wspr/internal/rpc/server"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
 )
@@ -123,7 +122,7 @@
 }
 
 func startMountTableServer(ctx *context.T) (rpc.Server, naming.Endpoint, error) {
-	mt, err := mounttable.NewMountTableDispatcher("")
+	mt, err := mounttablelib.NewMountTableDispatcher("")
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/services/wsprd/app/controller.vdl b/services/wspr/internal/app/controller.vdl
similarity index 96%
rename from services/wsprd/app/controller.vdl
rename to services/wspr/internal/app/controller.vdl
index 5298f7b..5e7e498 100644
--- a/services/wsprd/app/controller.vdl
+++ b/services/wspr/internal/app/controller.vdl
@@ -8,7 +8,7 @@
 	"signature"
 
 	"v.io/v23/security"
-	"v.io/x/ref/services/wsprd/principal"
+	"v.io/x/ref/services/wspr/internal/principal"
 )
 
 type Controller interface {
diff --git a/services/wsprd/app/controller.vdl.go b/services/wspr/internal/app/controller.vdl.go
similarity index 98%
rename from services/wsprd/app/controller.vdl.go
rename to services/wspr/internal/app/controller.vdl.go
index ccb8ee0..ffe9ae5 100644
--- a/services/wsprd/app/controller.vdl.go
+++ b/services/wspr/internal/app/controller.vdl.go
@@ -16,7 +16,7 @@
 	// VDL user imports
 	"v.io/v23/security"
 	"v.io/v23/vdlroot/signature"
-	"v.io/x/ref/services/wsprd/principal"
+	"v.io/x/ref/services/wspr/internal/principal"
 )
 
 // ControllerClientMethods is the client interface
@@ -252,7 +252,7 @@
 // descController hides the desc to keep godoc clean.
 var descController = rpc.InterfaceDesc{
 	Name:    "Controller",
-	PkgPath: "v.io/x/ref/services/wsprd/app",
+	PkgPath: "v.io/x/ref/services/wspr/internal/app",
 	Methods: []rpc.MethodDesc{
 		{
 			Name: "Serve",
diff --git a/services/wsprd/app/messaging.go b/services/wspr/internal/app/messaging.go
similarity index 97%
rename from services/wsprd/app/messaging.go
rename to services/wspr/internal/app/messaging.go
index d42e6fa..ff9c7c4 100644
--- a/services/wsprd/app/messaging.go
+++ b/services/wspr/internal/app/messaging.go
@@ -14,11 +14,11 @@
 	"v.io/v23/vom"
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/services/wsprd/lib"
+	"v.io/x/ref/services/wspr/internal/lib"
 )
 
 const (
-	verrorPkgPath = "v.io/x/ref/services/wsprd/app"
+	verrorPkgPath = "v.io/x/ref/services/wspr/internal/app"
 )
 
 var (
diff --git a/services/wsprd/app/mock_jsServer_test.go b/services/wspr/internal/app/mock_jsServer_test.go
similarity index 97%
rename from services/wsprd/app/mock_jsServer_test.go
rename to services/wspr/internal/app/mock_jsServer_test.go
index c8ca3f7..febba77 100644
--- a/services/wsprd/app/mock_jsServer_test.go
+++ b/services/wspr/internal/app/mock_jsServer_test.go
@@ -15,9 +15,9 @@
 	"v.io/v23/vdl"
 	"v.io/v23/vdlroot/signature"
 	"v.io/v23/vom"
-	"v.io/x/ref/services/wsprd/lib"
-	"v.io/x/ref/services/wsprd/principal"
-	"v.io/x/ref/services/wsprd/rpc/server"
+	"v.io/x/ref/services/wspr/internal/lib"
+	"v.io/x/ref/services/wspr/internal/principal"
+	"v.io/x/ref/services/wspr/internal/rpc/server"
 )
 
 type mockJSServer struct {
@@ -65,6 +65,9 @@
 		}
 		m.receivedResponse = vdl.ValueOf(msg)
 		return nil
+	case lib.ResponseLog:
+		m.flowCount += 2
+		return nil
 	}
 	return fmt.Errorf("Unknown message type: %d", responseType)
 }
diff --git a/services/wsprd/app/stream.go b/services/wspr/internal/app/stream.go
similarity index 97%
rename from services/wsprd/app/stream.go
rename to services/wspr/internal/app/stream.go
index f526d45..a5c3637 100644
--- a/services/wsprd/app/stream.go
+++ b/services/wspr/internal/app/stream.go
@@ -8,7 +8,7 @@
 	"fmt"
 
 	"v.io/v23/rpc"
-	"v.io/x/ref/services/wsprd/lib"
+	"v.io/x/ref/services/wspr/internal/lib"
 )
 
 type initConfig struct {
diff --git a/services/wsprd/app/v23_internal_test.go b/services/wspr/internal/app/v23_internal_test.go
similarity index 100%
rename from services/wsprd/app/v23_internal_test.go
rename to services/wspr/internal/app/v23_internal_test.go
diff --git a/services/wsprd/browspr/browspr.go b/services/wspr/internal/browspr/browspr.go
similarity index 98%
rename from services/wsprd/browspr/browspr.go
rename to services/wspr/internal/browspr/browspr.go
index 9ab4206..a8f1f37 100644
--- a/services/wsprd/browspr/browspr.go
+++ b/services/wspr/internal/browspr/browspr.go
@@ -16,8 +16,8 @@
 	"v.io/v23/vdl"
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/services/wsprd/account"
-	"v.io/x/ref/services/wsprd/principal"
+	"v.io/x/ref/services/wspr/internal/account"
+	"v.io/x/ref/services/wspr/internal/principal"
 )
 
 // Browspr is an intermediary between our javascript code and the vanadium
diff --git a/services/wspr/internal/browspr/browspr.vdl b/services/wspr/internal/browspr/browspr.vdl
new file mode 100644
index 0000000..f0016ed
--- /dev/null
+++ b/services/wspr/internal/browspr/browspr.vdl
@@ -0,0 +1,46 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package browspr
+
+import (
+	"v.io/x/ref/services/identity"
+	"v.io/x/ref/services/wspr/internal/account"
+)
+
+type StartMessage struct {
+	Identityd             string
+	IdentitydBlessingRoot identity.BlessingRootResponse
+	Proxy                 string
+	NamespaceRoot         string
+	LogLevel              int32
+	LogModule             string
+}
+
+type AssociateAccountMessage struct {
+	Account string
+	Origin  string
+	Caveats []account.Caveat
+}
+
+type CreateAccountMessage struct {
+	Token string
+}
+
+type CleanupMessage struct {
+	InstanceId int32
+}
+
+type OriginHasAccountMessage struct {
+	Origin string
+}
+
+type GetAccountsMessage struct{}
+
+type CreateInstanceMessage struct {
+	InstanceId     int32
+	Origin         string
+	NamespaceRoots []string
+	Proxy          string
+}
diff --git a/services/wsprd/browspr/browspr.vdl.go b/services/wspr/internal/browspr/browspr.vdl.go
similarity index 75%
rename from services/wsprd/browspr/browspr.vdl.go
rename to services/wspr/internal/browspr/browspr.vdl.go
index 81f87c9..e4a4600 100644
--- a/services/wsprd/browspr/browspr.vdl.go
+++ b/services/wspr/internal/browspr/browspr.vdl.go
@@ -13,7 +13,7 @@
 
 	// VDL user imports
 	"v.io/x/ref/services/identity"
-	"v.io/x/ref/services/wsprd/account"
+	"v.io/x/ref/services/wspr/internal/account"
 )
 
 type StartMessage struct {
@@ -26,7 +26,7 @@
 }
 
 func (StartMessage) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/browspr.StartMessage"
+	Name string "v.io/x/ref/services/wspr/internal/browspr.StartMessage"
 }) {
 }
 
@@ -37,7 +37,7 @@
 }
 
 func (AssociateAccountMessage) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/browspr.AssociateAccountMessage"
+	Name string "v.io/x/ref/services/wspr/internal/browspr.AssociateAccountMessage"
 }) {
 }
 
@@ -46,7 +46,7 @@
 }
 
 func (CreateAccountMessage) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/browspr.CreateAccountMessage"
+	Name string "v.io/x/ref/services/wspr/internal/browspr.CreateAccountMessage"
 }) {
 }
 
@@ -55,7 +55,7 @@
 }
 
 func (CleanupMessage) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/browspr.CleanupMessage"
+	Name string "v.io/x/ref/services/wspr/internal/browspr.CleanupMessage"
 }) {
 }
 
@@ -64,7 +64,7 @@
 }
 
 func (OriginHasAccountMessage) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/browspr.OriginHasAccountMessage"
+	Name string "v.io/x/ref/services/wspr/internal/browspr.OriginHasAccountMessage"
 }) {
 }
 
@@ -72,7 +72,7 @@
 }
 
 func (GetAccountsMessage) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/browspr.GetAccountsMessage"
+	Name string "v.io/x/ref/services/wspr/internal/browspr.GetAccountsMessage"
 }) {
 }
 
@@ -84,7 +84,7 @@
 }
 
 func (CreateInstanceMessage) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/browspr.CreateInstanceMessage"
+	Name string "v.io/x/ref/services/wspr/internal/browspr.CreateInstanceMessage"
 }) {
 }
 
diff --git a/services/wsprd/browspr/browspr_account_test.go b/services/wspr/internal/browspr/browspr_account_test.go
similarity index 100%
rename from services/wsprd/browspr/browspr_account_test.go
rename to services/wspr/internal/browspr/browspr_account_test.go
diff --git a/services/wsprd/browspr/browspr_test.go b/services/wspr/internal/browspr/browspr_test.go
similarity index 97%
rename from services/wsprd/browspr/browspr_test.go
rename to services/wspr/internal/browspr/browspr_test.go
index 0eb0df4..81ab8d0 100644
--- a/services/wsprd/browspr/browspr_test.go
+++ b/services/wspr/internal/browspr/browspr_test.go
@@ -22,16 +22,16 @@
 	"v.io/v23/vom"
 
 	"v.io/x/ref/profiles"
-	mounttable "v.io/x/ref/services/mounttable/lib"
-	"v.io/x/ref/services/wsprd/app"
-	"v.io/x/ref/services/wsprd/lib"
+	"v.io/x/ref/services/mounttable/mounttablelib"
+	"v.io/x/ref/services/wspr/internal/app"
+	"v.io/x/ref/services/wspr/internal/lib"
 	"v.io/x/ref/test"
 )
 
 //go:generate v23 test generate
 
 func startMounttable(ctx *context.T) (rpc.Server, naming.Endpoint, error) {
-	mt, err := mounttable.NewMountTableDispatcher("")
+	mt, err := mounttablelib.NewMountTableDispatcher("")
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/services/wsprd/browspr/file_serializer_nacl.go b/services/wspr/internal/browspr/file_serializer_nacl.go
similarity index 100%
rename from services/wsprd/browspr/file_serializer_nacl.go
rename to services/wspr/internal/browspr/file_serializer_nacl.go
diff --git a/services/wsprd/browspr/pipe.go b/services/wspr/internal/browspr/pipe.go
similarity index 96%
rename from services/wsprd/browspr/pipe.go
rename to services/wspr/internal/browspr/pipe.go
index 1c358f4..138e3ef 100644
--- a/services/wsprd/browspr/pipe.go
+++ b/services/wspr/internal/browspr/pipe.go
@@ -9,8 +9,8 @@
 	"fmt"
 
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/services/wsprd/app"
-	"v.io/x/ref/services/wsprd/lib"
+	"v.io/x/ref/services/wspr/internal/app"
+	"v.io/x/ref/services/wspr/internal/lib"
 )
 
 // pipe controls the flow of messages for a specific instance (corresponding to a specific tab).
diff --git a/services/wsprd/browspr/v23_internal_test.go b/services/wspr/internal/browspr/v23_internal_test.go
similarity index 100%
rename from services/wsprd/browspr/v23_internal_test.go
rename to services/wspr/internal/browspr/v23_internal_test.go
diff --git a/services/wsprd/browspr/writer.go b/services/wspr/internal/browspr/writer.go
similarity index 89%
rename from services/wsprd/browspr/writer.go
rename to services/wspr/internal/browspr/writer.go
index 259b650..17222f1 100644
--- a/services/wsprd/browspr/writer.go
+++ b/services/wspr/internal/browspr/writer.go
@@ -5,8 +5,8 @@
 package browspr
 
 import (
-	"v.io/x/ref/services/wsprd/app"
-	"v.io/x/ref/services/wsprd/lib"
+	"v.io/x/ref/services/wspr/internal/app"
+	"v.io/x/ref/services/wspr/internal/lib"
 )
 
 // postMessageWriter is a lib.ClientWriter that handles sending messages over postMessage to the extension.
diff --git a/services/wsprd/channel/channel.go b/services/wspr/internal/channel/channel.go
similarity index 100%
rename from services/wsprd/channel/channel.go
rename to services/wspr/internal/channel/channel.go
diff --git a/services/wsprd/channel/channel.vdl b/services/wspr/internal/channel/channel.vdl
similarity index 100%
rename from services/wsprd/channel/channel.vdl
rename to services/wspr/internal/channel/channel.vdl
diff --git a/services/wsprd/channel/channel.vdl.go b/services/wspr/internal/channel/channel.vdl.go
similarity index 91%
rename from services/wsprd/channel/channel.vdl.go
rename to services/wspr/internal/channel/channel.vdl.go
index a15b9c1..34c163f 100644
--- a/services/wsprd/channel/channel.vdl.go
+++ b/services/wspr/internal/channel/channel.vdl.go
@@ -19,7 +19,7 @@
 }
 
 func (Request) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/channel.Request"
+	Name string "v.io/x/ref/services/wspr/internal/channel.Request"
 }) {
 }
 
@@ -30,7 +30,7 @@
 }
 
 func (Response) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/channel.Response"
+	Name string "v.io/x/ref/services/wspr/internal/channel.Response"
 }) {
 }
 
@@ -52,7 +52,7 @@
 	MessageResponse struct{ Value Response }
 	// __MessageReflect describes the Message union type.
 	__MessageReflect struct {
-		Name  string "v.io/x/ref/services/wsprd/channel.Message"
+		Name  string "v.io/x/ref/services/wspr/internal/channel.Message"
 		Type  Message
 		Union struct {
 			Request  MessageRequest
diff --git a/services/wsprd/channel/channel_nacl/channel_nacl.go b/services/wspr/internal/channel/channel_nacl/channel_nacl.go
similarity index 94%
rename from services/wsprd/channel/channel_nacl/channel_nacl.go
rename to services/wspr/internal/channel/channel_nacl/channel_nacl.go
index 48aa3b3..347a355 100644
--- a/services/wsprd/channel/channel_nacl/channel_nacl.go
+++ b/services/wspr/internal/channel/channel_nacl/channel_nacl.go
@@ -11,7 +11,7 @@
 
 	"v.io/v23/vdl"
 	"v.io/v23/vom"
-	"v.io/x/ref/services/wsprd/channel" // contains most of the logic, factored out for testing
+	"v.io/x/ref/services/wspr/internal/channel" // contains most of the logic, factored out for testing
 )
 
 type Channel struct {
diff --git a/services/wsprd/channel/channel_test.go b/services/wspr/internal/channel/channel_test.go
similarity index 98%
rename from services/wsprd/channel/channel_test.go
rename to services/wspr/internal/channel/channel_test.go
index 26d9c03..4513bd1 100644
--- a/services/wsprd/channel/channel_test.go
+++ b/services/wspr/internal/channel/channel_test.go
@@ -10,7 +10,7 @@
 	"testing"
 
 	"v.io/v23/vdl"
-	"v.io/x/ref/services/wsprd/channel"
+	"v.io/x/ref/services/wspr/internal/channel"
 )
 
 func TestChannelRpcs(t *testing.T) {
diff --git a/services/wsprd/lib/case.go b/services/wspr/internal/lib/case.go
similarity index 100%
rename from services/wsprd/lib/case.go
rename to services/wspr/internal/lib/case.go
diff --git a/services/wsprd/lib/signature_manager.go b/services/wspr/internal/lib/signature_manager.go
similarity index 98%
rename from services/wsprd/lib/signature_manager.go
rename to services/wspr/internal/lib/signature_manager.go
index 22d69b4..41271e8 100644
--- a/services/wsprd/lib/signature_manager.go
+++ b/services/wspr/internal/lib/signature_manager.go
@@ -58,8 +58,6 @@
 	return time.Now().Sub(c.lastAccessed) > ttl
 }
 
-const pkgPath = "v.io/x/ref/services/wsprd/lib"
-
 func (sm *signatureManager) lookupCacheLocked(name string) []signature.Interface {
 	if entry := sm.cache[name]; entry != nil && !entry.expired() {
 		entry.lastAccessed = time.Now()
diff --git a/services/wsprd/lib/signature_manager_test.go b/services/wspr/internal/lib/signature_manager_test.go
similarity index 100%
rename from services/wsprd/lib/signature_manager_test.go
rename to services/wspr/internal/lib/signature_manager_test.go
diff --git a/services/wsprd/lib/simple_client.go b/services/wspr/internal/lib/simple_client.go
similarity index 100%
rename from services/wsprd/lib/simple_client.go
rename to services/wspr/internal/lib/simple_client.go
diff --git a/services/wsprd/lib/simple_client_test.go b/services/wspr/internal/lib/simple_client_test.go
similarity index 100%
rename from services/wsprd/lib/simple_client_test.go
rename to services/wspr/internal/lib/simple_client_test.go
diff --git a/services/wsprd/lib/testwriter/writer.go b/services/wspr/internal/lib/testwriter/writer.go
similarity index 98%
rename from services/wsprd/lib/testwriter/writer.go
rename to services/wspr/internal/lib/testwriter/writer.go
index 65dabb9..01c78d4 100644
--- a/services/wsprd/lib/testwriter/writer.go
+++ b/services/wspr/internal/lib/testwriter/writer.go
@@ -13,7 +13,7 @@
 	"time"
 
 	"v.io/v23/verror"
-	"v.io/x/ref/services/wsprd/lib"
+	"v.io/x/ref/services/wspr/internal/lib"
 )
 
 type TestHarness interface {
diff --git a/services/wsprd/lib/time.go b/services/wspr/internal/lib/time.go
similarity index 100%
rename from services/wsprd/lib/time.go
rename to services/wspr/internal/lib/time.go
diff --git a/services/wsprd/lib/vom.go b/services/wspr/internal/lib/vom.go
similarity index 100%
rename from services/wsprd/lib/vom.go
rename to services/wspr/internal/lib/vom.go
diff --git a/services/wsprd/lib/writer.go b/services/wspr/internal/lib/writer.go
similarity index 92%
rename from services/wsprd/lib/writer.go
rename to services/wspr/internal/lib/writer.go
index f6d60a1..a1ccecc 100644
--- a/services/wsprd/lib/writer.go
+++ b/services/wspr/internal/lib/writer.go
@@ -16,6 +16,7 @@
 	ResponseAuthRequest                   = 6
 	ResponseCancel                        = 7
 	ResponseValidate                      = 8 // Request to validate caveats.
+	ResponseLog                           = 9 // Sends a message to be logged.
 )
 
 type Response struct {
diff --git a/services/wsprd/lib/writer.vdl b/services/wspr/internal/lib/writer.vdl
similarity index 77%
rename from services/wsprd/lib/writer.vdl
rename to services/wspr/internal/lib/writer.vdl
index 7197042..ce94e21 100644
--- a/services/wsprd/lib/writer.vdl
+++ b/services/wspr/internal/lib/writer.vdl
@@ -12,3 +12,13 @@
 	Err           error
 	TraceResponse vtrace.Response
 }
+
+type LogLevel enum {
+   Info
+   Error
+}
+
+type LogMessage struct {
+  Level LogLevel
+  Message string
+}
diff --git a/services/wspr/internal/lib/writer.vdl.go b/services/wspr/internal/lib/writer.vdl.go
new file mode 100644
index 0000000..1930733
--- /dev/null
+++ b/services/wspr/internal/lib/writer.vdl.go
@@ -0,0 +1,92 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This file was auto-generated by the vanadium vdl tool.
+// Source: writer.vdl
+
+package lib
+
+import (
+	// VDL system imports
+	"fmt"
+	"v.io/v23/vdl"
+
+	// VDL user imports
+	"v.io/v23/vtrace"
+)
+
+// The response from the javascript server to the proxy.
+type ServerRpcReply struct {
+	Results       []*vdl.Value
+	Err           error
+	TraceResponse vtrace.Response
+}
+
+func (ServerRpcReply) __VDLReflect(struct {
+	Name string "v.io/x/ref/services/wspr/internal/lib.ServerRpcReply"
+}) {
+}
+
+type LogLevel int
+
+const (
+	LogLevelInfo LogLevel = iota
+	LogLevelError
+)
+
+// LogLevelAll holds all labels for LogLevel.
+var LogLevelAll = [...]LogLevel{LogLevelInfo, LogLevelError}
+
+// LogLevelFromString creates a LogLevel from a string label.
+func LogLevelFromString(label string) (x LogLevel, err error) {
+	err = x.Set(label)
+	return
+}
+
+// Set assigns label to x.
+func (x *LogLevel) Set(label string) error {
+	switch label {
+	case "Info", "info":
+		*x = LogLevelInfo
+		return nil
+	case "Error", "error":
+		*x = LogLevelError
+		return nil
+	}
+	*x = -1
+	return fmt.Errorf("unknown label %q in lib.LogLevel", label)
+}
+
+// String returns the string label of x.
+func (x LogLevel) String() string {
+	switch x {
+	case LogLevelInfo:
+		return "Info"
+	case LogLevelError:
+		return "Error"
+	}
+	return ""
+}
+
+func (LogLevel) __VDLReflect(struct {
+	Name string "v.io/x/ref/services/wspr/internal/lib.LogLevel"
+	Enum struct{ Info, Error string }
+}) {
+}
+
+type LogMessage struct {
+	Level   LogLevel
+	Message string
+}
+
+func (LogMessage) __VDLReflect(struct {
+	Name string "v.io/x/ref/services/wspr/internal/lib.LogMessage"
+}) {
+}
+
+func init() {
+	vdl.Register((*ServerRpcReply)(nil))
+	vdl.Register((*LogLevel)(nil))
+	vdl.Register((*LogMessage)(nil))
+}
diff --git a/services/wsprd/namespace/namespace.vdl b/services/wspr/internal/namespace/namespace.vdl
similarity index 91%
rename from services/wsprd/namespace/namespace.vdl
rename to services/wspr/internal/namespace/namespace.vdl
index bfb3849..9e06768 100644
--- a/services/wsprd/namespace/namespace.vdl
+++ b/services/wspr/internal/namespace/namespace.vdl
@@ -36,9 +36,9 @@
 	// SetRoots sets the current mounttable roots.
 	SetRoots(roots []string) error
 	// SetPermissions sets the AccessList in a node in a mount table.
-	SetPermissions(name string, acl access.Permissions, etag string) error
+	SetPermissions(name string, acl access.Permissions, version string) error
 	// GetPermissions returns the AccessList in a node in a mount table.
-	GetPermissions(name string) (acl access.Permissions, etag string | error)
+	GetPermissions(name string) (acl access.Permissions, version string | error)
 	// Delete deletes the name from the mounttable and, if requested, any subtree.
 	Delete(name string, deleteSubtree bool) error
 }
diff --git a/services/wsprd/namespace/namespace.vdl.go b/services/wspr/internal/namespace/namespace.vdl.go
similarity index 97%
rename from services/wsprd/namespace/namespace.vdl.go
rename to services/wspr/internal/namespace/namespace.vdl.go
index 14ac360..cfe0fc8 100644
--- a/services/wsprd/namespace/namespace.vdl.go
+++ b/services/wspr/internal/namespace/namespace.vdl.go
@@ -48,9 +48,9 @@
 	// SetRoots sets the current mounttable roots.
 	SetRoots(ctx *context.T, roots []string, opts ...rpc.CallOpt) error
 	// SetPermissions sets the AccessList in a node in a mount table.
-	SetPermissions(ctx *context.T, name string, acl access.Permissions, etag string, opts ...rpc.CallOpt) error
+	SetPermissions(ctx *context.T, name string, acl access.Permissions, version string, opts ...rpc.CallOpt) error
 	// GetPermissions returns the AccessList in a node in a mount table.
-	GetPermissions(ctx *context.T, name string, opts ...rpc.CallOpt) (acl access.Permissions, etag string, err error)
+	GetPermissions(ctx *context.T, name string, opts ...rpc.CallOpt) (acl access.Permissions, version string, err error)
 	// Delete deletes the name from the mounttable and, if requested, any subtree.
 	Delete(ctx *context.T, name string, deleteSubtree bool, opts ...rpc.CallOpt) error
 }
@@ -269,9 +269,9 @@
 	// SetRoots sets the current mounttable roots.
 	SetRoots(call rpc.ServerCall, roots []string) error
 	// SetPermissions sets the AccessList in a node in a mount table.
-	SetPermissions(call rpc.ServerCall, name string, acl access.Permissions, etag string) error
+	SetPermissions(call rpc.ServerCall, name string, acl access.Permissions, version string) error
 	// GetPermissions returns the AccessList in a node in a mount table.
-	GetPermissions(call rpc.ServerCall, name string) (acl access.Permissions, etag string, err error)
+	GetPermissions(call rpc.ServerCall, name string) (acl access.Permissions, version string, err error)
 	// Delete deletes the name from the mounttable and, if requested, any subtree.
 	Delete(call rpc.ServerCall, name string, deleteSubtree bool) error
 }
@@ -301,9 +301,9 @@
 	// SetRoots sets the current mounttable roots.
 	SetRoots(call rpc.ServerCall, roots []string) error
 	// SetPermissions sets the AccessList in a node in a mount table.
-	SetPermissions(call rpc.ServerCall, name string, acl access.Permissions, etag string) error
+	SetPermissions(call rpc.ServerCall, name string, acl access.Permissions, version string) error
 	// GetPermissions returns the AccessList in a node in a mount table.
-	GetPermissions(call rpc.ServerCall, name string) (acl access.Permissions, etag string, err error)
+	GetPermissions(call rpc.ServerCall, name string) (acl access.Permissions, version string, err error)
 	// Delete deletes the name from the mounttable and, if requested, any subtree.
 	Delete(call rpc.ServerCall, name string, deleteSubtree bool) error
 }
@@ -399,7 +399,7 @@
 // descNamespace hides the desc to keep godoc clean.
 var descNamespace = rpc.InterfaceDesc{
 	Name:    "Namespace",
-	PkgPath: "v.io/x/ref/services/wsprd/namespace",
+	PkgPath: "v.io/x/ref/services/wspr/internal/namespace",
 	Methods: []rpc.MethodDesc{
 		{
 			Name: "Glob",
@@ -481,9 +481,9 @@
 			Name: "SetPermissions",
 			Doc:  "// SetPermissions sets the AccessList in a node in a mount table.",
 			InArgs: []rpc.ArgDesc{
-				{"name", ``}, // string
-				{"acl", ``},  // access.Permissions
-				{"etag", ``}, // string
+				{"name", ``},    // string
+				{"acl", ``},     // access.Permissions
+				{"version", ``}, // string
 			},
 		},
 		{
@@ -493,8 +493,8 @@
 				{"name", ``}, // string
 			},
 			OutArgs: []rpc.ArgDesc{
-				{"acl", ``},  // access.Permissions
-				{"etag", ``}, // string
+				{"acl", ``},     // access.Permissions
+				{"version", ``}, // string
 			},
 		},
 		{
diff --git a/services/wsprd/namespace/request_handler.go b/services/wspr/internal/namespace/request_handler.go
similarity index 95%
rename from services/wsprd/namespace/request_handler.go
rename to services/wspr/internal/namespace/request_handler.go
index ca8c62e..6112c90 100644
--- a/services/wsprd/namespace/request_handler.go
+++ b/services/wspr/internal/namespace/request_handler.go
@@ -98,8 +98,8 @@
 	return nil
 }
 
-func (s *Server) SetPermissions(call rpc.ServerCall, name string, acl access.Permissions, etag string) error {
-	return s.ns.SetPermissions(call.Context(), name, acl, etag)
+func (s *Server) SetPermissions(call rpc.ServerCall, name string, acl access.Permissions, version string) error {
+	return s.ns.SetPermissions(call.Context(), name, acl, version)
 }
 
 func (s *Server) GetPermissions(call rpc.ServerCall, name string) (access.Permissions, string, error) {
diff --git a/services/wsprd/principal/blessings.go b/services/wspr/internal/principal/blessings.go
similarity index 100%
rename from services/wsprd/principal/blessings.go
rename to services/wspr/internal/principal/blessings.go
diff --git a/services/wsprd/principal/blessings.vdl b/services/wspr/internal/principal/blessings.vdl
similarity index 100%
rename from services/wsprd/principal/blessings.vdl
rename to services/wspr/internal/principal/blessings.vdl
diff --git a/services/wsprd/principal/blessings.vdl.go b/services/wspr/internal/principal/blessings.vdl.go
similarity index 81%
rename from services/wsprd/principal/blessings.vdl.go
rename to services/wspr/internal/principal/blessings.vdl.go
index 0c09ae3..dc078be 100644
--- a/services/wsprd/principal/blessings.vdl.go
+++ b/services/wspr/internal/principal/blessings.vdl.go
@@ -15,7 +15,7 @@
 type BlessingsHandle int32
 
 func (BlessingsHandle) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/principal.BlessingsHandle"
+	Name string "v.io/x/ref/services/wspr/internal/principal.BlessingsHandle"
 }) {
 }
 
@@ -25,7 +25,7 @@
 }
 
 func (JsBlessings) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/principal.JsBlessings"
+	Name string "v.io/x/ref/services/wspr/internal/principal.JsBlessings"
 }) {
 }
 
diff --git a/services/wsprd/principal/js_blessings_store.go b/services/wspr/internal/principal/js_blessings_store.go
similarity index 100%
rename from services/wsprd/principal/js_blessings_store.go
rename to services/wspr/internal/principal/js_blessings_store.go
diff --git a/services/wsprd/principal/js_blessings_store_test.go b/services/wspr/internal/principal/js_blessings_store_test.go
similarity index 100%
rename from services/wsprd/principal/js_blessings_store_test.go
rename to services/wspr/internal/principal/js_blessings_store_test.go
diff --git a/services/wsprd/principal/principal.go b/services/wspr/internal/principal/principal.go
similarity index 98%
rename from services/wsprd/principal/principal.go
rename to services/wspr/internal/principal/principal.go
index 7e74c69..da21e59 100644
--- a/services/wsprd/principal/principal.go
+++ b/services/wspr/internal/principal/principal.go
@@ -38,12 +38,11 @@
 	"sync"
 	"time"
 
-	vsecurity "v.io/x/ref/security"
-	"v.io/x/ref/security/serialization"
-
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/v23/vom"
+	vsecurity "v.io/x/ref/lib/security"
+	"v.io/x/ref/lib/security/serialization"
 )
 
 // permissions is a set of a permissions given to an app, containing the account
@@ -70,7 +69,7 @@
 	Accounts map[string]security.Blessings
 }
 
-const pkgPath = "v.io/x/ref/services/wsprd/principal"
+const pkgPath = "v.io/x/ref/services/wspr/internal/principal"
 
 // Errors.
 var (
diff --git a/services/wsprd/principal/principal_test.go b/services/wspr/internal/principal/principal_test.go
similarity index 100%
rename from services/wsprd/principal/principal_test.go
rename to services/wspr/internal/principal/principal_test.go
diff --git a/services/wsprd/principal/util_test.go b/services/wspr/internal/principal/util_test.go
similarity index 100%
rename from services/wsprd/principal/util_test.go
rename to services/wspr/internal/principal/util_test.go
diff --git a/services/wsprd/rpc/server/authorizer.go b/services/wspr/internal/rpc/server/authorizer.go
similarity index 100%
rename from services/wsprd/rpc/server/authorizer.go
rename to services/wspr/internal/rpc/server/authorizer.go
diff --git a/services/wsprd/rpc/server/dispatcher.go b/services/wspr/internal/rpc/server/dispatcher.go
similarity index 98%
rename from services/wsprd/rpc/server/dispatcher.go
rename to services/wspr/internal/rpc/server/dispatcher.go
index 21cec44..82efad2 100644
--- a/services/wsprd/rpc/server/dispatcher.go
+++ b/services/wspr/internal/rpc/server/dispatcher.go
@@ -10,13 +10,12 @@
 	"fmt"
 	"sync"
 
-	"v.io/x/ref/services/wsprd/lib"
-
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vdlroot/signature"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
+	"v.io/x/ref/services/wspr/internal/lib"
 )
 
 type flowFactory interface {
diff --git a/services/wsprd/rpc/server/dispatcher_test.go b/services/wspr/internal/rpc/server/dispatcher_test.go
similarity index 97%
rename from services/wsprd/rpc/server/dispatcher_test.go
rename to services/wspr/internal/rpc/server/dispatcher_test.go
index f0a8798..b659aab 100644
--- a/services/wsprd/rpc/server/dispatcher_test.go
+++ b/services/wspr/internal/rpc/server/dispatcher_test.go
@@ -14,8 +14,8 @@
 	"v.io/v23/security"
 	"v.io/v23/vdl"
 	"v.io/v23/vdlroot/signature"
-	"v.io/x/ref/services/wsprd/lib"
-	"v.io/x/ref/services/wsprd/lib/testwriter"
+	"v.io/x/ref/services/wspr/internal/lib"
+	"v.io/x/ref/services/wspr/internal/lib/testwriter"
 )
 
 type mockFlowFactory struct {
diff --git a/services/wsprd/rpc/server/invoker.go b/services/wspr/internal/rpc/server/invoker.go
similarity index 97%
rename from services/wsprd/rpc/server/invoker.go
rename to services/wspr/internal/rpc/server/invoker.go
index 93c3144..90e86e9 100644
--- a/services/wsprd/rpc/server/invoker.go
+++ b/services/wspr/internal/rpc/server/invoker.go
@@ -16,7 +16,7 @@
 
 var typedNil []int
 
-const pkgPath = "v.io/x/ref/services/wsprd/rpc/server"
+const pkgPath = "v.io/x/ref/services/wspr/internal/rpc/server"
 
 // Errors.
 var (
diff --git a/services/wsprd/rpc/server/server.go b/services/wspr/internal/rpc/server/server.go
similarity index 93%
rename from services/wsprd/rpc/server/server.go
rename to services/wspr/internal/rpc/server/server.go
index c7b8c80..3a97693 100644
--- a/services/wsprd/rpc/server/server.go
+++ b/services/wspr/internal/rpc/server/server.go
@@ -12,9 +12,6 @@
 	"sync"
 	"time"
 
-	"v.io/x/ref/services/wsprd/lib"
-	"v.io/x/ref/services/wsprd/principal"
-
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
@@ -26,6 +23,8 @@
 	"v.io/v23/verror"
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
+	"v.io/x/ref/services/wspr/internal/lib"
+	"v.io/x/ref/services/wspr/internal/principal"
 )
 
 type Flow struct {
@@ -63,6 +62,8 @@
 	FlowHandler
 	HandleStore
 
+	SendLogMessage(level lib.LogLevel, msg string) error
+
 	Context() *context.T
 }
 
@@ -110,6 +111,10 @@
 	outstandingAuthRequests map[int32]chan error
 
 	outstandingValidationRequests map[int32]chan []error
+
+	// statusClose will be closed when the server is shutting down, this will
+	// cause the status poller to exit.
+	statusClose chan struct{}
 }
 
 func NewServer(id uint32, listenSpec *rpc.ListenSpec, helper ServerHelper) (*Server, error) {
@@ -506,6 +511,37 @@
 	}
 }
 
+func (s *Server) readStatus() {
+	// A map of names to the last error message sent.
+	lastErrors := map[string]string{}
+	for {
+		status := s.server.Status()
+		for _, mountStatus := range status.Mounts {
+			var errMsg string
+			if mountStatus.LastMountErr != nil {
+				errMsg = mountStatus.LastMountErr.Error()
+			}
+			mountName := mountStatus.Name
+			if lastMessage, ok := lastErrors[mountName]; !ok || errMsg != lastMessage {
+				if errMsg == "" {
+					s.helper.SendLogMessage(
+						lib.LogLevelInfo, "serve: "+mountName+" successfully mounted ")
+				} else {
+					s.helper.SendLogMessage(
+						lib.LogLevelError, "serve: "+mountName+" failed with: "+errMsg)
+				}
+			}
+			lastErrors[mountName] = errMsg
+		}
+		select {
+		case <-time.After(10 * time.Second):
+			continue
+		case <-s.statusClose:
+			return
+		}
+	}
+}
+
 func (s *Server) Serve(name string) error {
 	s.serverStateLock.Lock()
 	defer s.serverStateLock.Unlock()
@@ -524,6 +560,8 @@
 	if err := s.server.ServeDispatcher(name, s.dispatcher); err != nil {
 		return err
 	}
+	s.statusClose = make(chan struct{}, 1)
+	go s.readStatus()
 	return nil
 }
 
@@ -644,6 +682,9 @@
 	}
 	s.serverStateLock.Lock()
 
+	if s.statusClose != nil {
+		close(s.statusClose)
+	}
 	if s.dispatcher != nil {
 		s.dispatcher.Cleanup()
 	}
diff --git a/services/wsprd/rpc/server/server.vdl b/services/wspr/internal/rpc/server/server.vdl
similarity index 94%
rename from services/wsprd/rpc/server/server.vdl
rename to services/wspr/internal/rpc/server/server.vdl
index 6dd891e..043a986 100644
--- a/services/wsprd/rpc/server/server.vdl
+++ b/services/wspr/internal/rpc/server/server.vdl
@@ -5,8 +5,8 @@
 package server
 
 import (
-  "v.io/x/ref/services/wsprd/principal"
   "v.io/v23/security"
+  "v.io/x/ref/services/wspr/internal/principal"
 )
 
 type SecurityCall struct {
diff --git a/services/wsprd/rpc/server/server.vdl.go b/services/wspr/internal/rpc/server/server.vdl.go
similarity index 78%
rename from services/wsprd/rpc/server/server.vdl.go
rename to services/wspr/internal/rpc/server/server.vdl.go
index a58943a..21c0041 100644
--- a/services/wsprd/rpc/server/server.vdl.go
+++ b/services/wspr/internal/rpc/server/server.vdl.go
@@ -16,7 +16,7 @@
 
 	// VDL user imports
 	"v.io/v23/security"
-	"v.io/x/ref/services/wsprd/principal"
+	"v.io/x/ref/services/wspr/internal/principal"
 )
 
 type SecurityCall struct {
@@ -32,7 +32,7 @@
 }
 
 func (SecurityCall) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/rpc/server.SecurityCall"
+	Name string "v.io/x/ref/services/wspr/internal/rpc/server.SecurityCall"
 }) {
 }
 
@@ -42,7 +42,7 @@
 }
 
 func (CaveatValidationRequest) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/rpc/server.CaveatValidationRequest"
+	Name string "v.io/x/ref/services/wspr/internal/rpc/server.CaveatValidationRequest"
 }) {
 }
 
@@ -51,7 +51,7 @@
 }
 
 func (CaveatValidationResponse) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/rpc/server.CaveatValidationResponse"
+	Name string "v.io/x/ref/services/wspr/internal/rpc/server.CaveatValidationResponse"
 }) {
 }
 
@@ -62,8 +62,8 @@
 }
 
 var (
-	ErrCaveatValidationTimeout                 = verror.Register("v.io/x/ref/services/wsprd/rpc/server.CaveatValidationTimeout", verror.NoRetry, "{1:}{2:} Caveat validation has timed out")
-	ErrInvalidValidationResponseFromJavascript = verror.Register("v.io/x/ref/services/wsprd/rpc/server.InvalidValidationResponseFromJavascript", verror.NoRetry, "{1:}{2:} Invalid validation response from javascript")
+	ErrCaveatValidationTimeout                 = verror.Register("v.io/x/ref/services/wspr/internal/rpc/server.CaveatValidationTimeout", verror.NoRetry, "{1:}{2:} Caveat validation has timed out")
+	ErrInvalidValidationResponseFromJavascript = verror.Register("v.io/x/ref/services/wspr/internal/rpc/server.InvalidValidationResponseFromJavascript", verror.NoRetry, "{1:}{2:} Invalid validation response from javascript")
 )
 
 func init() {
diff --git a/services/wsprd/wspr.go b/services/wspr/wsprd/main.go
similarity index 88%
rename from services/wsprd/wspr.go
rename to services/wspr/wsprd/main.go
index 9e242ee..bd2c1ea 100644
--- a/services/wsprd/wspr.go
+++ b/services/wspr/wsprd/main.go
@@ -14,7 +14,7 @@
 	"v.io/x/ref/lib/signals"
 	// TODO(cnicolaou,benj): figure out how to support roaming as a chrome plugin
 	_ "v.io/x/ref/profiles/roaming"
-	"v.io/x/ref/services/wsprd/wspr"
+	"v.io/x/ref/services/wspr/wsprlib"
 )
 
 func main() {
@@ -27,7 +27,7 @@
 	defer shutdown()
 
 	listenSpec := v23.GetListenSpec(ctx)
-	proxy := wspr.NewWSPR(ctx, *port, &listenSpec, *identd, nil)
+	proxy := wsprlib.NewWSPR(ctx, *port, &listenSpec, *identd, nil)
 	defer proxy.Shutdown()
 
 	addr := proxy.Listen()
diff --git a/services/wsprd/wspr/pipe.go b/services/wspr/wsprlib/pipe.go
similarity index 97%
rename from services/wsprd/wspr/pipe.go
rename to services/wspr/wsprlib/pipe.go
index 1411487..2fa9aaf 100644
--- a/services/wsprd/wspr/pipe.go
+++ b/services/wspr/wsprlib/pipe.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package wspr
+package wsprlib
 
 import (
 	"encoding/json"
@@ -14,8 +14,8 @@
 
 	"v.io/v23"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/services/wsprd/app"
-	"v.io/x/ref/services/wsprd/lib"
+	"v.io/x/ref/services/wspr/internal/app"
+	"v.io/x/ref/services/wspr/internal/lib"
 
 	"github.com/gorilla/websocket"
 )
diff --git a/services/wsprd/wspr/writer.go b/services/wspr/wsprlib/writer.go
similarity index 94%
rename from services/wsprd/wspr/writer.go
rename to services/wspr/wsprlib/writer.go
index 956c6bb..ef4be93 100644
--- a/services/wsprd/wspr/writer.go
+++ b/services/wspr/wsprlib/writer.go
@@ -2,18 +2,17 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package wspr
+package wsprlib
 
 import (
 	"fmt"
 	"path/filepath"
 	"runtime"
 
-	"v.io/x/ref/services/wsprd/lib"
-
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/services/wsprd/app"
+	"v.io/x/ref/services/wspr/internal/app"
+	"v.io/x/ref/services/wspr/internal/lib"
 
 	"github.com/gorilla/websocket"
 )
diff --git a/services/wsprd/wspr/wspr.go b/services/wspr/wsprlib/wspr.go
similarity index 97%
rename from services/wsprd/wspr/wspr.go
rename to services/wspr/wsprlib/wspr.go
index 83e59a5..5b87b2b 100644
--- a/services/wsprd/wspr/wspr.go
+++ b/services/wspr/wsprlib/wspr.go
@@ -16,7 +16,7 @@
 //   "IsStreaming" : true/false
 // }
 //
-package wspr
+package wsprlib
 
 import (
 	"bytes"
@@ -34,8 +34,8 @@
 	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 
-	"v.io/x/ref/services/wsprd/account"
-	"v.io/x/ref/services/wsprd/principal"
+	"v.io/x/ref/services/wspr/internal/account"
+	"v.io/x/ref/services/wspr/internal/principal"
 )
 
 const (
diff --git a/services/wsprd/browspr/browspr.vdl b/services/wsprd/browspr/browspr.vdl
deleted file mode 100644
index 276bc30..0000000
--- a/services/wsprd/browspr/browspr.vdl
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package browspr
-
-import(
-  "v.io/x/ref/services/wsprd/account"
-  "v.io/x/ref/services/identity"
-)
-
-type StartMessage struct {
-  Identityd             string
-  IdentitydBlessingRoot identity.BlessingRootResponse
-  Proxy                 string
-  NamespaceRoot         string
-  LogLevel              int32
-  LogModule             string
-}
-
-type AssociateAccountMessage struct {
-  Account string
-  Origin  string
-  Caveats []account.Caveat
-}
-
-type CreateAccountMessage struct {
-  Token string
-}
-
-type CleanupMessage struct {
-  InstanceId int32
-}
-
-type OriginHasAccountMessage struct {
-  Origin string
-}
-
-type GetAccountsMessage struct {}
-
-type CreateInstanceMessage struct {
-  InstanceId     int32
-  Origin         string
-  NamespaceRoots []string
-  Proxy          string
-}
diff --git a/services/wsprd/lib/writer.vdl.go b/services/wsprd/lib/writer.vdl.go
deleted file mode 100644
index 483ec60..0000000
--- a/services/wsprd/lib/writer.vdl.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This file was auto-generated by the vanadium vdl tool.
-// Source: writer.vdl
-
-package lib
-
-import (
-	// VDL system imports
-	"v.io/v23/vdl"
-
-	// VDL user imports
-	"v.io/v23/vtrace"
-)
-
-// The response from the javascript server to the proxy.
-type ServerRpcReply struct {
-	Results       []*vdl.Value
-	Err           error
-	TraceResponse vtrace.Response
-}
-
-func (ServerRpcReply) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/lib.ServerRpcReply"
-}) {
-}
-
-func init() {
-	vdl.Register((*ServerRpcReply)(nil))
-}
diff --git a/test/modules/modules_test.go b/test/modules/modules_test.go
index 025a4c0..79ca03c 100644
--- a/test/modules/modules_test.go
+++ b/test/modules/modules_test.go
@@ -22,15 +22,14 @@
 
 	"v.io/v23"
 	"v.io/v23/verror"
-
 	"v.io/x/ref/envvar"
 	"v.io/x/ref/lib/exec"
-	execconsts "v.io/x/ref/lib/exec/consts"
-	_ "v.io/x/ref/profiles"
-	vsecurity "v.io/x/ref/security"
+	vsecurity "v.io/x/ref/lib/security"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/modules"
 	"v.io/x/ref/test/testutil"
+
+	_ "v.io/x/ref/profiles"
 )
 
 func init() {
@@ -603,7 +602,7 @@
 	}
 
 	for _, want := range childEnv {
-		if want == "\""+execconsts.ExecVersionVariable+"=\"" {
+		if want == "\""+exec.ExecVersionVariable+"=\"" {
 			continue
 		}
 		if !find(want, shEnv) {
diff --git a/test/modules/shell.go b/test/modules/shell.go
index d72010e..729c360 100644
--- a/test/modules/shell.go
+++ b/test/modules/shell.go
@@ -158,8 +158,8 @@
 	"v.io/v23/security"
 	"v.io/x/ref/envvar"
 	"v.io/x/ref/lib/exec"
-	"v.io/x/ref/security/agent"
-	"v.io/x/ref/security/agent/keymgr"
+	"v.io/x/ref/services/agent"
+	"v.io/x/ref/services/agent/keymgr"
 	"v.io/x/ref/test/expect"
 )
 
diff --git a/test/modules/util.go b/test/modules/util.go
index ca6f5c3..a19e8b9 100644
--- a/test/modules/util.go
+++ b/test/modules/util.go
@@ -13,10 +13,9 @@
 	"os"
 	"strings"
 
-	vsecurity "v.io/x/ref/security"
-
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
+	vsecurity "v.io/x/ref/lib/security"
 )
 
 func newLogfile(prefix, name string) (*os.File, error) {
diff --git a/test/testutil/security.go b/test/testutil/security.go
index 1cab8b7..a59c5f8 100644
--- a/test/testutil/security.go
+++ b/test/testutil/security.go
@@ -6,13 +6,13 @@
 
 import (
 	"v.io/v23/security"
-	vsecurity "v.io/x/ref/security"
+	vsecurity "v.io/x/ref/lib/security"
 )
 
 // NewPrincipal creates a new security.Principal.
 //
 // It is a convenience wrapper over utility functions available in the
-// v.io/x/ref/security package.
+// v.io/x/ref/lib/security package.
 //
 // If the set of blessingNames provided is non-empty, it creates self-signed
 // blessings for each of those names and marks all of them as the default and
diff --git a/test/v23tests/v23tests.go b/test/v23tests/v23tests.go
index 10a3bf6..9f78de7 100644
--- a/test/v23tests/v23tests.go
+++ b/test/v23tests/v23tests.go
@@ -18,13 +18,11 @@
 	"testing"
 	"time"
 
-	"v.io/x/lib/vlog"
-
 	"v.io/v23"
 	"v.io/v23/security"
-
+	"v.io/x/lib/vlog"
 	"v.io/x/ref/envvar"
-	"v.io/x/ref/security/agent"
+	"v.io/x/ref/services/agent"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/modules"
 	"v.io/x/ref/test/testutil"
