diff --git a/lib/modules/core/mounttable.go b/lib/modules/core/mounttable.go
index 00acb04..9ea0084 100644
--- a/lib/modules/core/mounttable.go
+++ b/lib/modules/core/mounttable.go
@@ -1,6 +1,7 @@
 package core
 
 import (
+	"flag"
 	"fmt"
 	"io"
 	"os"
@@ -13,7 +14,11 @@
 	mounttable "v.io/core/veyron/services/mounttable/lib"
 )
 
+var details *bool
+
 func init() {
+	details = flag.CommandLine.Bool("l", false, "use a long listing format for ls")
+
 	modules.RegisterChild(RootMTCommand, "", rootMountTable)
 	modules.RegisterChild(MTCommand, `<mount point>
 	reads NAMESPACE_ROOT from its environment and mounts a new mount table at <mount point>`, mountTable)
@@ -46,9 +51,9 @@
 		}
 		mp = args[0]
 	}
-	mt, err := mounttable.NewMountTable("")
+	mt, err := mounttable.NewMountTableDispatcher("")
 	if err != nil {
-		return fmt.Errorf("mounttable.NewMountTable failed: %s", err)
+		return fmt.Errorf("mounttable.NewMountTableDispatcher failed: %s", err)
 	}
 	eps, err := server.Listen(lspec)
 	if err != nil {
@@ -69,11 +74,6 @@
 	ctx, shutdown := veyron2.Init()
 	defer shutdown()
 
-	details := false
-	if len(args) > 0 && args[0] == "-l" {
-		details = true
-		args = args[1:]
-	}
 	ns := veyron2.GetNamespace(ctx)
 	entry := 0
 	output := ""
@@ -83,7 +83,7 @@
 			return err
 		}
 		for n := range ch {
-			if details {
+			if *details {
 				output += fmt.Sprintf("R%d=%s[", entry, n.Name)
 				t := ""
 				for _, s := range n.Servers {
diff --git a/runtimes/google/ipc/client.go b/runtimes/google/ipc/client.go
index a534864..15c86de 100644
--- a/runtimes/google/ipc/client.go
+++ b/runtimes/google/ipc/client.go
@@ -112,7 +112,6 @@
 }
 
 var _ ipc.Client = (*client)(nil)
-var _ ipc.BindOpt = (*client)(nil)
 
 type vcInfo struct {
 	vc       stream.VC
@@ -686,11 +685,6 @@
 	c.vcMapMu.Unlock()
 }
 
-// IPCBindOpt makes client implement BindOpt.
-func (c *client) IPCBindOpt() {
-	//nologcall
-}
-
 // flowClient implements the RPC client-side protocol for a single RPC, over a
 // flow that's already connected to the server.
 type flowClient struct {
diff --git a/runtimes/google/naming/namespace/all_test.go b/runtimes/google/naming/namespace/all_test.go
index 170cfac..f57b00c 100644
--- a/runtimes/google/naming/namespace/all_test.go
+++ b/runtimes/google/naming/namespace/all_test.go
@@ -167,11 +167,11 @@
 }
 
 func runMT(t *testing.T, ctx *context.T, mountPoint string) *serverEntry {
-	mt, err := service.NewMountTable("")
+	mtd, err := service.NewMountTableDispatcher("")
 	if err != nil {
-		boom(t, "NewMountTable returned error: %v", err)
+		boom(t, "NewMountTableDispatcher returned error: %v", err)
 	}
-	return run(t, ctx, mt, mountPoint, true)
+	return run(t, ctx, mtd, mountPoint, true)
 }
 
 func run(t *testing.T, ctx *context.T, disp ipc.Dispatcher, mountPoint string, mt bool) *serverEntry {
diff --git a/runtimes/google/testing/mocks/ipc/simple_client.go b/runtimes/google/testing/mocks/ipc/simple_client.go
index e9ce243..7ce530b 100644
--- a/runtimes/google/testing/mocks/ipc/simple_client.go
+++ b/runtimes/google/testing/mocks/ipc/simple_client.go
@@ -13,18 +13,23 @@
 	"v.io/core/veyron2/vom"
 )
 
+type ClientWithTimesCalled interface {
+	ipc.Client
+	TimesCalled(method string) int
+}
+
 // NewSimpleClient creates a new mocked ipc client where the given map of method name
 // to outputs is used for evaluating the method calls.
 // It also adds some testing features such as counters for number of times a method is called
-func NewSimpleClient(methodsResults map[string][]interface{}) *SimpleMockClient {
-	return &SimpleMockClient{
+func NewSimpleClient(methodsResults map[string][]interface{}) ClientWithTimesCalled {
+	return &simpleMockClient{
 		results:     methodsResults,
 		timesCalled: make(map[string]int),
 	}
 }
 
-// SimpleMockClient implements ipc.Client
-type SimpleMockClient struct {
+// simpleMockClient implements ipc.Client
+type simpleMockClient struct {
 	// Protects timesCalled
 	sync.Mutex
 
@@ -35,17 +40,12 @@
 }
 
 // TimesCalled returns number of times the given method has been called.
-func (c *SimpleMockClient) TimesCalled(method string) int {
+func (c *simpleMockClient) TimesCalled(method string) int {
 	return c.timesCalled[method]
 }
 
-// IPCBindOpt Implements ipc.Client
-func (c *SimpleMockClient) IPCBindOpt() {
-	//nologcall
-}
-
 // StartCall Implements ipc.Client
-func (c *SimpleMockClient) StartCall(ctx *context.T, name, method string, args []interface{}, opts ...ipc.CallOpt) (ipc.Call, error) {
+func (c *simpleMockClient) StartCall(ctx *context.T, name, method string, args []interface{}, opts ...ipc.CallOpt) (ipc.Call, error) {
 	defer vlog.LogCall()()
 	results, ok := c.results[method]
 	if !ok {
@@ -77,7 +77,7 @@
 }
 
 // Close implements ipc.Client
-func (*SimpleMockClient) Close() {
+func (*simpleMockClient) Close() {
 	defer vlog.LogCall()()
 }
 
diff --git a/services/identity/server/identityd.go b/services/identity/server/identityd.go
index b415f20..3416ef8 100644
--- a/services/identity/server/identityd.go
+++ b/services/identity/server/identityd.go
@@ -43,7 +43,7 @@
 	dischargerService   = "discharger"
 )
 
-type identityd struct {
+type IdentityServer struct {
 	oauthProvider      oauth.OAuthProvider
 	auditor            audit.Auditor
 	blessingLogReader  auditor.BlessingLogReader
@@ -58,8 +58,8 @@
 // - auditor and blessingLogReader to audit the root principal and read audit logs
 // - revocationManager to store revocation data and grant discharges
 // - oauthBlesserParams to configure the identity.OAuthBlesser service
-func NewIdentityServer(oauthProvider oauth.OAuthProvider, auditor audit.Auditor, blessingLogReader auditor.BlessingLogReader, revocationManager revocation.RevocationManager, oauthBlesserParams blesser.OAuthBlesserParams, caveatSelector caveats.CaveatSelector, emailClassifier *util.EmailClassifier) *identityd {
-	return &identityd{
+func NewIdentityServer(oauthProvider oauth.OAuthProvider, auditor audit.Auditor, blessingLogReader auditor.BlessingLogReader, revocationManager revocation.RevocationManager, oauthBlesserParams blesser.OAuthBlesserParams, caveatSelector caveats.CaveatSelector, emailClassifier *util.EmailClassifier) *IdentityServer {
+	return &IdentityServer{
 		oauthProvider,
 		auditor,
 		blessingLogReader,
@@ -70,7 +70,7 @@
 	}
 }
 
-func (s *identityd) Serve(ctx *context.T, listenSpec *ipc.ListenSpec, host, httpaddr, tlsconfig string) {
+func (s *IdentityServer) Serve(ctx *context.T, listenSpec *ipc.ListenSpec, host, httpaddr, tlsconfig string) {
 	ctx, err := veyron2.SetPrincipal(ctx, audit.NewPrincipal(
 		veyron2.GetPrincipal(ctx), s.auditor))
 	if err != nil {
@@ -80,7 +80,7 @@
 	<-signals.ShutdownOnSignals(ctx)
 }
 
-func (s *identityd) Listen(ctx *context.T, listenSpec *ipc.ListenSpec, host, httpaddr, tlsconfig string) (ipc.Server, []string, string) {
+func (s *IdentityServer) Listen(ctx *context.T, listenSpec *ipc.ListenSpec, host, httpaddr, tlsconfig string) (ipc.Server, []string, string) {
 	// Setup handlers
 
 	// json-encoded public key and blessing names of this server
@@ -153,7 +153,7 @@
 }
 
 // Starts the blessing services and the discharging service on the same port.
-func (s *identityd) setupServices(ctx *context.T, listenSpec *ipc.ListenSpec, macaroonKey []byte) (ipc.Server, []string, error) {
+func (s *IdentityServer) setupServices(ctx *context.T, listenSpec *ipc.ListenSpec, macaroonKey []byte) (ipc.Server, []string, error) {
 	server, err := veyron2.NewServer(ctx)
 	if err != nil {
 		return nil, nil, fmt.Errorf("failed to create new ipc.Server: %v", err)
diff --git a/services/mgmt/application/impl/dispatcher.go b/services/mgmt/application/impl/dispatcher.go
index 6b13186..b08cddd 100644
--- a/services/mgmt/application/impl/dispatcher.go
+++ b/services/mgmt/application/impl/dispatcher.go
@@ -3,6 +3,7 @@
 import (
 	"path/filepath"
 
+	"v.io/core/veyron2/ipc"
 	"v.io/core/veyron2/naming"
 	"v.io/core/veyron2/security"
 	"v.io/core/veyron2/services/security/access"
@@ -22,7 +23,7 @@
 
 // NewDispatcher is the dispatcher factory. storeDir is a path to a directory in which to
 // serialize the applicationd state.
-func NewDispatcher(storeDir string) (*dispatcher, error) {
+func NewDispatcher(storeDir string) (ipc.Dispatcher, error) {
 	store, err := fs.NewMemstore(filepath.Join(storeDir, "applicationdstate.db"))
 	if err != nil {
 		return nil, err
diff --git a/services/mgmt/application/impl/service.go b/services/mgmt/application/impl/service.go
index 8ad14cd..fa6dfc5 100644
--- a/services/mgmt/application/impl/service.go
+++ b/services/mgmt/application/impl/service.go
@@ -5,6 +5,7 @@
 
 	"v.io/core/veyron/services/mgmt/lib/acls"
 	"v.io/core/veyron/services/mgmt/lib/fs"
+	"v.io/core/veyron/services/mgmt/repository"
 
 	"v.io/core/veyron2/ipc"
 	"v.io/core/veyron2/naming"
@@ -37,7 +38,7 @@
 )
 
 // NewApplicationService returns a new Application service implementation.
-func NewApplicationService(store *fs.Memstore, storeRoot, suffix string) *appRepoService {
+func NewApplicationService(store *fs.Memstore, storeRoot, suffix string) repository.ApplicationServerMethods {
 	return &appRepoService{store: store, storeRoot: storeRoot, suffix: suffix}
 }
 
diff --git a/services/mgmt/binary/impl/dispatcher.go b/services/mgmt/binary/impl/dispatcher.go
index a8538d3..df9fc64 100644
--- a/services/mgmt/binary/impl/dispatcher.go
+++ b/services/mgmt/binary/impl/dispatcher.go
@@ -5,6 +5,7 @@
 	"os"
 	"path/filepath"
 
+	"v.io/core/veyron2/ipc"
 	"v.io/core/veyron2/security"
 	"v.io/core/veyron2/services/mgmt/repository"
 	"v.io/core/veyron2/services/security/access"
@@ -26,7 +27,7 @@
 }
 
 // NewDispatcher is the dispatcher factory.
-func NewDispatcher(principal security.Principal, state *state) (*dispatcher, error) {
+func NewDispatcher(principal security.Principal, state *state) (ipc.Dispatcher, error) {
 	return &dispatcher{
 		state:     state,
 		locks:     acls.NewLocks(),
diff --git a/services/mgmt/build/impl/service.go b/services/mgmt/build/impl/service.go
index e5569b4..6e2395b 100644
--- a/services/mgmt/build/impl/service.go
+++ b/services/mgmt/build/impl/service.go
@@ -30,7 +30,7 @@
 }
 
 // NewBuilderService returns a new Build service implementation.
-func NewBuilderService(gobin, goroot string) *builderService {
+func NewBuilderService(gobin, goroot string) build.BuilderServerMethods {
 	return &builderService{
 		gobin:  gobin,
 		goroot: goroot,
diff --git a/services/mgmt/debug/dispatcher.go b/services/mgmt/debug/dispatcher.go
index 02d10bb..205ae58 100644
--- a/services/mgmt/debug/dispatcher.go
+++ b/services/mgmt/debug/dispatcher.go
@@ -21,7 +21,7 @@
 
 var _ ipc.Dispatcher = (*dispatcher)(nil)
 
-func NewDispatcher(logsDir string, authorizer security.Authorizer) *dispatcher {
+func NewDispatcher(logsDir string, authorizer security.Authorizer) ipc.Dispatcher {
 	return &dispatcher{logsDir, authorizer}
 }
 
diff --git a/services/mgmt/profile/impl/dispatcher.go b/services/mgmt/profile/impl/dispatcher.go
index 40f04e8..35396a1 100644
--- a/services/mgmt/profile/impl/dispatcher.go
+++ b/services/mgmt/profile/impl/dispatcher.go
@@ -3,11 +3,11 @@
 import (
 	"path/filepath"
 
-	"v.io/core/veyron/services/mgmt/repository"
-
-	"v.io/core/veyron/services/mgmt/lib/fs"
 	"v.io/core/veyron2/ipc"
 	"v.io/core/veyron2/security"
+
+	"v.io/core/veyron/services/mgmt/lib/fs"
+	"v.io/core/veyron/services/mgmt/repository"
 )
 
 // dispatcher holds the state of the profile repository dispatcher.
@@ -21,7 +21,7 @@
 
 // NewDispatcher is the dispatcher factory. storeDir is a path to a
 // directory in which the profile state is persisted.
-func NewDispatcher(storeDir string, authorizer security.Authorizer) (*dispatcher, error) {
+func NewDispatcher(storeDir string, authorizer security.Authorizer) (ipc.Dispatcher, error) {
 	store, err := fs.NewMemstore(filepath.Join(storeDir, "profilestate.db"))
 	if err != nil {
 		return nil, err
diff --git a/services/mgmt/profile/impl/service.go b/services/mgmt/profile/impl/service.go
index 329672b..f528d5a 100644
--- a/services/mgmt/profile/impl/service.go
+++ b/services/mgmt/profile/impl/service.go
@@ -5,6 +5,7 @@
 
 	"v.io/core/veyron/services/mgmt/lib/fs"
 	"v.io/core/veyron/services/mgmt/profile"
+	"v.io/core/veyron/services/mgmt/repository"
 
 	"v.io/core/veyron2/ipc"
 	"v.io/core/veyron2/naming"
@@ -27,7 +28,7 @@
 )
 
 // NewProfileService returns a new Profile service implementation.
-func NewProfileService(store *fs.Memstore, storeRoot, suffix string) *profileService {
+func NewProfileService(store *fs.Memstore, storeRoot, suffix string) repository.ProfileServerMethods {
 	return &profileService{store: store, storeRoot: storeRoot, suffix: suffix}
 }
 
diff --git a/services/mounttable/lib/mounttable.go b/services/mounttable/lib/mounttable.go
index 9280527..93f0926 100644
--- a/services/mounttable/lib/mounttable.go
+++ b/services/mounttable/lib/mounttable.go
@@ -69,13 +69,13 @@
 
 const templateVar = "%%"
 
-// NewMountTable creates a new server that uses the ACLs specified in
+// NewMountTableDispatcher creates a new server that uses the ACLs specified in
 // aclfile for authorization.
 //
 // aclfile is a JSON-encoded mapping from paths in the mounttable to the
 // access.TaggedACLMap for that path. The tags used in the map are the typical
 // access tags (the Tag type defined in veyron2/services/security/access).
-func NewMountTable(aclfile string) (*mountTable, error) {
+func NewMountTableDispatcher(aclfile string) (ipc.Dispatcher, error) {
 	mt := &mountTable{
 		root: new(node),
 	}
@@ -413,11 +413,23 @@
 
 // Mount a server onto the name in the receiver.
 func (ms *mountContext) Mount(ctx ipc.ServerContext, server string, ttlsecs uint32, flags naming.MountFlag) error {
+	return ms.MountX(ctx, server, nil, ttlsecs, flags)
+}
+
+func (ms *mountContext) MountX(ctx ipc.ServerContext, server string, patterns []security.BlessingPattern, ttlsecs uint32, flags naming.MountFlag) error {
+	if len(patterns) == 0 {
+		// No patterns provided in the request, take the conservative
+		// approach and assume that the server being mounted will
+		// present the same blessings as the client calling Mount.
+		for _, b := range ctx.RemoteBlessings().ForContext(ctx) {
+			patterns = append(patterns, security.BlessingPattern(b))
+		}
+	}
 	mt := ms.mt
 	if ttlsecs == 0 {
 		ttlsecs = 10 * 365 * 24 * 60 * 60 // a really long time
 	}
-	vlog.VI(2).Infof("*********************Mount %q -> %s", ms.name, server)
+	vlog.VI(2).Infof("*********************Mount %q -> %v%s", ms.name, patterns, server)
 
 	// Make sure the server address is reasonable.
 	epString := server
@@ -445,13 +457,13 @@
 	}
 	wantMT := hasMTFlag(flags)
 	if n.mount == nil {
-		n.mount = &mount{servers: NewServerList(), mt: wantMT}
+		n.mount = &mount{servers: newServerList(), mt: wantMT}
 	} else {
 		if wantMT != n.mount.mt {
 			return fmt.Errorf("MT doesn't match")
 		}
 	}
-	n.mount.servers.add(server, time.Duration(ttlsecs)*time.Second)
+	n.mount.servers.add(server, patterns, time.Duration(ttlsecs)*time.Second)
 	return nil
 }
 
diff --git a/services/mounttable/lib/mounttable_test.go b/services/mounttable/lib/mounttable_test.go
index a1404d9..7ac6586 100644
--- a/services/mounttable/lib/mounttable_test.go
+++ b/services/mounttable/lib/mounttable_test.go
@@ -2,7 +2,6 @@
 
 import (
 	"errors"
-	"fmt"
 	"io"
 	"reflect"
 	"runtime/debug"
@@ -33,10 +32,10 @@
 	t.Fatal(string(debug.Stack()))
 }
 
-func doMount(t *testing.T, ctx *context.T, ep, suffix, service string, shouldSucceed bool) {
+func doMount(t *testing.T, ctx *context.T, ep, suffix, service string, blessingPatterns []security.BlessingPattern, shouldSucceed bool) {
 	name := naming.JoinAddressName(ep, suffix)
 	client := veyron2.GetClient(ctx)
-	call, err := client.StartCall(ctx, name, "Mount", []interface{}{service, uint32(ttlSecs), 0}, options.NoResolve{})
+	call, err := client.StartCall(ctx, name, "MountX", []interface{}{service, blessingPatterns, uint32(ttlSecs), 0}, options.NoResolve{})
 	if err != nil {
 		if !shouldSucceed {
 			return
@@ -179,22 +178,33 @@
 	}
 }
 
-// resolve assumes that the mount contains 0 or 1 servers.
-func resolve(ctx *context.T, name string) (string, error) {
+func mountentry2names(e *naming.VDLMountEntry) []string {
+	names := make([]string, len(e.Servers))
+	for idx, s := range e.Servers {
+		names[idx] = naming.JoinAddressName(s.Server, e.Name)
+	}
+	return names
+}
+
+func strslice(strs ...string) []string {
+	return strs
+}
+
+func resolve(ctx *context.T, name string) (*naming.VDLMountEntry, error) {
 	// Resolve the name one level.
 	client := veyron2.GetClient(ctx)
 	call, err := client.StartCall(ctx, name, "ResolveStep", nil, options.NoResolve{})
 	if err != nil {
-		return "", err
+		return nil, err
 	}
 	var entry naming.VDLMountEntry
 	if ierr := call.Finish(&entry, &err); ierr != nil {
-		return "", ierr
+		return nil, ierr
 	}
 	if len(entry.Servers) < 1 {
-		return "", errors.New("resolve returned no servers")
+		return nil, errors.New("resolve returned no servers")
 	}
-	return naming.JoinAddressName(entry.Servers[0].Server, entry.Name), nil
+	return &entry, nil
 }
 
 func export(t *testing.T, ctx *context.T, name, contents string) {
@@ -205,7 +215,7 @@
 	}
 	// Export the value.
 	client := veyron2.GetClient(ctx)
-	call, err := client.StartCall(ctx, resolved, "Export", []interface{}{contents, true}, options.NoResolve{})
+	call, err := client.StartCall(ctx, mountentry2names(resolved)[0], "Export", []interface{}{contents, true}, options.NoResolve{})
 	if err != nil {
 		boom(t, "Failed to Export.StartCall %s to %s: %s", name, contents, err)
 	}
@@ -228,7 +238,7 @@
 	}
 	// Look up the value.
 	client := veyron2.GetClient(ctx)
-	call, err := client.StartCall(ctx, resolved, "Lookup", nil, options.NoResolve{})
+	call, err := client.StartCall(ctx, mountentry2names(resolved)[0], "Lookup", nil, options.NoResolve{})
 	if err != nil {
 		if shouldSucceed {
 			boom(t, "Failed Lookup.StartCall %s: %s", name, err)
@@ -259,9 +269,9 @@
 		boom(t, "r.NewServer: %s", err)
 	}
 	// Add mount table service.
-	mt, err := NewMountTable(acl)
+	mt, err := NewMountTableDispatcher(acl)
 	if err != nil {
-		boom(t, "NewMountTable: %v", err)
+		boom(t, "NewMountTableDispatcher: %v", err)
 	}
 	// Start serving on a loopback address.
 	eps, err := server.Listen(veyron2.GetListenSpec(rootCtx))
@@ -310,7 +320,7 @@
 
 	// Mount the collection server into the mount table.
 	vlog.Infof("Mount the collection server into the mount table.")
-	doMount(t, rootCtx, mtAddr, "stuff", collectionName, true)
+	doMount(t, rootCtx, mtAddr, "stuff", collectionName, nil, true)
 
 	// Create a few objects and make sure we can read them.
 	vlog.Infof("Create a few objects.")
@@ -328,9 +338,9 @@
 
 	// Test multiple mounts.
 	vlog.Infof("Multiple mounts.")
-	doMount(t, rootCtx, mtAddr, "a/b", collectionName, true)
-	doMount(t, rootCtx, mtAddr, "x/y", collectionName, true)
-	doMount(t, rootCtx, mtAddr, "alpha//beta", collectionName, true)
+	doMount(t, rootCtx, mtAddr, "a/b", collectionName, nil, true)
+	doMount(t, rootCtx, mtAddr, "x/y", collectionName, nil, true)
+	doMount(t, rootCtx, mtAddr, "alpha//beta", collectionName, nil, true)
 	vlog.Infof("Make sure we can read them.")
 	checkContents(t, rootCtx, naming.JoinAddressName(mtAddr, "stuff/falls"), "falls mainly on the plain", true)
 	checkContents(t, rootCtx, naming.JoinAddressName(mtAddr, "a/b/falls"), "falls mainly on the plain", true)
@@ -360,7 +370,7 @@
 
 	// Test specific unmount.
 	vlog.Info("Test specific unmount.")
-	doMount(t, rootCtx, mtAddr, "a/b", collectionName, true)
+	doMount(t, rootCtx, mtAddr, "a/b", collectionName, nil, true)
 	doUnmount(t, rootCtx, mtAddr, "a/b", collectionName, true)
 	checkContents(t, rootCtx, naming.JoinAddressName(mtAddr, "a/b/falls"), "falls mainly on the plain", false)
 
@@ -368,15 +378,15 @@
 	vlog.Info("Try timing out a mount.")
 	ft := NewFakeTimeClock()
 	setServerListClock(ft)
-	doMount(t, rootCtx, mtAddr, "stuffWithTTL", collectionName, true)
+	doMount(t, rootCtx, mtAddr, "stuffWithTTL", collectionName, nil, true)
 	checkContents(t, rootCtx, naming.JoinAddressName(mtAddr, "stuffWithTTL/the/rain"), "the rain", true)
 	ft.advance(time.Duration(ttlSecs+4) * time.Second)
 	checkContents(t, rootCtx, naming.JoinAddressName(mtAddr, "stuffWithTTL/the/rain"), "the rain", false)
 
 	// Test unauthorized mount.
 	vlog.Info("Test unauthorized mount.")
-	doMount(t, bobCtx, mtAddr, "/a/b", collectionName, false)
-	doMount(t, aliceCtx, mtAddr, "/a/b", collectionName, false)
+	doMount(t, bobCtx, mtAddr, "/a/b", collectionName, nil, false)
+	doMount(t, aliceCtx, mtAddr, "/a/b", collectionName, nil, false)
 
 	doUnmount(t, bobCtx, mtAddr, "x/y", collectionName, false)
 }
@@ -456,9 +466,9 @@
 
 	// set up a mount space
 	fakeServer := naming.JoinAddressName(estr, "quux")
-	doMount(t, rootCtx, estr, "one/bright/day", fakeServer, true)
-	doMount(t, rootCtx, estr, "in/the/middle", fakeServer, true)
-	doMount(t, rootCtx, estr, "of/the/night", fakeServer, true)
+	doMount(t, rootCtx, estr, "one/bright/day", fakeServer, nil, true)
+	doMount(t, rootCtx, estr, "in/the/middle", fakeServer, nil, true)
+	doMount(t, rootCtx, estr, "of/the/night", fakeServer, nil, true)
 
 	// Try various globs.
 	tests := []struct {
@@ -503,14 +513,14 @@
 	fakeServer := naming.JoinAddressName(estr, "quux")
 
 	// Noone should be able to mount on someone else's names.
-	doMount(t, aliceCtx, estr, "users/ted", fakeServer, false)
-	doMount(t, bobCtx, estr, "users/carol", fakeServer, false)
-	doMount(t, rootCtx, estr, "users/george", fakeServer, false)
+	doMount(t, aliceCtx, estr, "users/ted", fakeServer, nil, false)
+	doMount(t, bobCtx, estr, "users/carol", fakeServer, nil, false)
+	doMount(t, rootCtx, estr, "users/george", fakeServer, nil, false)
 
 	// Anyone should be able to mount on their own names.
-	doMount(t, aliceCtx, estr, "users/alice", fakeServer, true)
-	doMount(t, bobCtx, estr, "users/bob", fakeServer, true)
-	doMount(t, rootCtx, estr, "users/root", fakeServer, true)
+	doMount(t, aliceCtx, estr, "users/alice", fakeServer, nil, true)
+	doMount(t, bobCtx, estr, "users/bob", fakeServer, nil, true)
+	doMount(t, rootCtx, estr, "users/root", fakeServer, nil, true)
 }
 
 func TestGlobACLs(t *testing.T) {
@@ -522,9 +532,9 @@
 
 	// set up a mount space
 	fakeServer := naming.JoinAddressName(estr, "quux")
-	doMount(t, aliceCtx, estr, "one/bright/day", fakeServer, false) // Fails because alice can't mount there.
-	doMount(t, bobCtx, estr, "one/bright/day", fakeServer, true)
-	doMount(t, rootCtx, estr, "a/b/c", fakeServer, true)
+	doMount(t, aliceCtx, estr, "one/bright/day", fakeServer, nil, false) // Fails because alice can't mount there.
+	doMount(t, bobCtx, estr, "one/bright/day", fakeServer, nil, true)
+	doMount(t, rootCtx, estr, "a/b/c", fakeServer, nil, true)
 
 	// Try various globs.
 	tests := []struct {
@@ -555,7 +565,7 @@
 
 	// Set up one mount.
 	fakeServer := naming.JoinAddressName(estr, "quux")
-	doMount(t, rootCtx, estr, "one/bright/day", fakeServer, true)
+	doMount(t, rootCtx, estr, "one/bright/day", fakeServer, nil, true)
 	checkMatch(t, []string{"one", "one/bright", "one/bright/day"}, doGlob(t, rootCtx, estr, "", "*/..."))
 
 	// After the unmount nothing should be left
@@ -563,7 +573,7 @@
 	checkMatch(t, nil, doGlob(t, rootCtx, estr, "", "*/..."))
 
 	// Set up a mount, then set the ACL.
-	doMount(t, rootCtx, estr, "one/bright/day", fakeServer, true)
+	doMount(t, rootCtx, estr, "one/bright/day", fakeServer, nil, true)
 	checkMatch(t, []string{"one", "one/bright", "one/bright/day"}, doGlob(t, rootCtx, estr, "", "*/..."))
 	acl := access.TaggedACLMap{"Read": access.ACL{In: []security.BlessingPattern{security.BlessingPattern("...")}}}
 	doSetACL(t, rootCtx, estr, "one/bright", acl, "", true)
@@ -582,8 +592,8 @@
 
 	// set up a mount space
 	fakeServer := naming.JoinAddressName(estr, "quux")
-	doMount(t, bobCtx, estr, "one/bright/day", fakeServer, true)
-	doMount(t, rootCtx, estr, "a/b/c", fakeServer, true)
+	doMount(t, bobCtx, estr, "one/bright/day", fakeServer, nil, true)
+	doMount(t, rootCtx, estr, "a/b/c", fakeServer, nil, true)
 
 	// It shouldn't be possible to delete anything with children unless explicitly requested.
 	doDeleteNode(t, rootCtx, estr, "a/b", false)
@@ -607,12 +617,12 @@
 	server, estr := newMT(t, "", rootCtx)
 	defer server.Stop()
 
-	doMount(t, rootCtx, estr, "endpoint", naming.JoinAddressName(estr, "life/on/the/mississippi"), true)
-	doMount(t, rootCtx, estr, "hostport", "/atrampabroad:8000", true)
-	doMount(t, rootCtx, estr, "hostport-endpoint-platypus", "/@atrampabroad:8000@@", true)
-	doMount(t, rootCtx, estr, "invalid/not/rooted", "atrampabroad:8000", false)
-	doMount(t, rootCtx, estr, "invalid/no/port", "/atrampabroad", false)
-	doMount(t, rootCtx, estr, "invalid/endpoint", "/@following the equator:8000@@@", false)
+	doMount(t, rootCtx, estr, "endpoint", naming.JoinAddressName(estr, "life/on/the/mississippi"), nil, true)
+	doMount(t, rootCtx, estr, "hostport", "/atrampabroad:8000", nil, true)
+	doMount(t, rootCtx, estr, "hostport-endpoint-platypus", "/@atrampabroad:8000@@", nil, true)
+	doMount(t, rootCtx, estr, "invalid/not/rooted", "atrampabroad:8000", nil, false)
+	doMount(t, rootCtx, estr, "invalid/no/port", "/atrampabroad", nil, false)
+	doMount(t, rootCtx, estr, "invalid/endpoint", "/@following the equator:8000@@@", nil, false)
 }
 
 func TestExpiry(t *testing.T) {
@@ -628,10 +638,10 @@
 
 	ft := NewFakeTimeClock()
 	setServerListClock(ft)
-	doMount(t, rootCtx, estr, "a1/b1", collectionName, true)
-	doMount(t, rootCtx, estr, "a1/b2", collectionName, true)
-	doMount(t, rootCtx, estr, "a2/b1", collectionName, true)
-	doMount(t, rootCtx, estr, "a2/b2/c", collectionName, true)
+	doMount(t, rootCtx, estr, "a1/b1", collectionName, nil, true)
+	doMount(t, rootCtx, estr, "a1/b2", collectionName, nil, true)
+	doMount(t, rootCtx, estr, "a2/b1", collectionName, nil, true)
+	doMount(t, rootCtx, estr, "a2/b2/c", collectionName, nil, true)
 
 	checkMatch(t, []string{"a1/b1", "a2/b1"}, doGlob(t, rootCtx, estr, "", "*/b1/..."))
 	ft.advance(time.Duration(ttlSecs/2) * time.Second)
@@ -639,27 +649,66 @@
 	checkMatch(t, []string{"c"}, doGlob(t, rootCtx, estr, "a2/b2", "*"))
 	// Refresh only a1/b1.  All the other mounts will expire upon the next
 	// ft advance.
-	doMount(t, rootCtx, estr, "a1/b1", collectionName, true)
+	doMount(t, rootCtx, estr, "a1/b1", collectionName, nil, true)
 	ft.advance(time.Duration(ttlSecs/2+4) * time.Second)
 	checkMatch(t, []string{"a1", "a1/b1"}, doGlob(t, rootCtx, estr, "", "*/..."))
 	checkMatch(t, []string{"a1/b1"}, doGlob(t, rootCtx, estr, "", "*/b1/..."))
 }
 
 func TestBadACLs(t *testing.T) {
-	_, err := NewMountTable("testdata/invalid.acl")
+	_, err := NewMountTableDispatcher("testdata/invalid.acl")
 	if err == nil {
 		boom(t, "Expected json parse error in acl file")
 	}
-	_, err = NewMountTable("testdata/doesntexist.acl")
+	_, err = NewMountTableDispatcher("testdata/doesntexist.acl")
 	if err == nil {
 		boom(t, "Expected error from missing acl file")
 	}
 }
 
+func TestBlessingPatterns(t *testing.T) {
+	// TODO(ashankar): Change this test to use a variant of checkContents
+	// that will ensure that the client call to the resolved name fails if
+	// the blessing patterns in the mount entry is not consistent with the
+	// blessings presented by the end server (once the namespace library
+	// changes to respect VDLMountedServer.BlessingPatterns is in place).
+	rootCtx, aliceCtx, bobCtx, shutdown := initTest()
+	defer shutdown()
+
+	mt, mtAddr := newMT(t, "testdata/test.acl", rootCtx)
+	defer mt.Stop()
+
+	// collection server run by alice
+	collection, collectionAddr := newCollection(t, "testdata/test.acl", aliceCtx)
+	defer collection.Stop()
+	suffix := "users/bob"
+
+	// But mounted by bob, and since bob didn't specify an explicit set of
+	// blessing patterns, it will be thought of as bob's server.
+	doMount(t, bobCtx, mtAddr, suffix, collectionAddr, nil, true)
+	if e, err := resolve(aliceCtx, naming.JoinAddressName(mtAddr, suffix)); err != nil {
+		t.Error(err)
+	} else if len(e.Servers) != 1 {
+		t.Errorf("Got %v, want exactly 1 server", e.Servers)
+	} else if got, want := e.Servers[0].BlessingPatterns, strslice("bob"); !reflect.DeepEqual(got, want) {
+		t.Errorf("Got blessing patterns %v, want %v", got, want)
+	}
+	doUnmount(t, bobCtx, mtAddr, suffix, "", true)
+
+	// However, if bob explicitly says alice is running the server, then so be it.
+	doMount(t, bobCtx, mtAddr, suffix, collectionAddr, []security.BlessingPattern{"alice", "somebody"}, true)
+	if e, err := resolve(aliceCtx, naming.JoinAddressName(mtAddr, suffix)); err != nil {
+		t.Error(err)
+	} else if len(e.Servers) != 1 {
+		t.Errorf("Got %v, want exactly 1 server", e.Servers)
+	} else if got, want := e.Servers[0].BlessingPatterns, strslice("alice", "somebody"); !reflect.DeepEqual(got, want) {
+		t.Errorf("Got blessing patterns %v, want %v", got, want)
+	}
+}
+
 func initTest() (rootCtx *context.T, aliceCtx *context.T, bobCtx *context.T, shutdown veyron2.Shutdown) {
 	testutil.Init()
 	ctx, shutdown := testutil.InitForTest()
-
 	var err error
 	if rootCtx, err = veyron2.SetPrincipal(ctx, tsecurity.NewPrincipal("root")); err != nil {
 		panic("failed to set root principal")
@@ -670,38 +719,19 @@
 	if bobCtx, err = veyron2.SetPrincipal(ctx, tsecurity.NewPrincipal("bob")); err != nil {
 		panic("failed to set bob principal")
 	}
-
-	// A hack to set the namespace roots to a value that won't work.
 	for _, r := range []*context.T{rootCtx, aliceCtx, bobCtx} {
+		// A hack to set the namespace roots to a value that won't work.
 		veyron2.GetNamespace(r).SetRoots()
-	}
-
-	// And setup their blessings so that they present "root", "alice" and "bob"
-	// and these blessings are recognized by the others.
-	principals := map[string]security.Principal{
-		"root":  veyron2.GetPrincipal(rootCtx),
-		"alice": veyron2.GetPrincipal(aliceCtx),
-		"bob":   veyron2.GetPrincipal(bobCtx),
-	}
-	for name, p := range principals {
-		blessing, err := p.BlessSelf(name)
-		if err != nil {
-			panic(fmt.Sprintf("BlessSelf(%q) failed: %v", name, err))
-		}
-		// Share this blessing with all servers and use it when serving clients.
-		if err = p.BlessingStore().SetDefault(blessing); err != nil {
-			panic(fmt.Sprintf("%v: %v", blessing, err))
-		}
-		if _, err = p.BlessingStore().Set(blessing, security.AllPrincipals); err != nil {
-			panic(fmt.Sprintf("%v: %v", blessing, err))
-		}
-		// Have all principals trust the root of this blessing.
-		for _, other := range principals {
-			if err := other.AddToRoots(blessing); err != nil {
+		// And have all principals recognize each others blessings.
+		p1 := veyron2.GetPrincipal(r)
+		for _, other := range []*context.T{rootCtx, aliceCtx, bobCtx} {
+			// tsecurity.NewPrincipal has already setup each
+			// principal to use the same blessing for both server
+			// and client activities.
+			if err := p1.AddToRoots(veyron2.GetPrincipal(other).BlessingStore().Default()); err != nil {
 				panic(err)
 			}
 		}
 	}
-
 	return rootCtx, aliceCtx, bobCtx, shutdown
 }
diff --git a/services/mounttable/lib/neighborhood.go b/services/mounttable/lib/neighborhood.go
index f915124..259aec2 100644
--- a/services/mounttable/lib/neighborhood.go
+++ b/services/mounttable/lib/neighborhood.go
@@ -65,7 +65,7 @@
 	return uint16(port)
 }
 
-func newNeighborhoodServer(host string, addresses []string, loopback bool) (*neighborhood, error) {
+func newNeighborhood(host string, addresses []string, loopback bool) (*neighborhood, error) {
 	// Create the TXT contents with addresses to announce. Also pick up a port number.
 	var txt []string
 	var port uint16
@@ -115,14 +115,16 @@
 	return nh, nil
 }
 
-// NewLoopbackNeighborhoodServer creates a new instance of a neighborhood server on loopback interfaces for testing.
-func NewLoopbackNeighborhoodServer(host string, addresses ...string) (*neighborhood, error) {
-	return newNeighborhoodServer(host, addresses, true)
+// NewLoopbackNeighborhoodDispatcher creates a new instance of a dispatcher for
+// a neighborhood service provider on loopback interfaces (meant for testing).
+func NewLoopbackNeighborhoodDispatcher(host string, addresses ...string) (ipc.Dispatcher, error) {
+	return newNeighborhood(host, addresses, true)
 }
 
-// NewNeighborhoodServer creates a new instance of a neighborhood server.
-func NewNeighborhoodServer(host string, addresses ...string) (*neighborhood, error) {
-	return newNeighborhoodServer(host, addresses, false)
+// NewNeighborhoodDispatcher creates a new instance of a dispatcher for a
+// neighborhood service provider.
+func NewNeighborhoodDispatcher(host string, addresses ...string) (ipc.Dispatcher, error) {
+	return newNeighborhood(host, addresses, false)
 }
 
 // Lookup implements ipc.Dispatcher.Lookup.
@@ -173,7 +175,7 @@
 		}
 	}
 	for addr, ttl := range addrMap {
-		reply = append(reply, naming.VDLMountedServer{addr, ttl})
+		reply = append(reply, naming.VDLMountedServer{addr, nil, ttl})
 	}
 
 	if reply != nil {
@@ -189,7 +191,7 @@
 		for _, ip := range ips {
 			addr := net.JoinHostPort(ip.String(), strconv.Itoa(int(rr.Port)))
 			ep := naming.FormatEndpoint("tcp", addr)
-			reply = append(reply, naming.VDLMountedServer{naming.JoinAddressName(ep, ""), ttl})
+			reply = append(reply, naming.VDLMountedServer{naming.JoinAddressName(ep, ""), nil, ttl})
 		}
 	}
 	return reply
@@ -237,7 +239,10 @@
 }
 
 // Mount not implemented.
-func (*neighborhoodService) Mount(_ ipc.ServerContext, server string, ttlsecs uint32, opts naming.MountFlag) error {
+func (ns *neighborhoodService) Mount(ctx ipc.ServerContext, server string, ttlsecs uint32, opts naming.MountFlag) error {
+	return ns.MountX(ctx, server, nil, ttlsecs, opts)
+}
+func (ns *neighborhoodService) MountX(_ ipc.ServerContext, _ string, _ []security.BlessingPattern, _ uint32, _ naming.MountFlag) error {
 	return errors.New("this server does not implement Mount")
 }
 
diff --git a/services/mounttable/lib/neighborhood_test.go b/services/mounttable/lib/neighborhood_test.go
index 9d673a9..c9b8293 100644
--- a/services/mounttable/lib/neighborhood_test.go
+++ b/services/mounttable/lib/neighborhood_test.go
@@ -53,11 +53,11 @@
 	serverName := fmt.Sprintf("nhtest%d", os.Getpid())
 
 	// Add neighborhood server.
-	nhd, err := NewLoopbackNeighborhoodServer(serverName, addresses...)
+	nhd, err := NewLoopbackNeighborhoodDispatcher(serverName, addresses...)
 	if err != nil {
 		boom(t, "Failed to create neighborhood server: %s\n", err)
 	}
-	defer nhd.Stop()
+	defer nhd.(*neighborhood).Stop()
 	if err := server.ServeDispatcher("", nhd); err != nil {
 		boom(t, "Failed to register neighborhood server: %s", err)
 	}
diff --git a/services/mounttable/lib/serverlist.go b/services/mounttable/lib/serverlist.go
index 02c7308..f74752f 100644
--- a/services/mounttable/lib/serverlist.go
+++ b/services/mounttable/lib/serverlist.go
@@ -6,6 +6,7 @@
 	"time"
 
 	"v.io/core/veyron2/naming"
+	"v.io/core/veyron2/security"
 )
 
 type serverListClock interface {
@@ -24,8 +25,9 @@
 // server maintains the state of a single server.  Unless expires is refreshed before the
 // time is reached, the entry will be removed.
 type server struct {
-	expires time.Time
-	oa      string // object address of server
+	expires  time.Time
+	oa       string   // object address of server
+	patterns []string // patterns that match the blessings presented by the server.
 }
 
 // serverList represents an ordered list of servers.
@@ -34,8 +36,8 @@
 	l *list.List // contains entries of type *server
 }
 
-// NewServerList creates a synchronized list of servers.
-func NewServerList() *serverList {
+// newServerList creates a synchronized list of servers.
+func newServerList() *serverList {
 	return &serverList{l: list.New()}
 }
 
@@ -59,8 +61,12 @@
 // add to the front of the list if not already in the list, otherwise,
 // update the expiration time and move to the front of the list.  That
 // way the most recently refreshed is always first.
-func (sl *serverList) add(oa string, ttl time.Duration) {
+func (sl *serverList) add(oa string, patterns []security.BlessingPattern, ttl time.Duration) {
 	expires := slc.now().Add(ttl)
+	strpats := make([]string, len(patterns))
+	for idx, pat := range patterns {
+		strpats[idx] = string(pat)
+	}
 	sl.Lock()
 	defer sl.Unlock()
 	for e := sl.l.Front(); e != nil; e = e.Next() {
@@ -72,8 +78,9 @@
 		}
 	}
 	s := &server{
-		oa:      oa,
-		expires: expires,
+		oa:       oa,
+		expires:  expires,
+		patterns: strpats,
 	}
 	sl.l.PushFront(s) // innocent until proven guilty
 }
@@ -118,7 +125,7 @@
 	for e := sl.l.Front(); e != nil; e = e.Next() {
 		s := e.Value.(*server)
 		ttl := uint32(s.expires.Sub(now).Seconds())
-		ms := naming.VDLMountedServer{Server: s.oa, TTL: ttl}
+		ms := naming.VDLMountedServer{Server: s.oa, BlessingPatterns: s.patterns, TTL: ttl}
 		slice = append(slice, ms)
 	}
 	return slice
diff --git a/services/mounttable/lib/serverlist_test.go b/services/mounttable/lib/serverlist_test.go
index 66e31a4..7c1c135 100644
--- a/services/mounttable/lib/serverlist_test.go
+++ b/services/mounttable/lib/serverlist_test.go
@@ -1,8 +1,13 @@
 package mounttable
 
 import (
+	"fmt"
+	"reflect"
 	"testing"
 	"time"
+
+	"v.io/core/veyron2/naming"
+	"v.io/core/veyron2/security"
 )
 
 type fakeTime struct {
@@ -30,9 +35,10 @@
 	// Test adding entries.
 	ft := NewFakeTimeClock()
 	setServerListClock(ft)
-	sl := NewServerList()
+	sl := newServerList()
 	for i, ep := range eps {
-		sl.add(ep, time.Duration(5*i)*time.Second)
+		bp := security.BlessingPattern(fmt.Sprintf("ep%d", i))
+		sl.add(ep, []security.BlessingPattern{bp}, time.Duration(5*i)*time.Second)
 	}
 	if sl.len() != len(eps) {
 		t.Fatalf("got %d, want %d", sl.len(), len(eps))
@@ -49,4 +55,15 @@
 	if sl.len() != len(eps)-3 {
 		t.Fatalf("got %d, want %d", sl.len(), len(eps)-3)
 	}
+
+	// Test copyToSlice.
+	if got, want := sl.copyToSlice(), []naming.VDLMountedServer{
+		{
+			Server:           "endpoint:dfgsfdg@@",
+			TTL:              9,
+			BlessingPatterns: []string{"ep3"},
+		},
+	}; !reflect.DeepEqual(got, want) {
+		t.Errorf("Got %v, want %v", got, want)
+	}
 }
diff --git a/services/mounttable/mounttabled/mounttable.go b/services/mounttable/mounttabled/mounttable.go
index b6d60b9..c1d97bd 100644
--- a/services/mounttable/mounttabled/mounttable.go
+++ b/services/mounttable/mounttabled/mounttable.go
@@ -32,9 +32,9 @@
 		os.Exit(1)
 	}
 	defer mtServer.Stop()
-	mt, err := mounttable.NewMountTable(*aclFile)
+	mtd, err := mounttable.NewMountTableDispatcher(*aclFile)
 	if err != nil {
-		vlog.Errorf("r.NewMountTable failed: %v", err)
+		vlog.Errorf("r.NewMountTableDispatcher failed: %v", err)
 		os.Exit(1)
 	}
 	listenSpec := veyron2.GetListenSpec(ctx)
@@ -45,7 +45,7 @@
 	}
 	mtEndpoint := mtEndpoints[0]
 	name := *mountName
-	if err := mtServer.ServeDispatcher(name, mt); err != nil {
+	if err := mtServer.ServeDispatcher(name, mtd); err != nil {
 		vlog.Errorf("ServeDispatcher(%v) failed: %v", name, err)
 		os.Exit(1)
 	}
@@ -72,12 +72,12 @@
 
 		myObjectName := mtEndpoint.Name()
 
-		nh, err := mounttable.NewNeighborhoodServer(*nhName, myObjectName)
+		nhd, err := mounttable.NewNeighborhoodDispatcher(*nhName, myObjectName)
 		if err != nil {
 			vlog.Errorf("NewNeighborhoodServer failed: %v", err)
 			os.Exit(1)
 		}
-		if err := nhServer.ServeDispatcher(naming.JoinAddressName(myObjectName, "nh"), nh); err != nil {
+		if err := nhServer.ServeDispatcher(naming.JoinAddressName(myObjectName, "nh"), nhd); err != nil {
 			vlog.Errorf("nhServer.ServeDispatcher failed to register neighborhood: %v", err)
 			os.Exit(1)
 		}
diff --git a/tools/application/impl_test.go b/tools/application/impl_test.go
index 7b20e9f..e688c62 100644
--- a/tools/application/impl_test.go
+++ b/tools/application/impl_test.go
@@ -82,7 +82,7 @@
 type dispatcher struct {
 }
 
-func NewDispatcher() *dispatcher {
+func NewDispatcher() ipc.Dispatcher {
 	return &dispatcher{}
 }
 
diff --git a/tools/binary/impl_test.go b/tools/binary/impl_test.go
index 0bfe953..d0b1788 100644
--- a/tools/binary/impl_test.go
+++ b/tools/binary/impl_test.go
@@ -86,7 +86,7 @@
 type dispatcher struct {
 }
 
-func NewDispatcher() *dispatcher {
+func NewDispatcher() ipc.Dispatcher {
 	return &dispatcher{}
 }
 
diff --git a/tools/mgmt/device/impl/devicemanager_mock_test.go b/tools/mgmt/device/impl/devicemanager_mock_test.go
index 523c5e2..d0da827 100644
--- a/tools/mgmt/device/impl/devicemanager_mock_test.go
+++ b/tools/mgmt/device/impl/devicemanager_mock_test.go
@@ -200,7 +200,7 @@
 	t    *testing.T
 }
 
-func NewDispatcher(t *testing.T, tape *Tape) *dispatcher {
+func NewDispatcher(t *testing.T, tape *Tape) ipc.Dispatcher {
 	return &dispatcher{tape: tape, t: t}
 }
 
diff --git a/tools/mounttable/impl_test.go b/tools/mounttable/impl_test.go
index 43c650e..71de1c8 100644
--- a/tools/mounttable/impl_test.go
+++ b/tools/mounttable/impl_test.go
@@ -25,8 +25,8 @@
 func (s *server) Glob__(ctx ipc.ServerContext, pattern string) (<-chan naming.VDLMountEntry, error) {
 	vlog.VI(2).Infof("Glob() was called. suffix=%v pattern=%q", s.suffix, pattern)
 	ch := make(chan naming.VDLMountEntry, 2)
-	ch <- naming.VDLMountEntry{"name1", []naming.VDLMountedServer{{"server1", 123}}, false}
-	ch <- naming.VDLMountEntry{"name2", []naming.VDLMountedServer{{"server2", 456}, {"server3", 789}}, false}
+	ch <- naming.VDLMountEntry{"name1", []naming.VDLMountedServer{{"server1", nil, 123}}, false}
+	ch <- naming.VDLMountEntry{"name2", []naming.VDLMountedServer{{"server2", nil, 456}, {"server3", nil, 789}}, false}
 	close(ch)
 	return ch, nil
 }
@@ -36,6 +36,11 @@
 	return nil
 }
 
+func (s *server) MountX(_ ipc.ServerContext, server string, patterns []security.BlessingPattern, ttl uint32, flags naming.MountFlag) error {
+	vlog.VI(2).Infof("MountX() was called. suffix=%v servers=%q patterns=%v ttl=%d", s.suffix, server, patterns, ttl)
+	return nil
+}
+
 func (s *server) Unmount(_ ipc.ServerContext, server string) error {
 	vlog.VI(2).Infof("Unmount() was called. suffix=%v server=%q", s.suffix, server)
 	return nil
@@ -43,14 +48,14 @@
 
 func (s *server) ResolveStep(ipc.ServerContext) (entry naming.VDLMountEntry, err error) {
 	vlog.VI(2).Infof("ResolveStep() was called. suffix=%v", s.suffix)
-	entry.Servers = []naming.VDLMountedServer{{"server1", 123}}
+	entry.Servers = []naming.VDLMountedServer{{"server1", nil, 123}}
 	entry.Name = s.suffix
 	return
 }
 
 func (s *server) ResolveStepX(ipc.ServerContext) (entry naming.VDLMountEntry, err error) {
 	vlog.VI(2).Infof("ResolveStepX() was called. suffix=%v", s.suffix)
-	entry.Servers = []naming.VDLMountedServer{{"server1", 123}}
+	entry.Servers = []naming.VDLMountedServer{{"server1", nil, 123}}
 	entry.Name = s.suffix
 	return
 }
@@ -148,7 +153,7 @@
 	if err := cmd.Execute([]string{"resolvestep", naming.JoinAddressName(endpoint.String(), "name")}); err != nil {
 		t.Fatalf("%v", err)
 	}
-	if expected, got := `Servers: [{server1 123}] Suffix: "name" MT: false`, strings.TrimSpace(stdout.String()); got != expected {
+	if expected, got := `Servers: [{server1 [] 123}] Suffix: "name" MT: false`, strings.TrimSpace(stdout.String()); got != expected {
 		t.Errorf("Got %q, expected %q", got, expected)
 	}
 	stdout.Reset()
diff --git a/tools/naming/simulator/shell_functions.go b/tools/naming/simulator/shell_functions.go
index 5a8f899..ecbe56d 100644
--- a/tools/naming/simulator/shell_functions.go
+++ b/tools/naming/simulator/shell_functions.go
@@ -75,7 +75,7 @@
 		return err
 	}
 	disable := true
-	switch args[1] {
+	switch args[0] {
 	case "on":
 		disable = false
 	case "off":
@@ -116,5 +116,5 @@
 }
 
 func setNamespaceRoots(stdin io.Reader, stdout, stderr io.Writer, env map[string]string, args ...string) error {
-	return veyron2.GetNamespace(ctx).SetRoots(args[1:]...)
+	return veyron2.GetNamespace(ctx).SetRoots(args...)
 }
diff --git a/tools/naming/simulator/testdata/ambiguity.scr b/tools/naming/simulator/testdata/ambiguity.scr
index afa2c0a..a647015 100644
--- a/tools/naming/simulator/testdata/ambiguity.scr
+++ b/tools/naming/simulator/testdata/ambiguity.scr
@@ -21,19 +21,19 @@
 
 set localaddr="--veyron.tcp.address=127.0.0.1:0"
 
-root -- $localaddr
+root $localaddr
 set r=$_
 read $r
 eval $r
 set s1=$MT_NAME
 
-root  -- $localaddr
+root $localaddr
 set r=$_
 read $r
 eval $r
 set s2=$MT_NAME
 
-root -- $localaddr
+root $localaddr
 set r=$_
 read $r
 eval $r
@@ -45,7 +45,7 @@
 mount $s2/b $s3/c 1h
 wait $_
 
-echoServer  -- $localaddr "Echo" $s3/c
+echoServer $localaddr "Echo" $s3/c
 set es_h=$_
 
 # Returns the root and three mounts at s1/a.
diff --git a/tools/naming/simulator/testdata/echo.scr b/tools/naming/simulator/testdata/echo.scr
index fe4f59b..4ca7435 100644
--- a/tools/naming/simulator/testdata/echo.scr
+++ b/tools/naming/simulator/testdata/echo.scr
@@ -7,7 +7,7 @@
 setRoots
 
 # A 'stand-alone' server
-echoServer -- $localaddr $ws $localaddr "text" ""
+echoServer $localaddr $ws $localaddr "text" ""
 set es=$_
 read $es
 eval $es
@@ -22,14 +22,14 @@
 wait $ec
 
 # now use a nameserver.
-root -- $localaddr
+root $localaddr
 set r=$_
 read $r
 eval $r
 set root=$MT_NAME
 
 set NAMESPACE_ROOT=$root
-echoServer -- $localaddr $ws $localaddr "text2" "a/b"
+echoServer $localaddr $ws $localaddr "text2" "a/b"
 set es=$_
 read $es
 eval $es
diff --git a/tools/naming/simulator/testdata/json_example.scr b/tools/naming/simulator/testdata/json_example.scr
index e882725..d399a30 100644
--- a/tools/naming/simulator/testdata/json_example.scr
+++ b/tools/naming/simulator/testdata/json_example.scr
@@ -3,7 +3,7 @@
 
 set localaddr=--veyron.tcp.address=127.0.0.1:0
 
-root -- $localaddr
+root $localaddr
 set root=$_
 eval $root
 set ROOT_PID=$PID
@@ -12,7 +12,7 @@
 json_set ROOT_NAME ROOT_PID
 
 set PROXY_MOUNTPOINT=$ROOT_NAME/proxy/mp
-proxyd -- $localaddr $PROXY_MOUNTPOINT
+proxyd $localaddr $PROXY_MOUNTPOINT
 set proxyd=$_
 read $proxyd
 eval $proxyd
diff --git a/tools/naming/simulator/testdata/mt_complex.scr b/tools/naming/simulator/testdata/mt_complex.scr
index 620dbc1..e7761d3 100644
--- a/tools/naming/simulator/testdata/mt_complex.scr
+++ b/tools/naming/simulator/testdata/mt_complex.scr
@@ -7,21 +7,21 @@
 
 cache off
 
-root -- $localaddr
+root $localaddr
 set root_h=$_
 read $root_h
 eval $root_h
 set root=$MT_NAME
 
 set NAMESPACE_ROOT=$root
-mt -- $localaddr tl/a
+mt $localaddr tl/a
 set m=$_
 set mt_a_h=$m
 read $m
 eval $m
 set mt_a_name=$MT_NAME
 
-mt  -- $localaddr tl/b
+mt $localaddr tl/b
 set m=$_
 set mt_b_h=$m
 eval $m
@@ -73,7 +73,7 @@
 #
 
 # run an echo server on tl.
-echoServer  -- $localaddr "E1" tl
+echoServer  $localaddr "E1" tl
 set es_E1=$_
 read $es_E1
 eval $es_E1
@@ -126,7 +126,7 @@
 # run an echo server on tl/a - note that this currently doesn't seem to
 # have any effect on the mount table - that is, I suspect the mount table
 # refuses the mount.
-echoServer  -- $localaddr "E2" tl/a
+echoServer  $localaddr "E2" tl/a
 set es_E2=$_
 read $es_E2
 eval $es_E2
@@ -207,7 +207,7 @@
 
 # Create a mount table with a 'long' name
 set long_name=tl/b/some/deep/name/that/is/a/mount/table
-mt -- $localaddr $long_name
+mt $localaddr $long_name
 set m=$_
 read $m
 eval $m
@@ -216,14 +216,14 @@
 
 # Create a second mount table with a 'long' name
 set second_long_name=tl/a/some/deep/name/that/is/a/mount/table
-mt -- $localaddr $second_long_name
+mt $localaddr $second_long_name
 set m=$_
 read $m
 eval $m
 set mt_l2_name=$MT_NAME
 
 # Run an echo server that uses that mount table
-echoServer -- $localaddr "E3" $long_name/echo
+echoServer $localaddr "E3" $long_name/echo
 set es_E3=$_
 eval $es_E3
 set es_E3_name=$NAME
@@ -246,7 +246,7 @@
 mount tl/b/symlink $mt_b_name/$symlink_target 1h M
 wait $_
 
-ls -- -l tl/b/symlink
+ls -l tl/b/symlink
 wait $_
 
 resolve tl/b/symlink
diff --git a/tools/naming/simulator/testdata/mt_simple.scr b/tools/naming/simulator/testdata/mt_simple.scr
index ef648ec..9c5b5f2 100644
--- a/tools/naming/simulator/testdata/mt_simple.scr
+++ b/tools/naming/simulator/testdata/mt_simple.scr
@@ -3,19 +3,19 @@
 set localaddr="--veyron.tcp.address=127.0.0.1:0"
 set ws=--veyron.tcp.protocol=ws
 
-root -- $localaddr
+root $localaddr
 set m=$_
 read $m
 eval $m
 set root=$MT_NAME
 
 set NAMESPACE_ROOT=$root
-mt -- $localaddr $ws $localaddr usa
+mt $localaddr $ws $localaddr usa
 set m=$_
 read $m
 eval $m
 set usa_mt=$MT_NAME
-mt -- $localaddr $ws $localaddr uk
+mt $localaddr $ws $localaddr uk
 set m=$_
 read $m
 eval $m
@@ -28,14 +28,14 @@
 wait $l
 
 set NAMESPACE_ROOT=$usa_mt
-mt -- $localaddr $ws $localaddr "palo alto"
+mt $localaddr $ws $localaddr "palo alto"
 set m=$_
 read $m
 eval $m
 set pa_mt=$MT_NAME
 
 set NAMESPACE_ROOT=$uk_mt
-mt -- $localaddr $ws $localaddr "cambridge"
+mt $localaddr $ws $localaddr "cambridge"
 set m=$_
 read $m
 eval $m
@@ -47,7 +47,7 @@
 assert $RN 7
 wait $l
 
-ls -- -l $root/...
+ls -l $root/...
 wait $_
 
 resolve $root/usa
diff --git a/tools/naming/simulator/testdata/proxy.scr b/tools/naming/simulator/testdata/proxy.scr
index cb0d6bc..855879e 100644
--- a/tools/naming/simulator/testdata/proxy.scr
+++ b/tools/naming/simulator/testdata/proxy.scr
@@ -3,7 +3,7 @@
 set localaddr=--veyron.tcp.address=127.0.0.1:0
 set ws=--veyron.tcp.protocol=ws
 
-root -- $localaddr
+root $localaddr
 set m=$_
 read $m
 eval $m
@@ -13,7 +13,7 @@
 print $NAMESPACE_ROOT
 
 # run a non-proxied echo server
-echoServer -- $localaddr $ws $localaddr noproxy echo/noproxy
+echoServer $localaddr $ws $localaddr noproxy echo/noproxy
 set esnp=$_
 read $esnp
 eval $esnp
@@ -25,7 +25,7 @@
 assert $l "noproxy: ohh"
 
 # run a proxy server
-proxyd -- $localaddr $ws $localaddr p1
+proxyd $localaddr $ws $localaddr p1
 set proxy=$_
 read $proxy
 # PROXY_NAME=<name of proxy>
@@ -44,7 +44,7 @@
 #assert $RN 3
 #wait $l
 
-echoServer -- $localaddr $ws $localaddr --veyron.proxy=p1 withproxy echo/withproxy
+echoServer $localaddr $ws $localaddr --veyron.proxy=p1 withproxy echo/withproxy
 set eswp=$_
 read $eswp
 eval $eswp
@@ -104,9 +104,9 @@
 # $ep4_addr
 assert $rid $ECHOS_RID
 
-ls -- -l echo/withproxy
+ls -l echo/withproxy
 wait $_
-ls -- -l echo/noproxy
+ls -l echo/noproxy
 wait $_
 
 echoClient echo/withproxy "ohh"
diff --git a/tools/naming/simulator/testdata/public_echo.scr b/tools/naming/simulator/testdata/public_echo.scr
index 4e508e9..5447fad 100644
--- a/tools/naming/simulator/testdata/public_echo.scr
+++ b/tools/naming/simulator/testdata/public_echo.scr
@@ -9,7 +9,7 @@
 # now use the global nameserver.
 
 set global_name=global/echo
-echoServer -- $localaddr "text2" $global_name
+echoServer $localaddr "text2" $global_name
 set es=$_
 read $es
 eval $es
diff --git a/tools/profile/impl_test.go b/tools/profile/impl_test.go
index f334e31..8ae4621 100644
--- a/tools/profile/impl_test.go
+++ b/tools/profile/impl_test.go
@@ -76,7 +76,7 @@
 type dispatcher struct {
 }
 
-func NewDispatcher() *dispatcher {
+func NewDispatcher() ipc.Dispatcher {
 	return &dispatcher{}
 }
 
