diff --git a/lib/testutil/glob.go b/lib/testutil/glob.go
index ecd078f..0bc1482 100644
--- a/lib/testutil/glob.go
+++ b/lib/testutil/glob.go
@@ -5,8 +5,8 @@
 	"sort"
 
 	"veyron.io/veyron/veyron2/ipc"
+	"veyron.io/veyron/veyron2/naming"
 	"veyron.io/veyron/veyron2/rt"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 )
 
 // GlobName calls __Glob on the given object with the given pattern and returns
@@ -19,7 +19,7 @@
 	results := []string{}
 Loop:
 	for {
-		var me types.MountEntry
+		var me naming.VDLMountEntry
 		switch err := call.Recv(&me); err {
 		case nil:
 			results = append(results, me.Name)
diff --git a/runtimes/google/ipc/debug_test.go b/runtimes/google/ipc/debug_test.go
index c537fec..b4111bb 100644
--- a/runtimes/google/ipc/debug_test.go
+++ b/runtimes/google/ipc/debug_test.go
@@ -8,7 +8,6 @@
 	"veyron.io/veyron/veyron2/ipc"
 	"veyron.io/veyron/veyron2/naming"
 	"veyron.io/veyron/veyron2/options"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 	"veyron.io/veyron/veyron2/vlog"
 
 	"veyron.io/veyron/veyron/lib/stats"
@@ -107,7 +106,7 @@
 		}
 		results := []string{}
 		for {
-			var me types.MountEntry
+			var me naming.VDLMountEntry
 			if err := call.Recv(&me); err != nil {
 				break
 			}
diff --git a/runtimes/google/ipc/glob.go b/runtimes/google/ipc/glob.go
index d28fb8f..2c58108 100644
--- a/runtimes/google/ipc/glob.go
+++ b/runtimes/google/ipc/glob.go
@@ -6,7 +6,6 @@
 	"veyron.io/veyron/veyron2/ipc"
 	"veyron.io/veyron/veyron2/naming"
 	"veyron.io/veyron/veyron2/security"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 	"veyron.io/veyron/veyron2/verror"
 	"veyron.io/veyron/veyron2/vlog"
 
@@ -96,7 +95,7 @@
 	gs := invoker.VGlob()
 	if gs == nil || (gs.VAllGlobber == nil && gs.VChildrenGlobber == nil) {
 		if g.Len() == 0 {
-			call.Send(types.MountEntry{Name: name})
+			call.Send(naming.VDLMountEntry{Name: name})
 		}
 		return nil
 	}
@@ -112,7 +111,7 @@
 			return nil
 		}
 		if g.Len() == 0 {
-			call.Send(types.MountEntry{Name: name})
+			call.Send(naming.VDLMountEntry{Name: name})
 		}
 		if g.Finished() {
 			return nil
@@ -151,7 +150,7 @@
 var _ ipc.ServerContext = (*localServerCall)(nil)
 
 func (c *localServerCall) Send(v interface{}) error {
-	me, ok := v.(types.MountEntry)
+	me, ok := v.(naming.VDLMountEntry)
 	if !ok {
 		return verror.BadArgf("unexpected stream type. Got %T, want MountEntry", v)
 	}
diff --git a/runtimes/google/ipc/glob_test.go b/runtimes/google/ipc/glob_test.go
index 44b7720..0ee3a2b 100644
--- a/runtimes/google/ipc/glob_test.go
+++ b/runtimes/google/ipc/glob_test.go
@@ -11,7 +11,6 @@
 	"veyron.io/veyron/veyron2/naming"
 	"veyron.io/veyron/veyron2/rt"
 	"veyron.io/veyron/veyron2/security"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 
 	"veyron.io/veyron/veyron/lib/glob"
 	"veyron.io/veyron/veyron/lib/testutil"
@@ -210,7 +209,7 @@
 
 func (o *globObject) globLoop(call ipc.ServerCall, name string, g *glob.Glob, n *node) {
 	if g.Len() == 0 {
-		call.Send(types.MountEntry{Name: name})
+		call.Send(naming.VDLMountEntry{Name: name})
 	}
 	if g.Finished() {
 		return
diff --git a/runtimes/google/naming/namespace/all_test.go b/runtimes/google/naming/namespace/all_test.go
index 8a10577..83995ad 100644
--- a/runtimes/google/naming/namespace/all_test.go
+++ b/runtimes/google/naming/namespace/all_test.go
@@ -14,7 +14,6 @@
 	"veyron.io/veyron/veyron2/rt"
 	"veyron.io/veyron/veyron2/security"
 	"veyron.io/veyron/veyron2/services/mounttable"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 	verror "veyron.io/veyron/veyron2/verror2"
 	"veyron.io/veyron/veyron2/vlog"
 
@@ -98,7 +97,7 @@
 
 func (t *testServer) globLoop(call ipc.ServerCall, prefix string, g *glob.Glob, tree []string) error {
 	if g.Len() == 0 {
-		if err := call.Send(types.MountEntry{Name: prefix}); err != nil {
+		if err := call.Send(naming.VDLMountEntry{Name: prefix}); err != nil {
 			return err
 		}
 	}
diff --git a/runtimes/google/naming/namespace/glob.go b/runtimes/google/naming/namespace/glob.go
index ed6cda2..89fc217 100644
--- a/runtimes/google/naming/namespace/glob.go
+++ b/runtimes/google/naming/namespace/glob.go
@@ -11,7 +11,6 @@
 	"veyron.io/veyron/veyron2/ipc"
 	"veyron.io/veyron/veyron2/naming"
 	"veyron.io/veyron/veyron2/options"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 	verror "veyron.io/veyron/veyron2/verror2"
 	"veyron.io/veyron/veyron2/vlog"
 )
@@ -69,7 +68,7 @@
 
 		// At this point we're commited to a server since it answered tha call.
 		for {
-			var e types.MountEntry
+			var e naming.VDLMountEntry
 			err := call.Recv(&e)
 			if err == io.EOF {
 				break
diff --git a/runtimes/google/naming/namespace/mount.go b/runtimes/google/naming/namespace/mount.go
index 8339a8b..f82d5b3 100644
--- a/runtimes/google/naming/namespace/mount.go
+++ b/runtimes/google/naming/namespace/mount.go
@@ -7,12 +7,11 @@
 	"veyron.io/veyron/veyron2/ipc"
 	"veyron.io/veyron/veyron2/naming"
 	"veyron.io/veyron/veyron2/options"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 	"veyron.io/veyron/veyron2/vlog"
 )
 
 // mountIntoMountTable mounts a single server into a single mount table.
-func mountIntoMountTable(ctx context.T, client ipc.Client, name, server string, ttl time.Duration, flags types.MountFlag) error {
+func mountIntoMountTable(ctx context.T, client ipc.Client, name, server string, ttl time.Duration, flags naming.MountFlag) error {
 	ctx, _ = ctx.WithTimeout(callTimeout)
 	call, err := client.StartCall(ctx, name, "Mount", []interface{}{server, uint32(ttl.Seconds()), flags}, options.NoResolve(true))
 	if err != nil {
@@ -40,17 +39,17 @@
 func (ns *namespace) Mount(ctx context.T, name, server string, ttl time.Duration, opts ...naming.MountOpt) error {
 	defer vlog.LogCall()()
 
-	var flags types.MountFlag
+	var flags naming.MountFlag
 	for _, o := range opts {
 		// NB: used a switch since we'll be adding more options.
 		switch v := o.(type) {
 		case naming.ReplaceMountOpt:
 			if v {
-				flags |= types.MountFlag(types.Replace)
+				flags |= naming.MountFlag(naming.Replace)
 			}
 		case naming.ServesMountTableOpt:
 			if v {
-				flags |= types.MountFlag(types.MT)
+				flags |= naming.MountFlag(naming.MT)
 			}
 		}
 	}
diff --git a/runtimes/google/naming/namespace/resolve.go b/runtimes/google/naming/namespace/resolve.go
index 7d700e9..eb69a3c 100644
--- a/runtimes/google/naming/namespace/resolve.go
+++ b/runtimes/google/naming/namespace/resolve.go
@@ -8,7 +8,6 @@
 	"veyron.io/veyron/veyron2/ipc"
 	"veyron.io/veyron/veyron2/naming"
 	"veyron.io/veyron/veyron2/options"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 	verror "veyron.io/veyron/veyron2/verror2"
 	"veyron.io/veyron/veyron2/vlog"
 )
@@ -31,7 +30,7 @@
 			vlog.VI(2).Infof("ResolveStep.StartCall %s failed: %s", name, err)
 			continue
 		}
-		var entry types.MountEntry
+		var entry naming.VDLMountEntry
 		ierr := call.Finish(&entry, &err)
 		if ierr != nil {
 			// Internal/system error.
diff --git a/runtimes/google/naming/namespace/stub.go b/runtimes/google/naming/namespace/stub.go
index 2f62a39..66590c7 100644
--- a/runtimes/google/naming/namespace/stub.go
+++ b/runtimes/google/naming/namespace/stub.go
@@ -4,7 +4,6 @@
 	"time"
 
 	"veyron.io/veyron/veyron2/naming"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 )
 
 func convertServersToStrings(servers []naming.MountedServer, suffix string) (ret []string) {
@@ -21,7 +20,7 @@
 	return
 }
 
-func convertServers(servers []types.MountedServer) []naming.MountedServer {
+func convertServers(servers []naming.VDLMountedServer) []naming.MountedServer {
 	var reply []naming.MountedServer
 	for _, s := range servers {
 		if s.TTL == 0 {
@@ -33,7 +32,7 @@
 	return reply
 }
 
-func convertMountEntry(e *types.MountEntry) *naming.MountEntry {
+func convertMountEntry(e *naming.VDLMountEntry) *naming.MountEntry {
 	v := &naming.MountEntry{Name: e.Name, Servers: convertServers(e.Servers)}
 	v.SetServesMountTable(e.MT)
 	return v
diff --git a/services/mgmt/node/impl/impl_test.go b/services/mgmt/node/impl/impl_test.go
index 9185c2f..3e4eaca 100644
--- a/services/mgmt/node/impl/impl_test.go
+++ b/services/mgmt/node/impl/impl_test.go
@@ -37,7 +37,6 @@
 	"veyron.io/veyron/veyron2/services/mgmt/node"
 	"veyron.io/veyron/veyron2/services/mgmt/pprof"
 	"veyron.io/veyron/veyron2/services/mgmt/stats"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 	"veyron.io/veyron/veyron2/verror"
 	"veyron.io/veyron/veyron2/vlog"
 	"veyron.io/veyron/veyron2/vom"
@@ -62,7 +61,7 @@
 
 func init() {
 	// TODO(rthellend): Remove when vom2 is ready.
-	vom.Register(&types.MountedServer{})
+	vom.Register(&naming.VDLMountedServer{})
 
 	modules.RegisterChild(execScriptCmd, "", execScript)
 	modules.RegisterChild(nodeManagerCmd, "", nodeManager)
diff --git a/services/mgmt/stats/impl/stats_invoker.go b/services/mgmt/stats/impl/stats_invoker.go
index 449e87a..915ff22 100644
--- a/services/mgmt/stats/impl/stats_invoker.go
+++ b/services/mgmt/stats/impl/stats_invoker.go
@@ -8,8 +8,8 @@
 	"veyron.io/veyron/veyron/lib/stats"
 
 	"veyron.io/veyron/veyron2/ipc"
+	"veyron.io/veyron/veyron2/naming"
 	"veyron.io/veyron/veyron2/services/mgmt/stats/types"
-	mttypes "veyron.io/veyron/veyron2/services/mounttable/types"
 	watchtypes "veyron.io/veyron/veyron2/services/watch/types"
 	"veyron.io/veyron/veyron2/vdl/vdlutil"
 	"veyron.io/veyron/veyron2/verror"
@@ -39,7 +39,7 @@
 
 	it := stats.Glob(i.suffix, pattern, time.Time{}, false)
 	for it.Advance() {
-		call.Send(mttypes.MountEntry{Name: it.Value().Key})
+		call.Send(naming.VDLMountEntry{Name: it.Value().Key})
 	}
 	if err := it.Err(); err != nil {
 		if err == stats.ErrNotFound {
diff --git a/services/mounttable/lib/mounttable.go b/services/mounttable/lib/mounttable.go
index e01a03e..8aef4b3 100644
--- a/services/mounttable/lib/mounttable.go
+++ b/services/mounttable/lib/mounttable.go
@@ -17,7 +17,6 @@
 	"veyron.io/veyron/veyron2/rt"
 	"veyron.io/veyron/veyron2/security"
 	"veyron.io/veyron/veyron2/services/mounttable"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 	verror "veyron.io/veyron/veyron2/verror2"
 	"veyron.io/veyron/veyron2/vlog"
 )
@@ -211,7 +210,7 @@
 
 // ResolveStep returns the next server in a resolution, the name remaining below that server,
 // and whether or not that server is another mount table.
-func (ms *mountContext) ResolveStep(context ipc.ServerContext) (servers []types.MountedServer, suffix string, err error) {
+func (ms *mountContext) ResolveStep(context ipc.ServerContext) (servers []naming.VDLMountedServer, suffix string, err error) {
 	vlog.VI(2).Infof("ResolveStep %q", ms.name)
 	mt := ms.mt
 	// TODO(caprita): we need to grab a write lock because walk may
@@ -232,7 +231,7 @@
 
 // ResolveStepX returns the next server in a resolution in the form of a MountEntry.  The name
 // in the mount entry is the name relative to the server's root.
-func (ms *mountContext) ResolveStepX(context ipc.ServerContext) (entry types.MountEntry, err error) {
+func (ms *mountContext) ResolveStepX(context ipc.ServerContext) (entry naming.VDLMountEntry, err error) {
 	vlog.VI(2).Infof("ResolveStep %q", ms.name)
 	mt := ms.mt
 	// TODO(caprita): we need to grab a write lock because walk may
@@ -257,16 +256,16 @@
 	return
 }
 
-func hasMTFlag(flags types.MountFlag) bool {
-	return (flags & types.MT) == types.MT
+func hasMTFlag(flags naming.MountFlag) bool {
+	return (flags & naming.MT) == naming.MT
 }
 
-func hasReplaceFlag(flags types.MountFlag) bool {
-	return (flags & types.Replace) == types.Replace
+func hasReplaceFlag(flags naming.MountFlag) bool {
+	return (flags & naming.Replace) == naming.Replace
 }
 
 // Mount a server onto the name in the receiver.
-func (ms *mountContext) Mount(context ipc.ServerContext, server string, ttlsecs uint32, flags types.MountFlag) error {
+func (ms *mountContext) Mount(context ipc.ServerContext, server string, ttlsecs uint32, flags naming.MountFlag) error {
 	mt := ms.mt
 	if ttlsecs == 0 {
 		ttlsecs = 10 * 365 * 24 * 60 * 60 // a really long time
@@ -387,7 +386,7 @@
 			return
 		}
 		sender.Send(
-			types.MountEntry{
+			naming.VDLMountEntry{
 				Name: name, Servers: m.servers.copyToSlice(),
 				MT: n.mount.mt,
 			})
@@ -400,7 +399,7 @@
 			n.removeUseless()
 			return
 		}
-		sender.Send(types.MountEntry{Name: name})
+		sender.Send(naming.VDLMountEntry{Name: name})
 	}
 
 	if pattern.Finished() {
@@ -456,5 +455,5 @@
 	for i, s := range servers {
 		servers[i].Server = naming.Join(s.Server, slashSlashJoin(elems))
 	}
-	stream.SendStream().Send(types.MountEntry{Name: "", Servers: servers})
+	stream.SendStream().Send(naming.VDLMountEntry{Name: "", Servers: servers})
 }
diff --git a/services/mounttable/lib/mounttable_test.go b/services/mounttable/lib/mounttable_test.go
index 5a011f1..db3aa20 100644
--- a/services/mounttable/lib/mounttable_test.go
+++ b/services/mounttable/lib/mounttable_test.go
@@ -16,7 +16,6 @@
 	"veyron.io/veyron/veyron2/options"
 	"veyron.io/veyron/veyron2/rt"
 	"veyron.io/veyron/veyron2/security"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 	"veyron.io/veyron/veyron2/vlog"
 
 	"veyron.io/veyron/veyron/lib/testutil"
@@ -93,7 +92,7 @@
 	if err != nil {
 		return "", err
 	}
-	var entry types.MountEntry
+	var entry naming.VDLMountEntry
 	if ierr := call.Finish(&entry, &err); ierr != nil {
 		return "", ierr
 	}
@@ -282,7 +281,7 @@
 	}
 	var reply []string
 	for {
-		var e types.MountEntry
+		var e naming.VDLMountEntry
 		err := call.Recv(&e)
 		if err == io.EOF {
 			break
diff --git a/services/mounttable/lib/neighborhood.go b/services/mounttable/lib/neighborhood.go
index d29f8f1..0f98b7f 100644
--- a/services/mounttable/lib/neighborhood.go
+++ b/services/mounttable/lib/neighborhood.go
@@ -14,7 +14,6 @@
 	"veyron.io/veyron/veyron2/rt"
 	"veyron.io/veyron/veyron2/security"
 	"veyron.io/veyron/veyron2/services/mounttable"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 	verror "veyron.io/veyron/veyron2/verror2"
 	"veyron.io/veyron/veyron2/vlog"
 
@@ -153,8 +152,8 @@
 }
 
 // neighbor returns the MountedServers for a particular neighbor.
-func (nh *neighborhood) neighbor(instance string) []types.MountedServer {
-	var reply []types.MountedServer
+func (nh *neighborhood) neighbor(instance string) []naming.VDLMountedServer {
+	var reply []naming.VDLMountedServer
 	si := nh.mdns.ResolveInstance(instance, "veyron")
 
 	// Use a map to dedup any addresses seen
@@ -171,7 +170,7 @@
 		}
 	}
 	for addr, ttl := range addrMap {
-		reply = append(reply, types.MountedServer{addr, ttl})
+		reply = append(reply, naming.VDLMountedServer{addr, ttl})
 	}
 
 	if reply != nil {
@@ -187,15 +186,15 @@
 		for _, ip := range ips {
 			addr := net.JoinHostPort(ip.String(), strconv.Itoa(int(rr.Port)))
 			ep := naming.FormatEndpoint("tcp", addr)
-			reply = append(reply, types.MountedServer{naming.JoinAddressName(ep, ""), ttl})
+			reply = append(reply, naming.VDLMountedServer{naming.JoinAddressName(ep, ""), ttl})
 		}
 	}
 	return reply
 }
 
 // neighbors returns all neighbors and their MountedServer structs.
-func (nh *neighborhood) neighbors() map[string][]types.MountedServer {
-	neighbors := make(map[string][]types.MountedServer, 0)
+func (nh *neighborhood) neighbors() map[string][]naming.VDLMountedServer {
+	neighbors := make(map[string][]naming.VDLMountedServer, 0)
 	members := nh.mdns.ServiceDiscovery("veyron")
 	for _, m := range members {
 		if neighbor := nh.neighbor(m.Name); neighbor != nil {
@@ -207,7 +206,7 @@
 }
 
 // ResolveStep implements ResolveStep
-func (ns *neighborhoodService) ResolveStep(ctx ipc.ServerContext) (servers []types.MountedServer, suffix string, err error) {
+func (ns *neighborhoodService) ResolveStep(ctx ipc.ServerContext) (servers []naming.VDLMountedServer, suffix string, err error) {
 	nh := ns.nh
 	vlog.VI(2).Infof("ResolveStep %v\n", ns.elems)
 	if len(ns.elems) == 0 {
@@ -224,7 +223,7 @@
 }
 
 // ResolveStepX implements ResolveStepX
-func (ns *neighborhoodService) ResolveStepX(ctx ipc.ServerContext) (entry types.MountEntry, err error) {
+func (ns *neighborhoodService) ResolveStepX(ctx ipc.ServerContext) (entry naming.VDLMountEntry, err error) {
 	nh := ns.nh
 	vlog.VI(2).Infof("ResolveStep %v\n", ns.elems)
 	if len(ns.elems) == 0 {
@@ -247,7 +246,7 @@
 }
 
 // Mount not implemented.
-func (*neighborhoodService) Mount(_ ipc.ServerContext, server string, ttlsecs uint32, opts types.MountFlag) error {
+func (*neighborhoodService) Mount(_ ipc.ServerContext, server string, ttlsecs uint32, opts naming.MountFlag) error {
 	return errors.New("this server does not implement Mount")
 }
 
@@ -273,7 +272,7 @@
 			if ok, _, _ := g.MatchInitialSegment(k); !ok {
 				continue
 			}
-			if err := sender.Send(types.MountEntry{Name: k, Servers: n, MT: true}); err != nil {
+			if err := sender.Send(naming.VDLMountEntry{Name: k, Servers: n, MT: true}); err != nil {
 				return err
 			}
 		}
@@ -283,7 +282,7 @@
 		if neighbor == nil {
 			return verror.Make(naming.ErrNoSuchName, ctx, ns.elems[0])
 		}
-		return sender.Send(types.MountEntry{Name: "", Servers: neighbor, MT: true})
+		return sender.Send(naming.VDLMountEntry{Name: "", Servers: neighbor, MT: true})
 	default:
 		return verror.Make(naming.ErrNoSuchName, ctx, ns.elems)
 	}
diff --git a/services/mounttable/lib/neighborhood_test.go b/services/mounttable/lib/neighborhood_test.go
index f4d47c6..058b60a 100644
--- a/services/mounttable/lib/neighborhood_test.go
+++ b/services/mounttable/lib/neighborhood_test.go
@@ -9,7 +9,6 @@
 
 	"veyron.io/veyron/veyron2/naming"
 	"veyron.io/veyron/veyron2/options"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 	"veyron.io/veyron/veyron2/vlog"
 
 	"veyron.io/veyron/veyron/lib/testutil"
@@ -87,7 +86,7 @@
 	if cerr != nil {
 		boom(t, "ResolveStepX.StartCall: %s", cerr)
 	}
-	var entry types.MountEntry
+	var entry naming.VDLMountEntry
 	if cerr = call.Finish(&entry, &err); cerr != nil {
 		boom(t, "ResolveStepX: %s", cerr)
 	}
diff --git a/services/mounttable/lib/serverlist.go b/services/mounttable/lib/serverlist.go
index cde1ea6..45bf6d7 100644
--- a/services/mounttable/lib/serverlist.go
+++ b/services/mounttable/lib/serverlist.go
@@ -5,7 +5,7 @@
 	"sync"
 	"time"
 
-	"veyron.io/veyron/veyron2/services/mounttable/types"
+	"veyron.io/veyron/veyron2/naming"
 )
 
 type serverListClock interface {
@@ -110,15 +110,15 @@
 }
 
 // copyToSlice returns the contents of the list as a slice of MountedServer.
-func (sl *serverList) copyToSlice() []types.MountedServer {
+func (sl *serverList) copyToSlice() []naming.VDLMountedServer {
 	sl.Lock()
 	defer sl.Unlock()
-	var slice []types.MountedServer
+	var slice []naming.VDLMountedServer
 	now := slc.now()
 	for e := sl.l.Front(); e != nil; e = e.Next() {
 		s := e.Value.(*server)
 		ttl := uint32(s.expires.Sub(now).Seconds())
-		ms := types.MountedServer{Server: s.oa, TTL: ttl}
+		ms := naming.VDLMountedServer{Server: s.oa, TTL: ttl}
 		slice = append(slice, ms)
 	}
 	return slice
diff --git a/tools/mgmt/nodex/impl.go b/tools/mgmt/nodex/impl.go
index c540f68..e0de5f1 100644
--- a/tools/mgmt/nodex/impl.go
+++ b/tools/mgmt/nodex/impl.go
@@ -108,7 +108,6 @@
 The nodex tool facilitates interaction with the veyron node manager.
 `,
 
-
- 		Children: []*cmdline.Command{cmdInstall, cmdStart, associateRoot(), cmdClaim},
+		Children: []*cmdline.Command{cmdInstall, cmdStart, associateRoot(), cmdClaim},
 	}
 }
diff --git a/tools/mounttable/impl.go b/tools/mounttable/impl.go
index 8778b54..99bd958 100644
--- a/tools/mounttable/impl.go
+++ b/tools/mounttable/impl.go
@@ -11,7 +11,6 @@
 	"veyron.io/veyron/veyron2/options"
 	"veyron.io/veyron/veyron2/rt"
 	"veyron.io/veyron/veyron2/services/mounttable"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 )
 
 func bindMT(ctx context.T, name string) (mounttable.MountTableClientMethods, error) {
@@ -100,7 +99,7 @@
 	if got < 2 || got > 4 {
 		return cmd.UsageErrorf("mount: incorrect number of arguments, expected 2, 3, or 4, got %d", got)
 	}
-	var flags types.MountFlag
+	var flags naming.MountFlag
 	var seconds uint32
 	if got >= 3 {
 		ttl, err := time.ParseDuration(args[2])
@@ -113,9 +112,9 @@
 		for _, c := range args[3] {
 			switch c {
 			case 'M':
-				flags |= types.MountFlag(types.MT)
+				flags |= naming.MountFlag(naming.MT)
 			case 'R':
-				flags |= types.MountFlag(types.Replace)
+				flags |= naming.MountFlag(naming.Replace)
 			}
 		}
 	}
@@ -184,7 +183,7 @@
 	if err != nil {
 		return err
 	}
-	var entry types.MountEntry
+	var entry naming.VDLMountEntry
 	if ierr := call.Finish(&entry, &err); ierr != nil {
 		return ierr
 	}
diff --git a/tools/mounttable/impl_test.go b/tools/mounttable/impl_test.go
index bf0a94f..0a40376 100644
--- a/tools/mounttable/impl_test.go
+++ b/tools/mounttable/impl_test.go
@@ -11,7 +11,6 @@
 	"veyron.io/veyron/veyron2/rt"
 	"veyron.io/veyron/veyron2/security"
 	"veyron.io/veyron/veyron2/services/mounttable"
-	"veyron.io/veyron/veyron2/services/mounttable/types"
 	"veyron.io/veyron/veyron2/vlog"
 
 	"veyron.io/veyron/veyron/profiles"
@@ -24,12 +23,12 @@
 func (s *server) Glob(ctx mounttable.GlobbableGlobContext, pattern string) error {
 	vlog.VI(2).Infof("Glob() was called. suffix=%v pattern=%q", s.suffix, pattern)
 	sender := ctx.SendStream()
-	sender.Send(types.MountEntry{"name1", []types.MountedServer{{"server1", 123}}, false})
-	sender.Send(types.MountEntry{"name2", []types.MountedServer{{"server2", 456}, {"server3", 789}}, false})
+	sender.Send(naming.VDLMountEntry{"name1", []naming.VDLMountedServer{{"server1", 123}}, false})
+	sender.Send(naming.VDLMountEntry{"name2", []naming.VDLMountedServer{{"server2", 456}, {"server3", 789}}, false})
 	return nil
 }
 
-func (s *server) Mount(_ ipc.ServerContext, server string, ttl uint32, flags types.MountFlag) error {
+func (s *server) Mount(_ ipc.ServerContext, server string, ttl uint32, flags naming.MountFlag) error {
 	vlog.VI(2).Infof("Mount() was called. suffix=%v server=%q ttl=%d", s.suffix, server, ttl)
 	return nil
 }
@@ -39,16 +38,16 @@
 	return nil
 }
 
-func (s *server) ResolveStep(ipc.ServerContext) (servers []types.MountedServer, suffix string, err error) {
+func (s *server) ResolveStep(ipc.ServerContext) (servers []naming.VDLMountedServer, suffix string, err error) {
 	vlog.VI(2).Infof("ResolveStep() was called. suffix=%v", s.suffix)
-	servers = []types.MountedServer{{"server1", 123}}
+	servers = []naming.VDLMountedServer{{"server1", 123}}
 	suffix = s.suffix
 	return
 }
 
-func (s *server) ResolveStepX(ipc.ServerContext) (entry types.MountEntry, err error) {
+func (s *server) ResolveStepX(ipc.ServerContext) (entry naming.VDLMountEntry, err error) {
 	vlog.VI(2).Infof("ResolveStepX() was called. suffix=%v", s.suffix)
-	entry.Servers = []types.MountedServer{{"server1", 123}}
+	entry.Servers = []naming.VDLMountedServer{{"server1", 123}}
 	entry.Name = s.suffix
 	return
 }
diff --git a/tools/vrpc/impl.go b/tools/vrpc/impl.go
index 1658ce3..8891515 100644
--- a/tools/vrpc/impl.go
+++ b/tools/vrpc/impl.go
@@ -12,6 +12,7 @@
 	"veyron.io/veyron/veyron2"
 	"veyron.io/veyron/veyron2/context"
 	"veyron.io/veyron/veyron2/ipc"
+	"veyron.io/veyron/veyron2/naming"
 	"veyron.io/veyron/veyron2/rt"
 	"veyron.io/veyron/veyron2/vdl/vdlutil"
 	"veyron.io/veyron/veyron2/vom"
@@ -19,7 +20,6 @@
 
 	idl_binary "veyron.io/veyron/veyron2/services/mgmt/binary"
 	idl_node "veyron.io/veyron/veyron2/services/mgmt/node"
-	idl_mounttable_types "veyron.io/veyron/veyron2/services/mounttable/types"
 )
 
 const serverDesc = `
@@ -131,9 +131,9 @@
 	vom.Register(x2)
 	var x3 idl_binary.Description
 	vom.Register(x3)
-	var x4 idl_mounttable_types.MountedServer
+	var x4 naming.VDLMountedServer
 	vom.Register(x4)
-	var x5 idl_mounttable_types.MountEntry
+	var x5 naming.VDLMountEntry
 	vom.Register(x5)
 
 	// Decode the inputs from vomJSON-formatted command-line arguments.
