veyron2/naming: renaming MountTable to Namespace

Given the client library interface a different name to the
server MountTable to hopefully reduce confusion!!!

Change-Id: I535aebceb4287a86b1dc4cd9b8b35824079ecc68
diff --git a/examples/rockpaperscissors/common/common.go b/examples/rockpaperscissors/common/common.go
index 63bbadd..5999042 100644
--- a/examples/rockpaperscissors/common/common.go
+++ b/examples/rockpaperscissors/common/common.go
@@ -35,8 +35,8 @@
 }
 
 // FindJudge returns a random rock-paper-scissors judge from the mount table.
-func FindJudge(mt naming.MountTable) (string, error) {
-	judges, err := findAll(mt, "judge")
+func FindJudge() (string, error) {
+	judges, err := findAll("judge")
 	if err != nil {
 		return "", err
 	}
@@ -47,8 +47,8 @@
 }
 
 // FindPlayer returns a random rock-paper-scissors player from the mount table.
-func FindPlayer(mt naming.MountTable) (string, error) {
-	players, err := findAll(mt, "player")
+func FindPlayer() (string, error) {
+	players, err := findAll("player")
 	if err != nil {
 		return "", err
 	}
@@ -60,17 +60,18 @@
 
 // FindScoreKeepers returns all the rock-paper-scissors score keepers from the
 // mount table.
-func FindScoreKeepers(mt naming.MountTable) ([]string, error) {
-	sKeepers, err := findAll(mt, "scorekeeper")
+func FindScoreKeepers() ([]string, error) {
+	sKeepers, err := findAll("scorekeeper")
 	if err != nil {
 		return nil, err
 	}
 	return sKeepers, nil
 }
 
-func findAll(mt naming.MountTable, t string) ([]string, error) {
+func findAll(t string) ([]string, error) {
 	start := time.Now()
-	c, err := mt.Glob(rt.R().TODOContext(), "rps/"+t+"/*")
+	ns := rt.R().Namespace()
+	c, err := ns.Glob(rt.R().TODOContext(), "rps/"+t+"/*")
 	if err != nil {
 		vlog.Infof("mt.Glob failed: %v", err)
 		return nil, err
diff --git a/examples/rockpaperscissors/impl/impl.go b/examples/rockpaperscissors/impl/impl.go
index c16d0aa..b58a9ef 100644
--- a/examples/rockpaperscissors/impl/impl.go
+++ b/examples/rockpaperscissors/impl/impl.go
@@ -5,20 +5,18 @@
 
 	rps "veyron/examples/rockpaperscissors"
 	"veyron2/ipc"
-	"veyron2/naming"
 	"veyron2/vlog"
 )
 
 // RPS implements rockpaperscissors.RockPaperScissorsService
 type RPS struct {
-	mt          naming.MountTable
 	player      *Player
 	judge       *Judge
 	scoreKeeper *ScoreKeeper
 }
 
-func NewRPS(mt naming.MountTable) *RPS {
-	return &RPS{mt: mt, player: NewPlayer(mt), judge: NewJudge(mt), scoreKeeper: NewScoreKeeper()}
+func NewRPS() *RPS {
+	return &RPS{player: NewPlayer(), judge: NewJudge(), scoreKeeper: NewScoreKeeper()}
 }
 
 func (r *RPS) Judge() *Judge {
diff --git a/examples/rockpaperscissors/impl/impl_test.go b/examples/rockpaperscissors/impl/impl_test.go
index c8dbf8d..af61955 100644
--- a/examples/rockpaperscissors/impl/impl_test.go
+++ b/examples/rockpaperscissors/impl/impl_test.go
@@ -5,7 +5,6 @@
 
 	rps "veyron/examples/rockpaperscissors"
 	"veyron/examples/rockpaperscissors/impl"
-	"veyron/runtimes/google/naming/mounttable"
 	mtlib "veyron/services/mounttable/lib"
 
 	"veyron2"
@@ -40,15 +39,13 @@
 }
 
 func startRockPaperScissors(t *testing.T, rt veyron2.Runtime, mtAddress string) (*impl.RPS, func()) {
-	mt, err := mounttable.New(rt, mtAddress)
-	if err != nil {
-		t.Fatalf("mounttable.New failed: %v", err)
-	}
-	server, err := rt.NewServer(veyron2.MountTable(mt))
+	ns := rt.Namespace()
+	ns.SetRoots([]string{mtAddress})
+	server, err := rt.NewServer()
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
-	rpsService := impl.NewRPS(mt)
+	rpsService := impl.NewRPS()
 	if err := server.Register("", ipc.SoloDispatcher(rps.NewServerRockPaperScissors(rpsService), nil)); err != nil {
 		t.Fatalf("Register failed: %v", err)
 	}
diff --git a/examples/rockpaperscissors/impl/judge.go b/examples/rockpaperscissors/impl/judge.go
index cdc6229..6dd75a7 100644
--- a/examples/rockpaperscissors/impl/judge.go
+++ b/examples/rockpaperscissors/impl/judge.go
@@ -10,7 +10,6 @@
 	rps "veyron/examples/rockpaperscissors"
 	"veyron/examples/rockpaperscissors/common"
 
-	"veyron2/naming"
 	"veyron2/rt"
 	"veyron2/vlog"
 )
@@ -21,7 +20,6 @@
 )
 
 type Judge struct {
-	mt       naming.MountTable
 	lock     sync.Mutex
 	games    map[rps.GameID]*gameInfo
 	gamesRun common.Counter
@@ -64,8 +62,8 @@
 	score rps.ScoreCard
 }
 
-func NewJudge(mt naming.MountTable) *Judge {
-	return &Judge{mt: mt, games: make(map[rps.GameID]*gameInfo)}
+func NewJudge() *Judge {
+	return &Judge{games: make(map[rps.GameID]*gameInfo)}
 }
 
 func (j *Judge) Stats() int64 {
@@ -209,7 +207,7 @@
 	}
 
 	// Send the score card to the score keepers.
-	keepers, err := common.FindScoreKeepers(j.mt)
+	keepers, err := common.FindScoreKeepers()
 	if err != nil || len(keepers) == 0 {
 		vlog.Infof("No score keepers: %v", err)
 		return
diff --git a/examples/rockpaperscissors/impl/player.go b/examples/rockpaperscissors/impl/player.go
index 432cee2..b800a87 100644
--- a/examples/rockpaperscissors/impl/player.go
+++ b/examples/rockpaperscissors/impl/player.go
@@ -10,21 +10,19 @@
 	"veyron/examples/rockpaperscissors/common"
 
 	"veyron2"
-	"veyron2/naming"
 	"veyron2/rt"
 	"veyron2/vlog"
 )
 
 type Player struct {
-	mt              naming.MountTable
 	lock            sync.Mutex
 	gamesPlayed     common.Counter
 	gamesWon        common.Counter
 	gamesInProgress common.Counter
 }
 
-func NewPlayer(mt naming.MountTable) *Player {
-	return &Player{mt: mt}
+func NewPlayer() *Player {
+	return &Player{}
 }
 
 func (p *Player) Stats() (played, won int64) {
@@ -41,7 +39,7 @@
 }
 
 func (p *Player) InitiateGame() error {
-	judge, err := common.FindJudge(p.mt)
+	judge, err := common.FindJudge()
 	if err != nil {
 		vlog.Infof("FindJudge: %v", err)
 		return err
@@ -53,7 +51,7 @@
 	}
 	vlog.VI(1).Infof("Created gameID %q on %q", gameID, judge)
 
-	opponent, err := common.FindPlayer(p.mt)
+	opponent, err := common.FindPlayer()
 	if err != nil {
 		vlog.Infof("FindPlayer: %v", err)
 		return err
diff --git a/examples/rockpaperscissors/rpsbot/main.go b/examples/rockpaperscissors/rpsbot/main.go
index 012d36b..5b06f08 100644
--- a/examples/rockpaperscissors/rpsbot/main.go
+++ b/examples/rockpaperscissors/rpsbot/main.go
@@ -37,7 +37,7 @@
 	defer server.Stop()
 
 	rand.Seed(time.Now().UTC().UnixNano())
-	rpsService := impl.NewRPS(r.MountTable())
+	rpsService := impl.NewRPS()
 
 	if err := server.Register("", ipc.SoloDispatcher(rps.NewServerRockPaperScissors(rpsService), sflag.NewAuthorizerOrDie())); err != nil {
 		vlog.Fatalf("Register failed: %v", err)
diff --git a/examples/unresolve/test_util.go b/examples/unresolve/test_util.go
index 7e3ada1..6a470ed 100644
--- a/examples/unresolve/test_util.go
+++ b/examples/unresolve/test_util.go
@@ -110,7 +110,7 @@
 }
 
 func (*fortuneCustomUnresolve) UnresolveStep(context ipc.ServerContext) ([]string, error) {
-	servers, err := rt.R().MountTable().ResolveToMountTable(rt.R().NewContext(), "I/want/to/know")
+	servers, err := rt.R().Namespace().ResolveToMountTable(rt.R().NewContext(), "I/want/to/know")
 	if err != nil {
 		return nil, err
 	}
@@ -128,7 +128,7 @@
 	oa = naming.MakeTerminal(naming.JoinAddressName(ep, "tell/me"))
 	// Doesn't get unmounted.  Fine for a test.
 	oa = naming.MakeTerminal(oa)
-	rt.R().MountTable().Mount(rt.R().NewContext(), "I/want/to/know", oa, 0)
+	rt.R().Namespace().Mount(rt.R().NewContext(), "I/want/to/know", oa, 0)
 	return oa
 }
 
@@ -151,7 +151,7 @@
 }
 
 func (*fortuneNoIDL) UnresolveStep(ipc.ServerCall) ([]string, error) {
-	servers, err := rt.R().MountTable().ResolveToMountTable(rt.R().NewContext(), "g")
+	servers, err := rt.R().Namespace().ResolveToMountTable(rt.R().NewContext(), "g")
 	if err != nil {
 		return nil, err
 	}
@@ -185,8 +185,8 @@
 	return naming.Join(results[0].Server, suffix)
 }
 
-func resolve(t *testing.T, mt naming.MountTable, name string) string {
-	results, err := mt.Resolve(rt.R().NewContext(), name)
+func resolve(t *testing.T, ns naming.Namespace, name string) string {
+	results, err := ns.Resolve(rt.R().NewContext(), name)
 	if err != nil {
 		t.Errorf("Resolve failed with %v", err)
 		return ""
@@ -215,8 +215,8 @@
 	return unres[0]
 }
 
-func unresolve(t *testing.T, mt naming.MountTable, name string) string {
-	results, err := mt.Unresolve(rt.R().NewContext(), name)
+func unresolve(t *testing.T, ns naming.Namespace, name string) string {
+	results, err := ns.Unresolve(rt.R().NewContext(), name)
 	if err != nil {
 		t.Errorf("Unresolve failed with %v", err)
 		return ""
diff --git a/examples/unresolve/unresolve_test.go b/examples/unresolve/unresolve_test.go
index 7a218ab..251bf95 100644
--- a/examples/unresolve/unresolve_test.go
+++ b/examples/unresolve/unresolve_test.go
@@ -200,7 +200,7 @@
 	defer os.Remove(idFile)
 	os.Setenv("VEYRON_IDENTITY", idFile)
 
-	r, _ := rt.New(veyron2.MountTableRoots([]string{aOA}))
+	r, _ := rt.New(veyron2.NamespaceRoots([]string{aOA}))
 	ctx := r.NewContext()
 
 	resolveCases := []struct {
@@ -215,7 +215,7 @@
 		{"b/mt/g", gEP},
 	}
 	for _, c := range resolveCases {
-		if want, got := c.resolved, resolve(t, r.MountTable(), c.name); want != got {
+		if want, got := c.resolved, resolve(t, r.Namespace(), c.name); want != got {
 			t.Errorf("resolve %q expected %q, got %q instead", c.name, want, got)
 		}
 	}
@@ -324,7 +324,7 @@
 		{naming.Join(gEP, "fortune"), naming.Join(aOA, "b/mt/g/fortune")},
 	}
 	for _, c := range unresolveCases {
-		if want, got := c.want, unresolve(t, r.MountTable(), c.name); want != got {
+		if want, got := c.want, unresolve(t, r.Namespace(), c.name); want != got {
 			t.Errorf("unresolve %q expected %q, got %q instead", c.name, want, got)
 		}
 	}
diff --git a/lib/testutil/modules/ls.go b/lib/testutil/modules/ls.go
index b0e21cf..936d50a 100644
--- a/lib/testutil/modules/ls.go
+++ b/lib/testutil/modules/ls.go
@@ -35,13 +35,13 @@
 	switch g.tag {
 	case ls:
 		return `<glob pattern>
-lists names using the local mountTable client's Glob method`
+lists names using the local namespace's Glob method (naming.Namespace.Glob)`
 	case lsat:
 		return `<name> <glob pattern>
 list names using by invoking the Glob method on name (name.Glob)`
 	case lsmt:
 		return `<name> <glob pattern>
-list names using the Glob method on the mountTable at name`
+list names using the Glob method on the mounttable at name (name.Glob)`
 	default:
 		return "unknown glob command"
 	}
@@ -82,8 +82,8 @@
 }
 
 func lsUsingLocalMountTable(pattern string) ([]string, error) {
-	lmt := rt.R().MountTable()
-	ch, err := lmt.Glob(rt.R().NewContext(), pattern)
+	lns := rt.R().Namespace()
+	ch, err := lns.Glob(rt.R().NewContext(), pattern)
 	if err != nil {
 		return nil, fmt.Errorf("pattern %q: %v", pattern, err)
 	}
@@ -118,8 +118,8 @@
 }
 
 func lsUsingResolveToMountTable(name, pattern string) ([]string, error) {
-	lmt := rt.R().MountTable()
-	servers, err := lmt.ResolveToMountTable(rt.R().NewContext(), name)
+	lns := rt.R().Namespace()
+	servers, err := lns.ResolveToMountTable(rt.R().NewContext(), name)
 	if err != nil {
 		return []string{}, err
 	}
diff --git a/lib/testutil/modules/mounttable.go b/lib/testutil/modules/mounttable.go
index 9f3f6f7..e269882 100644
--- a/lib/testutil/modules/mounttable.go
+++ b/lib/testutil/modules/mounttable.go
@@ -137,7 +137,7 @@
 
 func (*setroot) Help() string {
 	return `[<mountTable name>]+
-set the local mountTable client's roots to supplied mountTable names`
+set the local namespace's roots to supplied mountTable names`
 }
 
 func (*setroot) Daemon() bool { return false }
@@ -151,7 +151,7 @@
 			return nil, nil, nil, fmt.Errorf("name %q must be rooted", r)
 		}
 	}
-	rt.R().MountTable().SetRoots(args)
+	rt.R().Namespace().SetRoots(args)
 	return nil, nil, nil, nil
 }
 
@@ -179,15 +179,15 @@
 		return nil, nil, nil, fmt.Errorf("wrong #args: %s", rs.Help())
 	}
 	name := args[0]
-	lmt := rt.R().MountTable()
+	lns := rt.R().Namespace()
 	var r []string
 	v := make(Variables)
 	var servers []string
 	var err error
 	if rs.mt {
-		servers, err = lmt.ResolveToMountTable(rt.R().NewContext(), name)
+		servers, err = lns.ResolveToMountTable(rt.R().NewContext(), name)
 	} else {
-		servers, err = lmt.Resolve(rt.R().NewContext(), name)
+		servers, err = lns.Resolve(rt.R().NewContext(), name)
 	}
 	if err != nil {
 		return nil, nil, nil, fmt.Errorf("failed resolving %q", name)
diff --git a/runtimes/google/daemon/proxyd/main.go b/runtimes/google/daemon/proxyd/main.go
index 665e625..90fead3 100644
--- a/runtimes/google/daemon/proxyd/main.go
+++ b/runtimes/google/daemon/proxyd/main.go
@@ -40,7 +40,7 @@
 	defer proxy.Shutdown()
 
 	if len(*name) > 0 {
-		publisher := publisher.New(r.NewContext(), r.MountTable(), time.Minute)
+		publisher := publisher.New(r.NewContext(), r.Namespace(), time.Minute)
 		defer publisher.WaitForStop()
 		defer publisher.Stop()
 		publisher.AddServer(naming.JoinAddressName(proxy.Endpoint().String(), ""))
diff --git a/runtimes/google/ipc/client.go b/runtimes/google/ipc/client.go
index 3c90847..49b3915 100644
--- a/runtimes/google/ipc/client.go
+++ b/runtimes/google/ipc/client.go
@@ -30,7 +30,7 @@
 
 type client struct {
 	streamMgr   stream.Manager
-	mt          naming.MountTable
+	ns          naming.Namespace
 	vcOpts      []stream.VCOpt // vc opts passed to dial
 	callTimeout time.Duration  // call timeout
 
@@ -48,10 +48,10 @@
 	// TODO(toddw): Add type and cancel flows.
 }
 
-func InternalNewClient(streamMgr stream.Manager, mt naming.MountTable, opts ...ipc.ClientOpt) (ipc.Client, error) {
+func InternalNewClient(streamMgr stream.Manager, ns naming.Namespace, opts ...ipc.ClientOpt) (ipc.Client, error) {
 	c := &client{
 		streamMgr:   streamMgr,
-		mt:          mt,
+		ns:          ns,
 		vcMap:       make(map[string]*vcInfo),
 		callTimeout: defaultCallTimeout,
 	}
@@ -125,8 +125,7 @@
 	if ctx == nil {
 		return nil, verror.BadArgf("ipc: %s.%s called with nil context", name, method)
 	}
-
-	servers, err := c.mt.Resolve(ctx, name)
+	servers, err := c.ns.Resolve(ctx, name)
 	if err != nil {
 		return nil, verror.NotFoundf("ipc: Resolve(%q) failed: %v", name, err)
 	}
diff --git a/runtimes/google/ipc/full_test.go b/runtimes/google/ipc/full_test.go
index 2db5072..5793780 100644
--- a/runtimes/google/ipc/full_test.go
+++ b/runtimes/google/ipc/full_test.go
@@ -126,54 +126,54 @@
 	return ipc.ReflectInvoker(t.server), testServerAuthorizer{}, nil
 }
 
-// mountTable is a simple partial implementation of naming.MountTable.  In
+// namespace is a simple partial implementation of naming.Namespace.  In
 // particular, it ignores TTLs and not allow fully overlapping mount names.
-type mountTable struct {
+type namespace struct {
 	sync.Mutex
 	mounts map[string][]string
 }
 
-func newMountTable() naming.MountTable {
-	return &mountTable{mounts: make(map[string][]string)}
+func newNamespace() naming.Namespace {
+	return &namespace{mounts: make(map[string][]string)}
 }
 
-func (mt *mountTable) Mount(ctx context.T, name, server string, _ time.Duration) error {
-	mt.Lock()
-	defer mt.Unlock()
-	for n, _ := range mt.mounts {
+func (ns *namespace) Mount(ctx context.T, name, server string, _ time.Duration) error {
+	ns.Lock()
+	defer ns.Unlock()
+	for n, _ := range ns.mounts {
 		if n != name && (strings.HasPrefix(name, n) || strings.HasPrefix(n, name)) {
 			return fmt.Errorf("simple mount table does not allow names that are a prefix of each other")
 		}
 	}
-	mt.mounts[name] = append(mt.mounts[name], server)
+	ns.mounts[name] = append(ns.mounts[name], server)
 	return nil
 }
 
-func (mt *mountTable) Unmount(ctx context.T, name, server string) error {
+func (ns *namespace) Unmount(ctx context.T, name, server string) error {
 	var servers []string
-	mt.Lock()
-	defer mt.Unlock()
-	for _, s := range mt.mounts[name] {
+	ns.Lock()
+	defer ns.Unlock()
+	for _, s := range ns.mounts[name] {
 		// When server is "", we remove all servers under name.
 		if len(server) > 0 && s != server {
 			servers = append(servers, s)
 		}
 	}
 	if len(servers) > 0 {
-		mt.mounts[name] = servers
+		ns.mounts[name] = servers
 	} else {
-		delete(mt.mounts, name)
+		delete(ns.mounts, name)
 	}
 	return nil
 }
 
-func (mt *mountTable) Resolve(ctx context.T, name string) ([]string, error) {
+func (ns *namespace) Resolve(ctx context.T, name string) ([]string, error) {
 	if address, _ := naming.SplitAddressName(name); len(address) > 0 {
 		return []string{name}, nil
 	}
-	mt.Lock()
-	defer mt.Unlock()
-	for prefix, servers := range mt.mounts {
+	ns.Lock()
+	defer ns.Unlock()
+	for prefix, servers := range ns.mounts {
 		if strings.HasPrefix(name, prefix) {
 			suffix := strings.TrimLeft(strings.TrimPrefix(name, prefix), "/")
 			var ret []string
@@ -183,32 +183,32 @@
 			return ret, nil
 		}
 	}
-	return nil, verror.NotFoundf("Resolve name %q not found in %v", name, mt.mounts)
+	return nil, verror.NotFoundf("Resolve name %q not found in %v", name, ns.mounts)
 }
 
-func (mt *mountTable) ResolveToMountTable(ctx context.T, name string) ([]string, error) {
+func (ns *namespace) ResolveToMountTable(ctx context.T, name string) ([]string, error) {
 	panic("ResolveToMountTable not implemented")
 	return nil, nil
 }
 
-func (mt *mountTable) Unresolve(ctx context.T, name string) ([]string, error) {
+func (ns *namespace) Unresolve(ctx context.T, name string) ([]string, error) {
 	panic("Unresolve not implemented")
 	return nil, nil
 }
 
-func (mt *mountTable) Glob(ctx context.T, pattern string) (chan naming.MountEntry, error) {
+func (ns *namespace) Glob(ctx context.T, pattern string) (chan naming.MountEntry, error) {
 	panic("Glob not implemented")
 	return nil, nil
 }
 
-func (mt *mountTable) SetRoots([]string) error {
+func (ns *namespace) SetRoots([]string) error {
 	panic("SetRoots not implemented")
 	return nil
 }
 
-func startServer(t *testing.T, serverID security.PrivateID, sm stream.Manager, mt naming.MountTable, ts interface{}) ipc.Server {
+func startServer(t *testing.T, serverID security.PrivateID, sm stream.Manager, ns naming.Namespace, ts interface{}) ipc.Server {
 	vlog.VI(1).Info("InternalNewServer")
-	server, err := InternalNewServer(InternalNewContext(), sm, mt, listenerID(serverID))
+	server, err := InternalNewServer(InternalNewContext(), sm, ns, listenerID(serverID))
 	if err != nil {
 		t.Errorf("InternalNewServer failed: %v", err)
 	}
@@ -228,57 +228,57 @@
 	return server
 }
 
-func verifyMount(t *testing.T, mt naming.MountTable, name string) {
-	if _, err := mt.Resolve(InternalNewContext(), name); err != nil {
+func verifyMount(t *testing.T, ns naming.Namespace, name string) {
+	if _, err := ns.Resolve(InternalNewContext(), name); err != nil {
 		t.Errorf("%s not found in mounttable", name)
 	}
 }
 
-func verifyMountMissing(t *testing.T, mt naming.MountTable, name string) {
-	if servers, err := mt.Resolve(InternalNewContext(), name); err == nil {
+func verifyMountMissing(t *testing.T, ns naming.Namespace, name string) {
+	if servers, err := ns.Resolve(InternalNewContext(), name); err == nil {
 		t.Errorf("%s not supposed to be found in mounttable; got %d servers instead", name, len(servers))
 	}
 }
 
-func stopServer(t *testing.T, server ipc.Server, mt naming.MountTable) {
+func stopServer(t *testing.T, server ipc.Server, ns naming.Namespace) {
 	vlog.VI(1).Info("server.Stop")
-	verifyMount(t, mt, "mountpoint/server")
+	verifyMount(t, ns, "mountpoint/server")
 
 	// Check that we can still publish.
 	server.Publish("should_appear_in_mt")
-	verifyMount(t, mt, "should_appear_in_mt/server")
+	verifyMount(t, ns, "should_appear_in_mt/server")
 
 	if err := server.Stop(); err != nil {
 		t.Errorf("server.Stop failed: %v", err)
 	}
 	// Check that we can no longer publish after Stop.
 	server.Publish("should_not_appear_in_mt")
-	verifyMountMissing(t, mt, "should_not_appear_in_mt/server")
+	verifyMountMissing(t, ns, "should_not_appear_in_mt/server")
 
-	verifyMountMissing(t, mt, "mountpoint/server")
-	verifyMountMissing(t, mt, "should_appear_in_mt/server")
-	verifyMountMissing(t, mt, "should_not_appear_in_mt/server")
+	verifyMountMissing(t, ns, "mountpoint/server")
+	verifyMountMissing(t, ns, "should_appear_in_mt/server")
+	verifyMountMissing(t, ns, "should_not_appear_in_mt/server")
 	vlog.VI(1).Info("server.Stop DONE")
 }
 
 type bundle struct {
 	client ipc.Client
 	server ipc.Server
-	mt     naming.MountTable
+	ns     naming.Namespace
 	sm     stream.Manager
 }
 
 func (b bundle) cleanup(t *testing.T) {
-	stopServer(t, b.server, b.mt)
+	stopServer(t, b.server, b.ns)
 	b.client.Close()
 }
 
 func createBundle(t *testing.T, clientID, serverID security.PrivateID, ts interface{}) (b bundle) {
 	b.sm = imanager.InternalNew(naming.FixedRoutingID(0x555555555))
-	b.mt = newMountTable()
-	b.server = startServer(t, serverID, b.sm, b.mt, ts)
+	b.ns = newNamespace()
+	b.server = startServer(t, serverID, b.sm, b.ns, ts)
 	var err error
-	b.client, err = InternalNewClient(b.sm, b.mt, veyron2.LocalID(clientID))
+	b.client, err = InternalNewClient(b.sm, b.ns, veyron2.LocalID(clientID))
 	if err != nil {
 		t.Fatalf("InternalNewClient failed: %v", err)
 	}
@@ -351,21 +351,21 @@
 	}
 	// Servers and clients will be created per-test, use the same stream manager and mounttable.
 	mgr := imanager.InternalNew(naming.FixedRoutingID(0x1111111))
-	mt := newMountTable()
+	ns := newNamespace()
 	for _, test := range tests {
 		name := fmt.Sprintf("(clientID:%q serverID:%q)", test.clientID, test.serverID)
-		server := startServer(t, test.serverID, mgr, mt, &testServer{})
-		client, err := InternalNewClient(mgr, mt, veyron2.LocalID(test.clientID))
+		server := startServer(t, test.serverID, mgr, ns, &testServer{})
+		client, err := InternalNewClient(mgr, ns, veyron2.LocalID(test.clientID))
 		if err != nil {
 			t.Errorf("%s: Client creation failed: %v", name, err)
-			stopServer(t, server, mt)
+			stopServer(t, server, ns)
 			continue
 		}
 		if _, err := client.StartCall(&fakeContext{}, "mountpoint/server/suffix", "irrelevant", nil, veyron2.RemoteID(test.pattern)); !matchesErrorPattern(err, test.err) {
 			t.Errorf(`%s: client.StartCall: got error "%v", want to match "%v"`, name, err, test.err)
 		}
 		client.Close()
-		stopServer(t, server, mt)
+		stopServer(t, server, ns)
 	}
 }
 
@@ -562,7 +562,7 @@
 	b := createBundle(t, nil, serverID, &testServer{})
 	defer b.cleanup(t)
 	for _, test := range tests {
-		client, err := InternalNewClient(b.sm, b.mt, veyron2.LocalID(test.clientID))
+		client, err := InternalNewClient(b.sm, b.ns, veyron2.LocalID(test.clientID))
 		if err != nil {
 			t.Fatalf("InternalNewClient failed: %v", err)
 		}
@@ -724,7 +724,7 @@
 	defer b.cleanup(t)
 
 	// Publish some incompatible endpoints.
-	publisher := publisher.New(InternalNewContext(), b.mt, publishPeriod)
+	publisher := publisher.New(InternalNewContext(), b.ns, publishPeriod)
 	defer publisher.WaitForStop()
 	defer publisher.Stop()
 	publisher.AddName("incompatible")
@@ -757,7 +757,7 @@
 // a server publishes its endpoints have the right effect.
 func TestPublishOptions(t *testing.T) {
 	sm := imanager.InternalNew(naming.FixedRoutingID(0x555555555))
-	mt := newMountTable()
+	ns := newNamespace()
 	cases := []struct {
 		opts   []ipc.ServerOpt
 		expect []string
@@ -769,7 +769,7 @@
 		{[]ipc.ServerOpt{veyron2.PublishFirst, veyron2.EndpointRewriteOpt("example.com")}, []string{"example.com"}},
 	}
 	for i, c := range cases {
-		server, err := InternalNewServer(InternalNewContext(), sm, mt, append([]ipc.ServerOpt{listenerID(serverID)}, c.opts...)...)
+		server, err := InternalNewServer(InternalNewContext(), sm, ns, append([]ipc.ServerOpt{listenerID(serverID)}, c.opts...)...)
 		if err != nil {
 			t.Errorf("InternalNewServer failed: %v", err)
 			continue
@@ -789,7 +789,7 @@
 			server.Stop()
 			continue
 		}
-		servers, err := mt.Resolve(InternalNewContext(), "mountpoint")
+		servers, err := ns.Resolve(InternalNewContext(), "mountpoint")
 		if err != nil {
 			t.Errorf("mountpoint not found in mounttable")
 			server.Stop()
@@ -869,7 +869,7 @@
 }
 
 type proxyHandle struct {
-	MT      naming.MountTable
+	ns      naming.Namespace
 	process *blackbox.Child
 	mount   string
 }
@@ -881,7 +881,7 @@
 	if h.mount, err = h.process.ReadLineFromChild(); err != nil {
 		return err
 	}
-	if err := h.MT.Mount(&fakeContext{}, "proxy", h.mount, time.Hour); err != nil {
+	if err := h.ns.Mount(&fakeContext{}, "proxy", h.mount, time.Hour); err != nil {
 		return err
 	}
 	return nil
@@ -896,18 +896,18 @@
 	if len(h.mount) == 0 {
 		return nil
 	}
-	return h.MT.Unmount(&fakeContext{}, "proxy", h.mount)
+	return h.ns.Unmount(&fakeContext{}, "proxy", h.mount)
 }
 
 func TestProxy(t *testing.T) {
 	sm := imanager.InternalNew(naming.FixedRoutingID(0x555555555))
-	mt := newMountTable()
-	client, err := InternalNewClient(sm, mt, veyron2.LocalID(clientID))
+	ns := newNamespace()
+	client, err := InternalNewClient(sm, ns, veyron2.LocalID(clientID))
 	if err != nil {
 		t.Fatal(err)
 	}
 	defer client.Close()
-	server, err := InternalNewServer(InternalNewContext(), sm, mt, listenerID(serverID))
+	server, err := InternalNewServer(InternalNewContext(), sm, ns, listenerID(serverID))
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -928,7 +928,7 @@
 		}
 		return result, nil
 	}
-	proxy := &proxyHandle{MT: mt}
+	proxy := &proxyHandle{ns: ns}
 	if err := proxy.Start(t); err != nil {
 		t.Fatal(err)
 	}
@@ -939,7 +939,7 @@
 	if err := server.Publish("mountpoint"); err != nil {
 		t.Fatal(err)
 	}
-	verifyMount(t, mt, name)
+	verifyMount(t, ns, name)
 	// Proxied endpoint should be published and RPC should succeed (through proxy)
 	const expected = `method:"Echo",suffix:"suffix",arg:"batman"`
 	if result, err := makeCall(); result != expected || err != nil {
@@ -954,11 +954,11 @@
 		t.Fatalf(`Got (%v, %v) want ("", <non-nil>) as proxy is down`, result, err)
 	}
 	for {
-		if _, err := mt.Resolve(InternalNewContext(), name); err != nil {
+		if _, err := ns.Resolve(InternalNewContext(), name); err != nil {
 			break
 		}
 	}
-	verifyMountMissing(t, mt, name)
+	verifyMountMissing(t, ns, name)
 
 	// Proxy restarts, calls should eventually start succeeding.
 	if err := proxy.Start(t); err != nil {
@@ -989,10 +989,10 @@
 
 func runServer(argv []string) {
 	mgr := imanager.InternalNew(naming.FixedRoutingID(0x1111111))
-	mt := newMountTable()
+	ns := newNamespace()
 	id := loadIdentityFromFile(argv[1])
 	isecurity.TrustIdentityProviders(id)
-	server, err := InternalNewServer(InternalNewContext(), mgr, mt, listenerID(id))
+	server, err := InternalNewServer(InternalNewContext(), mgr, ns, listenerID(id))
 	if err != nil {
 		vlog.Fatalf("InternalNewServer failed: %v", err)
 	}
diff --git a/runtimes/google/ipc/server.go b/runtimes/google/ipc/server.go
index 3c0842c..f1c8718 100644
--- a/runtimes/google/ipc/server.go
+++ b/runtimes/google/ipc/server.go
@@ -43,21 +43,21 @@
 	active           sync.WaitGroup           // active goroutines we've spawned.
 	stopped          bool                     // whether the server has been stopped.
 	stoppedChan      chan struct{}            // closed when the server has been stopped.
-	mt               naming.MountTable
+	ns               naming.Namespace
 	publishOpt       veyron2.ServerPublishOpt // which endpoints to publish
 	publishing       bool                     // is some name being published?
 	servesMountTable bool
 }
 
-func InternalNewServer(ctx context.T, streamMgr stream.Manager, mt naming.MountTable, opts ...ipc.ServerOpt) (ipc.Server, error) {
+func InternalNewServer(ctx context.T, streamMgr stream.Manager, ns naming.Namespace, opts ...ipc.ServerOpt) (ipc.Server, error) {
 	s := &server{
 		ctx:         ctx,
 		streamMgr:   streamMgr,
 		disptrie:    newDisptrie(),
-		publisher:   publisher.New(ctx, mt, publishPeriod),
+		publisher:   publisher.New(ctx, ns, publishPeriod),
 		listeners:   make(map[stream.Listener]bool),
 		stoppedChan: make(chan struct{}),
-		mt:          mt,
+		ns:          ns,
 	}
 	for _, opt := range opts {
 		switch opt := opt.(type) {
@@ -97,10 +97,10 @@
 	if _, err := inaming.NewEndpoint(address); err == nil {
 		return address
 	}
-	if s.mt == nil {
+	if s.ns == nil {
 		return address
 	}
-	names, err := s.mt.Resolve(s.ctx, address)
+	names, err := s.ns.Resolve(s.ctx, address)
 	if err != nil {
 		return address
 	}
diff --git a/runtimes/google/lib/publisher/publisher.go b/runtimes/google/lib/publisher/publisher.go
index 517f7e2..77eab43 100644
--- a/runtimes/google/lib/publisher/publisher.go
+++ b/runtimes/google/lib/publisher/publisher.go
@@ -65,13 +65,13 @@
 
 type publishedCmd chan []string // published names are sent when cmd is done
 
-// New returns a new publisher that updates mounts on mt every period.
-func New(ctx context.T, mt naming.MountTable, period time.Duration) Publisher {
+// New returns a new publisher that updates mounts on ns every period.
+func New(ctx context.T, ns naming.Namespace, period time.Duration) Publisher {
 	p := &publisher{
 		cmdchan:  make(chan interface{}, 10),
 		donechan: make(chan struct{}),
 	}
-	go p.runLoop(ctx, mt, period)
+	go p.runLoop(ctx, ns, period)
 	return p
 }
 
@@ -136,9 +136,9 @@
 	<-p.donechan
 }
 
-func (p *publisher) runLoop(ctx context.T, mt naming.MountTable, period time.Duration) {
+func (p *publisher) runLoop(ctx context.T, ns naming.Namespace, period time.Duration) {
 	vlog.VI(1).Info("ipc pub: start runLoop")
-	state := newPubState(ctx, mt, period)
+	state := newPubState(ctx, ns, period)
 	for {
 		select {
 		case cmd, ok := <-p.cmdchan:
@@ -178,7 +178,7 @@
 // it's only used in the sequential publisher runLoop.
 type pubState struct {
 	ctx      context.T
-	mt       naming.MountTable
+	ns       naming.Namespace
 	period   time.Duration
 	deadline time.Time                 // deadline for the next sync call
 	names    []string                  // names that have been added
@@ -198,10 +198,10 @@
 	lastUnmountErr error
 }
 
-func newPubState(ctx context.T, mt naming.MountTable, period time.Duration) *pubState {
+func newPubState(ctx context.T, ns naming.Namespace, period time.Duration) *pubState {
 	return &pubState{
 		ctx:      ctx,
-		mt:       mt,
+		ns:       ns,
 		period:   period,
 		deadline: time.Now().Add(period),
 		servers:  make(map[string]bool),
@@ -260,7 +260,7 @@
 	// to sync will occur within the next period, and refresh all mounts.
 	ttl := ps.period + mountTTLSlack
 	status.lastMount = time.Now()
-	status.lastMountErr = ps.mt.Mount(ps.ctx, name, server, ttl)
+	status.lastMountErr = ps.ns.Mount(ps.ctx, name, server, ttl)
 	if status.lastMountErr != nil {
 		vlog.Errorf("ipc pub: couldn't mount(%v, %v, %v): %v", name, server, ttl, status.lastMountErr)
 	} else {
@@ -282,7 +282,7 @@
 
 func (ps *pubState) unmount(name, server string, status *mountStatus) {
 	status.lastUnmount = time.Now()
-	status.lastUnmountErr = ps.mt.Unmount(ps.ctx, name, server)
+	status.lastUnmountErr = ps.ns.Unmount(ps.ctx, name, server)
 	if status.lastUnmountErr != nil {
 		vlog.Errorf("ipc pub: couldn't unmount(%v, %v): %v", name, server, status.lastUnmountErr)
 	} else {
@@ -300,7 +300,7 @@
 func (ps *pubState) published() []string {
 	var ret []string
 	for _, name := range ps.names {
-		mtServers, err := ps.mt.ResolveToMountTable(ps.ctx, name)
+		mtServers, err := ps.ns.ResolveToMountTable(ps.ctx, name)
 		if err != nil {
 			vlog.Errorf("ipc pub: couldn't resolve %v to mount table: %v", name, err)
 			continue
diff --git a/runtimes/google/naming/mounttable/all_test.go b/runtimes/google/naming/namespace/all_test.go
similarity index 91%
rename from runtimes/google/naming/mounttable/all_test.go
rename to runtimes/google/naming/namespace/all_test.go
index f34fd27..a628069 100644
--- a/runtimes/google/naming/mounttable/all_test.go
+++ b/runtimes/google/naming/namespace/all_test.go
@@ -1,4 +1,4 @@
-package mounttable_test
+package namespace_test
 
 import (
 	"runtime/debug"
@@ -6,7 +6,7 @@
 	"time"
 
 	_ "veyron/lib/testutil"
-	"veyron/runtimes/google/naming/mounttable"
+	"veyron/runtimes/google/naming/namespace"
 	service "veyron/services/mounttable/lib"
 
 	"veyron2"
@@ -22,10 +22,10 @@
 	t.Fatal(string(debug.Stack()))
 }
 
-func doGlob(t *testing.T, ctx context.T, mt naming.MountTable, pattern string) []string {
+func doGlob(t *testing.T, ctx context.T, ns naming.Namespace, pattern string) []string {
 	var replies []string
 
-	rc, err := mt.Glob(ctx, pattern)
+	rc, err := ns.Glob(ctx, pattern)
 	if err != nil {
 		boom(t, "Glob(%s): %s", pattern, err)
 	}
@@ -80,11 +80,11 @@
 
 func TestBadRoots(t *testing.T) {
 	r, _ := rt.New()
-	if _, err := mounttable.New(r); err != nil {
-		t.Errorf("mounttable.New should not have failed with no roots")
+	if _, err := namespace.New(r); err != nil {
+		t.Errorf("namespace.New should not have failed with no roots")
 	}
-	if _, err := mounttable.New(r, "not a rooted name"); err == nil {
-		t.Errorf("mounttable.New should have failed with an unrooted name")
+	if _, err := namespace.New(r, "not a rooted name"); err == nil {
+		t.Errorf("namespace.New should have failed with an unrooted name")
 	}
 }
 
@@ -96,7 +96,7 @@
 	mt5Prefix = "mt5"
 )
 
-func testResolveToMountTable(t *testing.T, ctx context.T, mt naming.MountTable, name, want string) {
+func testResolveToMountTable(t *testing.T, ctx context.T, mt naming.Namespace, name, want string) {
 	servers, err := mt.ResolveToMountTable(ctx, name)
 	if err != nil {
 		boom(t, "Failed to ResolveToMountTable %q: %s", name, err)
@@ -106,7 +106,7 @@
 	}
 }
 
-func testResolve(t *testing.T, ctx context.T, mt naming.MountTable, name, want string) {
+func testResolve(t *testing.T, ctx context.T, mt naming.Namespace, name, want string) {
 	servers, err := mt.Resolve(ctx, name)
 	if err != nil {
 		boom(t, "Failed to Resolve %q: %s", name, err)
@@ -185,14 +185,14 @@
 	estr := ep.String()
 
 	// Run a client, creating a new runtime for it and intializing its
-	// MountTable root to point to the server created above on /<ep>/mt1.
-	// This means that any relative names mounted using this local MountTable
+	// namespace root to point to the server created above on /<ep>/mt1.
+	// This means that any relative names mounted using this local namespace
 	// will appear below mt1.
-	r, err := rt.New(veyron2.MountTableRoots([]string{naming.JoinAddressName(estr, mt1Prefix)}))
+	r, err := rt.New(veyron2.NamespaceRoots([]string{naming.JoinAddressName(estr, mt1Prefix)}))
 	if err != nil {
 		boom(t, "Failed to create client runtime: %s", err)
 	}
-	mt := r.MountTable()
+	mt := r.Namespace()
 
 	ctx := r.NewContext()
 
@@ -284,13 +284,13 @@
 		boom(t, "Should have failed to mt3/mt4/mt5")
 	}
 
-	// Resolving m3/mt4/mt5 to a MountTable using the local MountTable gives
+	// Resolving m3/mt4/mt5 to a MountTable using the local namepsace gives
 	// us /<estr>//mt4/mt5.
 	testResolveToMountTable(t, ctx, mt, "mt3/mt4/mt5", naming.JoinAddressName(estr, "//mt4/mt5"))
 	testResolveToMountTable(t, ctx, mt, "mt3/mt4//mt5", naming.JoinAddressName(estr, "//mt4//mt5"))
 
-	// But looking up mt4/mt5 in the local MountTable will give us
-	// /<estr>//mt1/mt4/mt5 since the localMountTable has mt1 as its root!
+	// But looking up mt4/mt5 in the local namespace will give us
+	// /<estr>//mt1/mt4/mt5 since the local namespace has mt1 as its root!
 	testResolveToMountTable(t, ctx, mt, "mt4/mt5", naming.JoinAddressName(estr, "//mt1/mt4/mt5"))
 
 	// Looking mt3//mt4/mt5 will return the MountTable that serves //mt4/mt5.
diff --git a/runtimes/google/naming/mounttable/glob.go b/runtimes/google/naming/namespace/glob.go
similarity index 99%
rename from runtimes/google/naming/mounttable/glob.go
rename to runtimes/google/naming/namespace/glob.go
index 29ae756..e6071a8 100644
--- a/runtimes/google/naming/mounttable/glob.go
+++ b/runtimes/google/naming/namespace/glob.go
@@ -1,4 +1,4 @@
-package mounttable
+package namespace
 
 import (
 	"container/list"
diff --git a/runtimes/google/naming/mounttable/glob_test.go b/runtimes/google/naming/namespace/glob_test.go
similarity index 95%
rename from runtimes/google/naming/mounttable/glob_test.go
rename to runtimes/google/naming/namespace/glob_test.go
index 38a2f81..790b459 100644
--- a/runtimes/google/naming/mounttable/glob_test.go
+++ b/runtimes/google/naming/namespace/glob_test.go
@@ -1,4 +1,4 @@
-package mounttable
+package namespace
 
 import (
 	"testing"
diff --git a/runtimes/google/naming/mounttable/mount.go b/runtimes/google/naming/namespace/mount.go
similarity index 98%
rename from runtimes/google/naming/mounttable/mount.go
rename to runtimes/google/naming/namespace/mount.go
index f35f045..721ef85 100644
--- a/runtimes/google/naming/mounttable/mount.go
+++ b/runtimes/google/naming/namespace/mount.go
@@ -1,4 +1,4 @@
-package mounttable
+package namespace
 
 import (
 	"time"
diff --git a/runtimes/google/naming/mounttable/namespace.go b/runtimes/google/naming/namespace/namespace.go
similarity index 98%
rename from runtimes/google/naming/mounttable/namespace.go
rename to runtimes/google/naming/namespace/namespace.go
index 6de47ad..92c486c 100644
--- a/runtimes/google/naming/mounttable/namespace.go
+++ b/runtimes/google/naming/namespace/namespace.go
@@ -1,4 +1,4 @@
-package mounttable
+package namespace
 
 import (
 	"sync"
diff --git a/runtimes/google/naming/mounttable/resolve.go b/runtimes/google/naming/namespace/resolve.go
similarity index 99%
rename from runtimes/google/naming/mounttable/resolve.go
rename to runtimes/google/naming/namespace/resolve.go
index 365325d..92fc6f0 100644
--- a/runtimes/google/naming/mounttable/resolve.go
+++ b/runtimes/google/naming/namespace/resolve.go
@@ -1,4 +1,4 @@
-package mounttable
+package namespace
 
 import (
 	"errors"
diff --git a/runtimes/google/naming/mounttable/stub.go b/runtimes/google/naming/namespace/stub.go
similarity index 96%
rename from runtimes/google/naming/mounttable/stub.go
rename to runtimes/google/naming/namespace/stub.go
index 697aa7e..9661cae 100644
--- a/runtimes/google/naming/mounttable/stub.go
+++ b/runtimes/google/naming/namespace/stub.go
@@ -1,4 +1,4 @@
-package mounttable
+package namespace
 
 // This file defines data types that are also defined in the idl for the
 // mounttable. We live with the duplication here to avoid having to depend
diff --git a/runtimes/google/rt/ipc.go b/runtimes/google/rt/ipc.go
index 417f861..aaa4d11 100644
--- a/runtimes/google/rt/ipc.go
+++ b/runtimes/google/rt/ipc.go
@@ -13,15 +13,15 @@
 
 func (rt *vrt) NewClient(opts ...ipc.ClientOpt) (ipc.Client, error) {
 	sm := rt.sm
-	mt := rt.mt
+	ns := rt.ns
 	cIDOpt := veyron2.LocalID(rt.id.Identity())
 	var otherOpts []ipc.ClientOpt
 	for _, opt := range opts {
 		switch topt := opt.(type) {
 		case veyron2.StreamManagerOpt:
 			sm = topt.Manager
-		case veyron2.MountTableOpt:
-			mt = topt.MountTable
+		case veyron2.NamespaceOpt:
+			ns = topt.Namespace
 		case veyron2.LocalIDOpt:
 			cIDOpt = topt
 		default:
@@ -31,7 +31,7 @@
 	if cIDOpt.PrivateID != nil {
 		otherOpts = append(otherOpts, cIDOpt)
 	}
-	return iipc.InternalNewClient(sm, mt, otherOpts...)
+	return iipc.InternalNewClient(sm, ns, otherOpts...)
 }
 
 func (rt *vrt) Client() ipc.Client {
@@ -51,14 +51,14 @@
 	rt.startHTTPDebugServerOnce()
 
 	sm := rt.sm
-	mt := rt.mt
+	ns := rt.ns
 	var otherOpts []ipc.ServerOpt
 	for _, opt := range opts {
 		switch topt := opt.(type) {
 		case veyron2.StreamManagerOpt:
 			sm = topt
-		case veyron2.MountTableOpt:
-			mt = topt
+		case veyron2.NamespaceOpt:
+			ns = topt
 		default:
 			otherOpts = append(otherOpts, opt)
 		}
@@ -67,7 +67,7 @@
 	otherOpts = append(otherOpts, rt.id)
 
 	ctx := rt.NewContext()
-	return iipc.InternalNewServer(ctx, sm, mt, otherOpts...)
+	return iipc.InternalNewServer(ctx, sm, ns, otherOpts...)
 }
 
 func (rt *vrt) NewStreamManager(opts ...stream.ManagerOpt) (stream.Manager, error) {
diff --git a/runtimes/google/rt/naming.go b/runtimes/google/rt/naming.go
index a865856..00141a2 100644
--- a/runtimes/google/rt/naming.go
+++ b/runtimes/google/rt/naming.go
@@ -9,6 +9,6 @@
 	return inaming.NewEndpoint(ep)
 }
 
-func (rt *vrt) MountTable() naming.MountTable {
-	return rt.mt
+func (rt *vrt) Namespace() naming.Namespace {
+	return rt.ns
 }
diff --git a/runtimes/google/rt/rt.go b/runtimes/google/rt/rt.go
index 8c3c18f..b8fbe63 100644
--- a/runtimes/google/rt/rt.go
+++ b/runtimes/google/rt/rt.go
@@ -7,7 +7,7 @@
 	"sync"
 
 	"veyron/lib/exec"
-	imounttable "veyron/runtimes/google/naming/mounttable"
+	"veyron/runtimes/google/naming/namespace"
 
 	"veyron2"
 	"veyron2/ipc"
@@ -21,7 +21,7 @@
 	product    product.T
 	httpServer string
 	sm         stream.Manager
-	mt         naming.MountTable
+	ns         naming.Namespace
 	rid        naming.RoutingID
 	signals    chan os.Signal
 	id         *currentIDOpt
@@ -65,7 +65,7 @@
 	// warnings and to provide a modicum of security.
 	rt.httpServer = "127.0.0.1:0"
 	rt.id = &currentIDOpt{}
-	mtRoots := []string{}
+	nsRoots := []string{}
 
 	for _, o := range opts {
 		switch v := o.(type) {
@@ -73,8 +73,8 @@
 			rt.id.setIdentity(v.PrivateID)
 		case veyron2.ProductOpt:
 			rt.product = v.T
-		case veyron2.MountTableRoots:
-			mtRoots = v
+		case veyron2.NamespaceRoots:
+			nsRoots = v
 		case veyron2.HTTPDebugOpt:
 			rt.httpServer = string(v)
 		default:
@@ -93,18 +93,25 @@
 		rt.product = product
 	}
 
-	if len(mtRoots) == 0 {
-		if mtRoot := os.Getenv("MOUNTTABLE_ROOT"); mtRoot != "" {
-			mtRoots = append(mtRoots, mtRoot)
+	if len(nsRoots) == 0 {
+		// TODO(cnicolaou,caprita): remove this when NAMESPACE_ROOT is in use.
+		if nsRoot := os.Getenv("MOUNTTABLE_ROOT"); nsRoot != "" {
+			nsRoots = append(nsRoots, nsRoot)
 		}
+		// TODO(cnicolaou,caprita): rename this to NAMESPACE_ROOT.
+		if nsRoot := os.Getenv("NAMESPACE_ROOT"); nsRoot != "" {
+			nsRoots = append(nsRoots, nsRoot)
+		}
+		// TODO(cnicolaou,caprita): decide if want to allow NAMESPACE_ROOTS
+		// e.g. comma separated list of roots.
 	}
 
-	if mt, err := imounttable.New(rt, mtRoots...); err != nil {
+	if ns, err := namespace.New(rt, nsRoots...); err != nil {
 		return fmt.Errorf("Couldn't create mount table: %v", err)
 	} else {
-		rt.mt = mt
+		rt.ns = ns
 	}
-	vlog.VI(2).Infof("MountTable Roots: %s", mtRoots)
+	vlog.VI(2).Infof("Namespace Roots: %s", nsRoots)
 
 	var err error
 	if rt.sm, err = rt.NewStreamManager(); err != nil {
diff --git a/services/mgmt/node/impl/impl_test.go b/services/mgmt/node/impl/impl_test.go
index 2ca465c..7ca6f3f 100644
--- a/services/mgmt/node/impl/impl_test.go
+++ b/services/mgmt/node/impl/impl_test.go
@@ -180,13 +180,13 @@
 	defer runtime.Shutdown()
 	mtName, mtCleanup := startMountTable(t, runtime)
 	defer mtCleanup()
-	mt := runtime.MountTable()
-	// The local, client side MountTable is now relative to the
+	ns := runtime.Namespace()
+	// The local, client side Namespace is now relative to the
 	// MountTable server started above.
-	mt.SetRoots([]string{mtName})
+	ns.SetRoots([]string{mtName})
 	ctx := runtime.NewContext()
 
-	// Spawn a node manager with an identity blessed by the mounttable's
+	// Spawn a node manager with an identity blessed by the MountTable's
 	// identity under the name "test", and obtain its address.
 	//
 	// TODO(ataly): Eventually we want to use the same identity the node
@@ -197,7 +197,7 @@
 	defer child.Cleanup()
 	child.Expect("ready")
 	name := naming.Join(mtName, "nm")
-	results, err := mt.Resolve(ctx, name)
+	results, err := ns.Resolve(ctx, name)
 	if err != nil {
 		t.Fatalf("Resolve(%v) failed: %v", name, err)
 	}
diff --git a/services/mounttable/lib/mounttable_test.go b/services/mounttable/lib/mounttable_test.go
index 86d1431..f8744bc 100644
--- a/services/mounttable/lib/mounttable_test.go
+++ b/services/mounttable/lib/mounttable_test.go
@@ -22,9 +22,9 @@
 	"veyron2/vlog"
 )
 
-// stupidMT is a version of naming.MountTable that we can control.  This exists so that we have some
+// stupidNS is a version of naming.Namespace that we can control.  This exists so that we have some
 // firm ground to stand on vis a vis the stub interface.
-type stupidMT struct {
+type stupidNS struct {
 	id ipc.ClientOpt
 }
 
@@ -41,27 +41,27 @@
 	t.Fatal(string(debug.Stack()))
 }
 
-// quuxClient returns an ipc.Client that uses the quux mounttable for name
+// quuxClient returns an ipc.Client that uses the simple namespace for name
 // resolution.
 func quuxClient(id ipc.ClientOpt) ipc.Client {
-	mt := stupidMT{id}
-	c, err := rt.R().NewClient(id, veyron2.MountTable(mt))
+	ns := stupidNS{id}
+	c, err := rt.R().NewClient(id, veyron2.Namespace(ns))
 	if err != nil {
 		panic(err)
 	}
 	return c
 }
 
-func (stupidMT) Mount(context.T, string, string, time.Duration) error {
+func (stupidNS) Mount(context.T, string, string, time.Duration) error {
 	return errors.New("unimplemented")
 }
 
-func (stupidMT) Unmount(context.T, string, string) error {
+func (stupidNS) Unmount(context.T, string, string) error {
 	return errors.New("unimplemented")
 }
 
 // Resolve will only go one level deep, i.e., it doesn't walk past the first mount point.
-func (mt stupidMT) Resolve(ctx context.T, name string) ([]string, error) {
+func (ns stupidNS) Resolve(ctx context.T, name string) ([]string, error) {
 	vlog.VI(1).Infof("MyResolve %q", name)
 	address, suffix := naming.SplitAddressName(name)
 	if len(address) == 0 {
@@ -73,7 +73,7 @@
 	}
 
 	// Resolve via another
-	objectPtr, err := mounttable.BindMountTable("/"+address+"//"+suffix, quuxClient(mt.id))
+	objectPtr, err := mounttable.BindMountTable("/"+address+"//"+suffix, quuxClient(ns.id))
 	if err != nil {
 		return nil, err
 	}
@@ -89,20 +89,20 @@
 	return servers, nil
 }
 
-func (s stupidMT) Unresolve(ctx context.T, name string) ([]string, error) {
+func (s stupidNS) Unresolve(ctx context.T, name string) ([]string, error) {
 	return s.Resolve(ctx, name)
 }
 
-func (stupidMT) ResolveToMountTable(ctx context.T, name string) ([]string, error) {
+func (stupidNS) ResolveToMountTable(ctx context.T, name string) ([]string, error) {
 	return nil, errors.New("ResolveToMountTable is not implemented in this MountTable")
 }
 
 // Glob implements naming.MountTable.Glob.
-func (stupidMT) Glob(ctx context.T, pattern string) (chan naming.MountEntry, error) {
+func (stupidNS) Glob(ctx context.T, pattern string) (chan naming.MountEntry, error) {
 	return nil, errors.New("Glob is not implemented in this MountTable")
 }
 
-func (s stupidMT) SetRoots([]string) error {
+func (s stupidNS) SetRoots([]string) error {
 	return nil
 }
 
diff --git a/services/wspr/wsprd/lib/wspr_test.go b/services/wspr/wsprd/lib/wspr_test.go
index 42ee621..c2e6102 100644
--- a/services/wspr/wsprd/lib/wspr_test.go
+++ b/services/wspr/wsprd/lib/wspr_test.go
@@ -394,7 +394,7 @@
 
 	proxyEndpoint := proxyServer.Endpoint().String()
 
-	wspr := NewWSPR(0, "/"+proxyEndpoint, veyron2.MountTableRoots{"/" + endpoint.String() + "/mt"})
+	wspr := NewWSPR(0, "/"+proxyEndpoint, veyron2.NamespaceRoots{"/" + endpoint.String() + "/mt"})
 	wspr.setup()
 	wsp := websocketPipe{ctx: wspr}
 	wsp.setup()
@@ -478,7 +478,7 @@
 
 	proxyEndpoint := proxyServer.Endpoint().String()
 
-	wspr := NewWSPR(0, "/"+proxyEndpoint, veyron2.MountTableRoots{"/" + endpoint.String() + "/mt//"})
+	wspr := NewWSPR(0, "/"+proxyEndpoint, veyron2.NamespaceRoots{"/" + endpoint.String() + "/mt//"})
 	wspr.setup()
 	wsp := websocketPipe{ctx: wspr}
 	writer := testWriter{
diff --git a/tools/mounttable/impl/impl.go b/tools/mounttable/impl/impl.go
index d12d6e3..0446a66 100644
--- a/tools/mounttable/impl/impl.go
+++ b/tools/mounttable/impl/impl.go
@@ -13,7 +13,7 @@
 
 func bindMT(name string) (mounttable.MountTable, error) {
 	ctx := rt.R().NewContext()
-	mts, err := rt.R().MountTable().ResolveToMountTable(ctx, name)
+	mts, err := rt.R().Namespace().ResolveToMountTable(ctx, name)
 	if err != nil {
 		return nil, err
 	}