ref: Convert uses of the xrpc library to the new v23 server API.

Change-Id: I1c269d6b522cdc8436d28daea16212d15eb4e862
diff --git a/cmd/mounttable/impl_test.go b/cmd/mounttable/impl_test.go
index fad262e..8786897 100644
--- a/cmd/mounttable/impl_test.go
+++ b/cmd/mounttable/impl_test.go
@@ -11,8 +11,6 @@
 	"testing"
 	"time"
 
-	"v.io/x/lib/cmdline"
-
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/glob"
@@ -22,9 +20,8 @@
 	"v.io/v23/security/access"
 	"v.io/v23/services/mounttable"
 	vdltime "v.io/v23/vdlroot/time"
-
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/test"
 )
@@ -109,7 +106,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
-	server, err := xrpc.NewDispatchingServer(ctx, "", new(dispatcher))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", new(dispatcher))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/cmd/principal/main.go b/cmd/principal/main.go
index e1eaadf..cee3a35 100644
--- a/cmd/principal/main.go
+++ b/cmd/principal/main.go
@@ -31,7 +31,6 @@
 	"v.io/x/ref"
 	vsecurity "v.io/x/ref/lib/security"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/static"
 )
 
@@ -769,7 +768,7 @@
 				token:     base64.URLEncoding.EncodeToString(token[:]),
 				notify:    make(chan error),
 			}
-			server, err := xrpc.NewServer(ctx, "", service, security.AllowEveryone())
+			ctx, server, err := v23.WithNewServer(ctx, "", service, security.AllowEveryone())
 			if err != nil {
 				return fmt.Errorf("failed to create server to listen for blessings: %v", err)
 			}
diff --git a/cmd/servicerunner/main.go b/cmd/servicerunner/main.go
index 76e12e8..a761f1a 100644
--- a/cmd/servicerunner/main.go
+++ b/cmd/servicerunner/main.go
@@ -29,7 +29,6 @@
 	"v.io/x/lib/set"
 	"v.io/x/ref"
 	"v.io/x/ref/lib/signals"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/services/identity/identitylib"
 	"v.io/x/ref/services/mounttable/mounttablelib"
@@ -73,7 +72,7 @@
 	if err != nil {
 		return fmt.Errorf("mounttablelib.NewMountTableDispatcher failed: %s", err)
 	}
-	server, err := xrpc.NewDispatchingServer(ctx, "", mt, options.ServesMountTable(true))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", mt, options.ServesMountTable(true))
 	if err != nil {
 		return fmt.Errorf("root failed: %v", err)
 	}
diff --git a/cmd/vdl/arith_test.go b/cmd/vdl/arith_test.go
index 8cb78b7..ae84453 100644
--- a/cmd/vdl/arith_test.go
+++ b/cmd/vdl/arith_test.go
@@ -15,12 +15,12 @@
 	"reflect"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/rpc"
 	"v.io/v23/vdl"
 	"v.io/x/ref/lib/vdl/testdata/arith"
 	"v.io/x/ref/lib/vdl/testdata/base"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 
 	_ "v.io/x/ref/runtime/factories/generic"
@@ -103,7 +103,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
-	server, err := xrpc.NewServer(ctx, "", arith.CalculatorServer(&serverCalculator{}), nil)
+	ctx, server, err := v23.WithNewServer(ctx, "", arith.CalculatorServer(&serverCalculator{}), nil)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -287,7 +287,7 @@
 	}
 
 	for i, obj := range objects {
-		server, err := xrpc.NewServer(ctx, "", obj, nil)
+		ctx, server, err := v23.WithNewServer(ctx, "", obj, nil)
 		if err != nil {
 			t.Fatalf("%d: %v", i, err)
 		}
diff --git a/cmd/vrpc/vrpc_test.go b/cmd/vrpc/vrpc_test.go
index d4ffcac..60fa5aa 100644
--- a/cmd/vrpc/vrpc_test.go
+++ b/cmd/vrpc/vrpc_test.go
@@ -17,7 +17,6 @@
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/cmd/vrpc/internal"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/test"
 )
@@ -120,7 +119,7 @@
 func initTest(t *testing.T) (ctx *context.T, name string, shutdown v23.Shutdown) {
 	ctx, shutdown = test.V23Init()
 	obj := internal.TypeTesterServer(&server{})
-	server, err := xrpc.NewServer(ctx, "", obj, nil)
+	ctx, server, err := v23.WithNewServer(ctx, "", obj, nil)
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 		return
diff --git a/examples/fortune/fortuned/impl_test.go b/examples/fortune/fortuned/impl_test.go
index 248bb03..0c6048d 100644
--- a/examples/fortune/fortuned/impl_test.go
+++ b/examples/fortune/fortuned/impl_test.go
@@ -11,7 +11,6 @@
 	"v.io/v23/context"
 	"v.io/v23/security"
 	"v.io/x/ref/examples/fortune"
-	"v.io/x/ref/lib/xrpc"
 )
 
 func TestGet(t *testing.T) {
@@ -56,7 +55,7 @@
 	service := fortune.FortuneServer(impl)
 	name := ""
 
-	server, err := xrpc.NewServer(ctx, name, service, authorizer)
+	ctx, server, err := v23.WithNewServer(ctx, name, service, authorizer)
 	if err != nil {
 		t.Errorf("Failure creating server: %v", err)
 	}
diff --git a/examples/fortune/fortuned/main.go b/examples/fortune/fortuned/main.go
index deb214e..fc21e49 100644
--- a/examples/fortune/fortuned/main.go
+++ b/examples/fortune/fortuned/main.go
@@ -13,7 +13,7 @@
 	"v.io/v23/security"
 	"v.io/x/ref/examples/fortune"
 	"v.io/x/ref/lib/signals"
-	"v.io/x/ref/lib/xrpc"
+
 	// The v23.Init call below will use the generic runtime factory.
 	_ "v.io/x/ref/runtime/factories/generic"
 )
@@ -30,7 +30,7 @@
 	impl := newImpl()
 	service := fortune.FortuneServer(impl)
 
-	server, err := xrpc.NewServer(ctx, *name, service, authorizer)
+	ctx, server, err := v23.WithNewServer(ctx, *name, service, authorizer)
 	if err != nil {
 		log.Panic("Failure creating server: ", err)
 	}
diff --git a/examples/rps/rpsbot/impl_test.go b/examples/rps/rpsbot/impl_test.go
index 2e93780..a43e95b 100644
--- a/examples/rps/rpsbot/impl_test.go
+++ b/examples/rps/rpsbot/impl_test.go
@@ -21,7 +21,6 @@
 	"v.io/v23/context"
 	"v.io/v23/options"
 	"v.io/x/ref/examples/rps"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/modules"
@@ -37,7 +36,7 @@
 	if err != nil {
 		return fmt.Errorf("mounttablelib.NewMountTableDispatcher failed: %s", err)
 	}
-	server, err := xrpc.NewDispatchingServer(ctx, "", mt, options.ServesMountTable(true))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", mt, options.ServesMountTable(true))
 	if err != nil {
 		return fmt.Errorf("root failed: %v", err)
 	}
@@ -54,7 +53,7 @@
 	ns.SetRoots(mtAddress)
 	rpsService := NewRPS(ctx)
 	names := []string{"rps/judge/test", "rps/player/test", "rps/scorekeeper/test"}
-	server, err := xrpc.NewServer(ctx, names[0], rps.RockPaperScissorsServer(rpsService), nil)
+	ctx, server, err := v23.WithNewServer(ctx, names[0], rps.RockPaperScissorsServer(rpsService), nil)
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/examples/rps/rpsbot/main.go b/examples/rps/rpsbot/main.go
index 86bcef5..547f0bc 100644
--- a/examples/rps/rpsbot/main.go
+++ b/examples/rps/rpsbot/main.go
@@ -16,11 +16,11 @@
 
 	"v.io/v23/context"
 
+	"v.io/v23"
 	"v.io/x/ref/examples/rps"
 	"v.io/x/ref/examples/rps/internal"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 
 	_ "v.io/x/ref/runtime/factories/roaming"
 )
@@ -61,7 +61,7 @@
 		fmt.Sprintf("rps/player/%s", name),
 		fmt.Sprintf("rps/scorekeeper/%s", name),
 	}
-	server, err := xrpc.NewServer(ctx, names[0], rps.RockPaperScissorsServer(rpsService), auth)
+	ctx, server, err := v23.WithNewServer(ctx, names[0], rps.RockPaperScissorsServer(rpsService), auth)
 	if err != nil {
 		return fmt.Errorf("NewServer failed: %v", err)
 	}
diff --git a/examples/rps/rpsplayer/main.go b/examples/rps/rpsplayer/main.go
index ad57b4f..eaf033d 100644
--- a/examples/rps/rpsplayer/main.go
+++ b/examples/rps/rpsplayer/main.go
@@ -15,21 +15,17 @@
 	"sync"
 	"time"
 
-	"v.io/x/lib/cmdline"
-
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vtrace"
-
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/examples/rps"
 	"v.io/x/ref/examples/rps/internal"
 	"v.io/x/ref/internal/logger"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
-
 	_ "v.io/x/ref/runtime/factories/roaming"
 )
 
@@ -132,7 +128,7 @@
 	fullname := fmt.Sprintf("rps/player/%s", name)
 	service := rps.PlayerServer(&impl{ch: ch})
 	auth := internal.NewAuthorizer(aclFile)
-	server, err := xrpc.NewServer(ctx, fullname, service, auth)
+	ctx, server, err := v23.WithNewServer(ctx, fullname, service, auth)
 	if err != nil {
 		ctx.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/examples/rps/rpsscorekeeper/main.go b/examples/rps/rpsscorekeeper/main.go
index 6c8fd39..1a03bad 100644
--- a/examples/rps/rpsscorekeeper/main.go
+++ b/examples/rps/rpsscorekeeper/main.go
@@ -17,10 +17,10 @@
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 
+	"v.io/v23"
 	"v.io/x/ref/examples/rps"
 	"v.io/x/ref/examples/rps/internal"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 
 	_ "v.io/x/ref/runtime/factories/roaming"
 )
@@ -65,7 +65,7 @@
 	name := fmt.Sprintf("rps/scorekeeper/%s", hostname)
 	service := rps.ScoreKeeperServer(rpsService)
 	authorizer := internal.NewAuthorizer(aclFile)
-	server, err := xrpc.NewServer(ctx, name, service, authorizer)
+	ctx, server, err := v23.WithNewServer(ctx, name, service, authorizer)
 	if err != nil {
 		return fmt.Errorf("NewServer failed: %v", err)
 	}
diff --git a/examples/tunnel/tunneld/main.go b/examples/tunnel/tunneld/main.go
index 5291e67..c33de73 100644
--- a/examples/tunnel/tunneld/main.go
+++ b/examples/tunnel/tunneld/main.go
@@ -14,11 +14,11 @@
 
 	"v.io/v23/context"
 
+	"v.io/v23"
 	"v.io/x/ref/examples/tunnel"
 	"v.io/x/ref/lib/security/securityflag"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 
 	_ "v.io/x/ref/runtime/factories/roaming"
 )
@@ -42,7 +42,7 @@
 
 func runTunnelD(ctx *context.T, env *cmdline.Env, args []string) error {
 	auth := securityflag.NewAuthorizerOrDie()
-	server, err := xrpc.NewServer(ctx, name, tunnel.TunnelServer(&T{}), auth)
+	ctx, server, err := v23.WithNewServer(ctx, name, tunnel.TunnelServer(&T{}), auth)
 	if err != nil {
 		return fmt.Errorf("NewServer failed: %v", err)
 	}
diff --git a/lib/security/prepare_discharges_test.go b/lib/security/prepare_discharges_test.go
index 292c58e..b7059e2 100644
--- a/lib/security/prepare_discharges_test.go
+++ b/lib/security/prepare_discharges_test.go
@@ -14,7 +14,6 @@
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	securitylib "v.io/x/ref/lib/security"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
@@ -91,7 +90,7 @@
 	tpid := tpcav.ThirdPartyDetails().ID()
 
 	v23.GetPrincipal(dctx)
-	_, err = xrpc.NewServer(dctx,
+	dctx, _, err = v23.WithNewServer(dctx,
 		"discharger",
 		&expiryDischarger{},
 		security.AllowEveryone())
diff --git a/lib/signals/signals_test.go b/lib/signals/signals_test.go
index 46bbefb..ae779e6 100644
--- a/lib/signals/signals_test.go
+++ b/lib/signals/signals_test.go
@@ -21,7 +21,6 @@
 	"v.io/v23/vtrace"
 	"v.io/x/ref/lib/mgmt"
 	"v.io/x/ref/lib/security/securityflag"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/device"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/modules"
@@ -349,7 +348,7 @@
 	defer sh.Cleanup(os.Stderr, os.Stderr)
 
 	ch := make(chan string)
-	server, err := xrpc.NewServer(ctx, "", device.ConfigServer(&configServer{ch}), securityflag.NewAuthorizerOrDie())
+	ctx, server, err := v23.WithNewServer(ctx, "", device.ConfigServer(&configServer{ch}), securityflag.NewAuthorizerOrDie())
 	if err != nil {
 		t.Fatalf("Got error: %v", err)
 	}
diff --git a/lib/xrpc/xserver_test.go b/lib/xrpc/xserver_test.go
index 95b5e4b..b799fb4 100644
--- a/lib/xrpc/xserver_test.go
+++ b/lib/xrpc/xserver_test.go
@@ -11,7 +11,6 @@
 	"v.io/v23/context"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/test"
 )
@@ -30,7 +29,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
-	server, err := xrpc.NewServer(ctx, "", &service{}, nil)
+	ctx, server, err := v23.WithNewServer(ctx, "", &service{}, nil)
 	if err != nil {
 		t.Fatalf("Error creating server: %v", err)
 	}
@@ -55,7 +54,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
-	server, err := xrpc.NewDispatchingServer(ctx, "", &dispatcher{})
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", &dispatcher{})
 	if err != nil {
 		t.Fatalf("Error creating server: %v", err)
 	}
diff --git a/runtime/factories/roaming/roaming_server.go b/runtime/factories/roaming/roaming_server.go
index c87d37a..b8e5170 100644
--- a/runtime/factories/roaming/roaming_server.go
+++ b/runtime/factories/roaming/roaming_server.go
@@ -11,7 +11,6 @@
 
 	"v.io/v23"
 	"v.io/v23/rpc"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/roaming"
 )
 
@@ -19,7 +18,7 @@
 	ctx, shutdown := v23.Init()
 	defer shutdown()
 
-	server, err := xrpc.NewServer(ctx, "roamer", &dummy{}, nil)
+	ctx, server, err := v23.WithNewServer(ctx, "roamer", &dummy{}, nil)
 	if err != nil {
 		ctx.Fatalf("unexpected error: %q", err)
 	}
diff --git a/runtime/internal/naming/namespace/all_test.go b/runtime/internal/naming/namespace/all_test.go
index 04febd1..3934b14 100644
--- a/runtime/internal/naming/namespace/all_test.go
+++ b/runtime/internal/naming/namespace/all_test.go
@@ -21,8 +21,6 @@
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
-
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	inamespace "v.io/x/ref/runtime/internal/naming/namespace"
 	"v.io/x/ref/services/mounttable/mounttablelib"
@@ -222,7 +220,7 @@
 }
 
 func run(t *testing.T, ctx *context.T, disp rpc.Dispatcher, mountPoint string, mt bool) *serverEntry {
-	s, err := xrpc.NewDispatchingServer(ctx, mountPoint, disp, options.ServesMountTable(mt))
+	ctx, s, err := v23.WithNewDispatchingServer(ctx, mountPoint, disp, options.ServesMountTable(mt))
 	if err != nil {
 		boom(t, "r.NewServer: %s", err)
 	}
@@ -775,9 +773,9 @@
 	ns := v23.GetNamespace(ctx)
 	ns.SetRoots(root.name)
 
-	server, err := xrpc.NewServer(ctx, "leaf", &leafObject{}, nil)
+	ctx, server, err := v23.WithNewServer(ctx, "leaf", &leafObject{}, nil)
 	if err != nil {
-		boom(t, "xrpc.NewServer: %s", err)
+		boom(t, "v23.WithNewServer: %s", err)
 	}
 	defer server.Stop()
 
diff --git a/runtime/internal/naming/namespace/perms_test.go b/runtime/internal/naming/namespace/perms_test.go
index bf2dba4..5e49e3e 100644
--- a/runtime/internal/naming/namespace/perms_test.go
+++ b/runtime/internal/naming/namespace/perms_test.go
@@ -15,8 +15,6 @@
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/security/access"
-
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test"
@@ -236,8 +234,8 @@
 	if err := ns.SetPermissions(rootCtx, name, closedPerms, version); err != nil {
 		t.Fatalf("SetPermissions %s: %s", name, err)
 	}
-	if _, err := xrpc.NewServer(rootCtx, name, &nopServer{1}, nil); err != nil {
-		t.Fatalf("v23.NewServer failed: %v", err)
+	if rootCtx, _, err = v23.WithNewServer(rootCtx, name, &nopServer{1}, nil); err != nil {
+		t.Fatalf("v23.WithNewServer failed: %v", err)
 	}
 	// Alice shouldn't be able to resolve it.
 	_, err = v23.GetNamespace(aliceCtx).Resolve(aliceCtx, name)
diff --git a/runtime/internal/rpc/benchmark/benchmark_test.go b/runtime/internal/rpc/benchmark/benchmark_test.go
index 22f63b9..3107ce6 100644
--- a/runtime/internal/rpc/benchmark/benchmark_test.go
+++ b/runtime/internal/rpc/benchmark/benchmark_test.go
@@ -11,7 +11,6 @@
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/x/ref/lib/security/securityflag"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/static"
 	"v.io/x/ref/runtime/internal/rpc/benchmark/internal"
 	"v.io/x/ref/test"
@@ -113,7 +112,7 @@
 	var shutdown v23.Shutdown
 	ctx, shutdown = test.V23Init()
 
-	server, err := xrpc.NewServer(ctx, "", internal.NewService(), securityflag.NewAuthorizerOrDie())
+	ctx, server, err := v23.WithNewServer(ctx, "", internal.NewService(), securityflag.NewAuthorizerOrDie())
 	if err != nil {
 		ctx.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/runtime/internal/rpc/benchmark/benchmarkd/main.go b/runtime/internal/rpc/benchmark/benchmarkd/main.go
index f20bb3c..69679af 100644
--- a/runtime/internal/rpc/benchmark/benchmarkd/main.go
+++ b/runtime/internal/rpc/benchmark/benchmarkd/main.go
@@ -12,10 +12,10 @@
 
 	"v.io/v23/context"
 
+	"v.io/v23"
 	"v.io/x/ref/lib/security/securityflag"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/roaming"
 	"v.io/x/ref/runtime/internal/rpc/benchmark/internal"
 )
@@ -33,7 +33,7 @@
 }
 
 func runBenchmarkD(ctx *context.T, env *cmdline.Env, args []string) error {
-	server, err := xrpc.NewServer(ctx, "", internal.NewService(), securityflag.NewAuthorizerOrDie())
+	ctx, server, err := v23.WithNewServer(ctx, "", internal.NewService(), securityflag.NewAuthorizerOrDie())
 	if err != nil {
 		ctx.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/runtime/internal/rpc/benchmark/simple/main.go b/runtime/internal/rpc/benchmark/simple/main.go
index 8173e82..7b624fc 100644
--- a/runtime/internal/rpc/benchmark/simple/main.go
+++ b/runtime/internal/rpc/benchmark/simple/main.go
@@ -14,10 +14,7 @@
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
-
 	"v.io/x/ref/lib/security/securityflag"
-	"v.io/x/ref/lib/xrpc"
-
 	_ "v.io/x/ref/runtime/factories/static"
 	"v.io/x/ref/runtime/internal/rpc/benchmark/internal"
 	"v.io/x/ref/runtime/internal/rpc/stream/manager"
@@ -126,7 +123,7 @@
 	ctx, shutdown = test.V23Init()
 	defer shutdown()
 
-	server, err := xrpc.NewServer(ctx, "", internal.NewService(), securityflag.NewAuthorizerOrDie())
+	ctx, server, err := v23.WithNewServer(ctx, "", internal.NewService(), securityflag.NewAuthorizerOrDie())
 	if err != nil {
 		ctx.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/runtime/internal/rpc/resolve_test.go b/runtime/internal/rpc/resolve_test.go
index da3649f..8f325c7 100644
--- a/runtime/internal/rpc/resolve_test.go
+++ b/runtime/internal/rpc/resolve_test.go
@@ -16,9 +16,7 @@
 	"v.io/v23/naming"
 	"v.io/v23/options"
 	"v.io/v23/rpc"
-
 	"v.io/x/ref/lib/flags"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/runtime/factories/fake"
 	"v.io/x/ref/runtime/internal"
 	"v.io/x/ref/runtime/internal/lib/appcycle"
@@ -76,7 +74,7 @@
 	if err != nil {
 		return fmt.Errorf("mounttablelib.NewMountTableDispatcher failed: %s", err)
 	}
-	server, err := xrpc.NewDispatchingServer(ctx, mp, mt, options.ServesMountTable(true))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, mp, mt, options.ServesMountTable(true))
 	if err != nil {
 		return fmt.Errorf("root failed: %v", err)
 	}
diff --git a/runtime/internal/rpc/stress/stressd/main.go b/runtime/internal/rpc/stress/stressd/main.go
index 1adbceb..e6c21fa 100644
--- a/runtime/internal/rpc/stress/stressd/main.go
+++ b/runtime/internal/rpc/stress/stressd/main.go
@@ -11,12 +11,12 @@
 	"runtime"
 	"time"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/security"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/static"
 	"v.io/x/ref/runtime/internal/rpc/stress/internal"
 )
@@ -40,7 +40,7 @@
 	runtime.GOMAXPROCS(runtime.NumCPU())
 
 	service, stop := internal.NewService()
-	server, err := xrpc.NewServer(ctx, "", service, security.AllowEveryone())
+	ctx, server, err := v23.WithNewServer(ctx, "", service, security.AllowEveryone())
 	if err != nil {
 		ctx.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/runtime/internal/rt/ipc_test.go b/runtime/internal/rt/ipc_test.go
index 23d320b..1c14c4e 100644
--- a/runtime/internal/rt/ipc_test.go
+++ b/runtime/internal/rt/ipc_test.go
@@ -18,7 +18,6 @@
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/runtime/internal/rpc/stream/vc"
 	"v.io/x/ref/test"
@@ -137,7 +136,7 @@
 			t.Errorf("pserver.SetDefault(%v) failed: %v", test.server, err)
 			continue
 		}
-		server, err := xrpc.NewServer(serverCtx, "", testService{}, security.AllowEveryone())
+		_, server, err := v23.WithNewServer(serverCtx, "", testService{}, security.AllowEveryone())
 		if err != nil {
 			t.Fatal(err)
 		}
@@ -186,7 +185,7 @@
 		t.Fatal(err)
 	}
 	for idx, test := range tests {
-		server, err := xrpc.NewServer(ctx, "", testService{}, nil, test.opts...)
+		_, server, err := v23.WithNewServer(ctx, "", testService{}, nil, test.opts...)
 		if err != nil {
 			t.Errorf("test #%d: %v", idx, err)
 			continue
@@ -258,7 +257,7 @@
 		t.Fatal(err)
 	}
 	ds := &dischargeService{}
-	server, err := xrpc.NewServer(dischargerCtx, "", ds, security.AllowEveryone())
+	dischargerCtx, server, err := v23.WithNewServer(dischargerCtx, "", ds, security.AllowEveryone())
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -267,7 +266,7 @@
 	if err := root.Bless(pserver, "server", mkThirdPartyCaveat(pdischarger.PublicKey(), dischargeServerName)); err != nil {
 		t.Fatal(err)
 	}
-	server, err = xrpc.NewServer(serverCtx, "", testService{}, security.AllowEveryone(), vc.DischargeExpiryBuffer(10*time.Millisecond))
+	serverCtx, server, err = v23.WithNewServer(serverCtx, "", testService{}, security.AllowEveryone(), vc.DischargeExpiryBuffer(10*time.Millisecond))
 	if err != nil {
 		t.Fatal(err)
 	}
diff --git a/runtime/internal/rt/mgmt_test.go b/runtime/internal/rt/mgmt_test.go
index ad1f650..0c48e4a 100644
--- a/runtime/internal/rt/mgmt_test.go
+++ b/runtime/internal/rt/mgmt_test.go
@@ -18,7 +18,6 @@
 	"v.io/v23/services/appcycle"
 	"v.io/x/ref/lib/mgmt"
 	"v.io/x/ref/lib/security/securityflag"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/device"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/expect"
@@ -278,7 +277,7 @@
 	ch := make(chan string)
 	service := device.ConfigServer(&configServer{ch})
 	authorizer := securityflag.NewAuthorizerOrDie()
-	configServer, err := xrpc.NewServer(ctx, "", service, authorizer)
+	ctx, configServer, err := v23.WithNewServer(ctx, "", service, authorizer)
 	if err != nil {
 		t.Fatalf("Got error: %v", err)
 	}
diff --git a/runtime/internal/rt/shutdown_servers_test.go b/runtime/internal/rt/shutdown_servers_test.go
index b6612e4..8133615 100644
--- a/runtime/internal/rt/shutdown_servers_test.go
+++ b/runtime/internal/rt/shutdown_servers_test.go
@@ -16,9 +16,7 @@
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/rpc"
-
 	"v.io/x/ref/lib/signals"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/modules"
@@ -68,11 +66,11 @@
 	defer remoteCmdLoop(ctx, env.Stdin)()
 
 	// Create a couple servers, and start serving.
-	server1, err := xrpc.NewServer(ctx, "", &dummy{}, nil)
+	ctx, server1, err := v23.WithNewServer(ctx, "", &dummy{}, nil)
 	if err != nil {
 		ctx.Fatalf("r.NewServer error: %s", err)
 	}
-	server2, err := xrpc.NewServer(ctx, "", &dummy{}, nil)
+	ctx, server2, err := v23.WithNewServer(ctx, "", &dummy{}, nil)
 	if err != nil {
 		ctx.Fatalf("r.NewServer error: %s", err)
 	}
@@ -220,7 +218,7 @@
 	defer remoteCmdLoop(ctx, env.Stdin)()
 
 	// Create a server, and start serving.
-	server, err := xrpc.NewServer(ctx, "", &dummy{}, nil)
+	ctx, server, err := v23.WithNewServer(ctx, "", &dummy{}, nil)
 	if err != nil {
 		ctx.Fatalf("r.NewServer error: %s", err)
 	}
diff --git a/runtime/internal/testing/mocks/mocknet/mocknet_test.go b/runtime/internal/testing/mocks/mocknet/mocknet_test.go
index f545b56..86afbcd 100644
--- a/runtime/internal/testing/mocks/mocknet/mocknet_test.go
+++ b/runtime/internal/testing/mocks/mocknet/mocknet_test.go
@@ -21,8 +21,6 @@
 	"v.io/v23/options"
 	"v.io/v23/rpc"
 	"v.io/v23/verror"
-
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/runtime/internal/rpc/stream/crypto"
 	"v.io/x/ref/runtime/internal/rpc/stream/message"
@@ -333,7 +331,7 @@
 }
 
 func initServer(t *testing.T, ctx *context.T) (string, func()) {
-	server, err := xrpc.NewServer(ctx, "", &simple{}, nil, options.SecurityNone)
+	ctx, server, err := v23.WithNewServer(ctx, "", &simple{}, nil, options.SecurityNone)
 	if err != nil {
 		t.Fatalf("unexpected error: %s", err)
 	}
diff --git a/runtime/internal/vtrace/vtrace_test.go b/runtime/internal/vtrace/vtrace_test.go
index 4bb4525..13921e4 100644
--- a/runtime/internal/vtrace/vtrace_test.go
+++ b/runtime/internal/vtrace/vtrace_test.go
@@ -19,10 +19,8 @@
 	"v.io/v23/security/access"
 	"v.io/v23/uniqueid"
 	"v.io/v23/vtrace"
-
 	"v.io/x/ref/lib/flags"
 	_ "v.io/x/ref/lib/security/securityflag"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	ivtrace "v.io/x/ref/runtime/internal/vtrace"
 	"v.io/x/ref/services/mounttable/mounttablelib"
@@ -47,7 +45,7 @@
 	if err != nil {
 		t.Fatalf("Could not create mt dispatcher %v", err)
 	}
-	s, err := xrpc.NewDispatchingServer(ctx, "", disp, options.ServesMountTable(true))
+	ctx, s, err := v23.WithNewDispatchingServer(ctx, "", disp, options.ServesMountTable(true))
 	if err != nil {
 		t.Fatalf("Could not create mt server %v", err)
 	}
@@ -176,7 +174,7 @@
 	c := &testServer{
 		name: name,
 	}
-	s, err := xrpc.NewServer(ctx, name, c, security.AllowEveryone())
+	ctx, s, err := v23.WithNewServer(ctx, name, c, security.AllowEveryone())
 	if err != nil {
 		return nil, err
 	}
diff --git a/services/agent/internal/pingpong/main.go b/services/agent/internal/pingpong/main.go
index 2c27383..d233602 100644
--- a/services/agent/internal/pingpong/main.go
+++ b/services/agent/internal/pingpong/main.go
@@ -10,6 +10,7 @@
 import (
 	"fmt"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
@@ -17,7 +18,6 @@
 	"v.io/x/ref/lib/flags"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 
 	_ "v.io/x/ref/runtime/factories/generic"
 )
@@ -67,7 +67,7 @@
 	// Use the default authorization policy (nil authorizer), which will
 	// only authorize clients if the blessings of the client is a prefix of
 	// that of the server or vice-versa.
-	s, err := xrpc.NewServer(ctx, "", PingPongServer(&pongd{}), nil)
+	ctx, s, err := v23.WithNewServer(ctx, "", PingPongServer(&pongd{}), nil)
 	if err != nil {
 		return fmt.Errorf("failure creating server: %v", err)
 	}
diff --git a/services/application/application/impl_test.go b/services/application/application/impl_test.go
index 2f02939..1a6b8bd 100644
--- a/services/application/application/impl_test.go
+++ b/services/application/application/impl_test.go
@@ -12,6 +12,7 @@
 	"strings"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
 	"v.io/v23/rpc"
@@ -20,7 +21,6 @@
 	"v.io/v23/services/application"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/services/repository"
 	"v.io/x/ref/test"
@@ -137,7 +137,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
-	server, err := xrpc.NewDispatchingServer(ctx, "", &dispatcher{})
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", &dispatcher{})
 	if err != nil {
 		t.Errorf("NewServer failed: %v", err)
 		return
diff --git a/services/application/applicationd/impl_test.go b/services/application/applicationd/impl_test.go
index 45b925e..e7a3be9 100644
--- a/services/application/applicationd/impl_test.go
+++ b/services/application/applicationd/impl_test.go
@@ -17,8 +17,6 @@
 	"v.io/v23/security"
 	"v.io/v23/services/application"
 	"v.io/v23/verror"
-
-	"v.io/x/ref/lib/xrpc"
 	appd "v.io/x/ref/services/application/applicationd"
 	"v.io/x/ref/services/repository"
 	"v.io/x/ref/test"
@@ -84,7 +82,7 @@
 		t.Fatalf("NewDispatcher() failed: %v", err)
 	}
 
-	server, err := xrpc.NewDispatchingServer(ctx, "", dispatcher)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", dispatcher)
 	if err != nil {
 		t.Fatalf("NewServer(%v) failed: %v", dispatcher, err)
 	}
@@ -293,7 +291,7 @@
 		t.Fatalf("NewDispatcher() failed: %v", err)
 	}
 
-	server, err := xrpc.NewDispatchingServer(ctx, "", dispatcher)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", dispatcher)
 	if err != nil {
 		t.Fatalf("Serve(%v) failed: %v", dispatcher, err)
 	}
@@ -330,7 +328,7 @@
 		t.Fatalf("NewDispatcher() failed: %v", err)
 	}
 
-	server, err = xrpc.NewDispatchingServer(ctx, "", dispatcher)
+	ctx, server, err = v23.WithNewDispatchingServer(ctx, "", dispatcher)
 	if err != nil {
 		t.Fatalf("NewServer(%v) failed: %v", dispatcher, err)
 	}
@@ -357,7 +355,7 @@
 		t.Fatalf("NewDispatcher() failed: %v", err)
 	}
 
-	server, err := xrpc.NewDispatchingServer(ctx, "", dispatcher)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", dispatcher)
 	if err != nil {
 		t.Fatalf("NewServer(%v) failed: %v", dispatcher, err)
 	}
diff --git a/services/application/applicationd/main.go b/services/application/applicationd/main.go
index e1b4e6d..0471c12 100644
--- a/services/application/applicationd/main.go
+++ b/services/application/applicationd/main.go
@@ -10,11 +10,11 @@
 import (
 	"fmt"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/roaming"
 )
 
@@ -48,7 +48,7 @@
 		return fmt.Errorf("NewDispatcher() failed: %v", err)
 	}
 
-	server, err := xrpc.NewDispatchingServer(ctx, name, dispatcher)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, name, dispatcher)
 	if err != nil {
 		return fmt.Errorf("NewServer() failed: %v", err)
 	}
diff --git a/services/application/applicationd/perms_test.go b/services/application/applicationd/perms_test.go
index f796367..c415b9e 100644
--- a/services/application/applicationd/perms_test.go
+++ b/services/application/applicationd/perms_test.go
@@ -17,7 +17,6 @@
 	"v.io/v23/services/application"
 	"v.io/v23/verror"
 	"v.io/x/ref/lib/signals"
-	"v.io/x/ref/lib/xrpc"
 	appd "v.io/x/ref/services/application/applicationd"
 	"v.io/x/ref/services/internal/servicetest"
 	"v.io/x/ref/services/repository"
@@ -45,7 +44,7 @@
 	if err != nil {
 		ctx.Fatalf("Failed to create repository dispatcher: %v", err)
 	}
-	server, err := xrpc.NewDispatchingServer(ctx, publishName, dispatcher)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, publishName, dispatcher)
 	if err != nil {
 		ctx.Fatalf("NewDispatchingServer(%v) failed: %v", publishName, err)
 	}
diff --git a/services/binary/binary/impl_test.go b/services/binary/binary/impl_test.go
index 1036c8d..cce1553 100644
--- a/services/binary/binary/impl_test.go
+++ b/services/binary/binary/impl_test.go
@@ -15,6 +15,7 @@
 	"strings"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
 	"v.io/v23/rpc"
@@ -24,7 +25,6 @@
 	"v.io/v23/services/repository"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/test"
 )
@@ -104,7 +104,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
-	server, err := xrpc.NewDispatchingServer(ctx, "", NewDispatcher())
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", NewDispatcher())
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/binary/binaryd/main.go b/services/binary/binaryd/main.go
index d7fc5f1..8c5cae0 100644
--- a/services/binary/binaryd/main.go
+++ b/services/binary/binaryd/main.go
@@ -19,7 +19,6 @@
 	"v.io/x/lib/netstate"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/roaming"
 	"v.io/x/ref/services/internal/binarylib"
 )
@@ -98,7 +97,7 @@
 	if err != nil {
 		return fmt.Errorf("NewDispatcher() failed: %v\n", err)
 	}
-	server, err := xrpc.NewDispatchingServer(ctx, name, dis)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, name, dis)
 	if err != nil {
 		return fmt.Errorf("NewServer() failed: %v", err)
 	}
diff --git a/services/binary/tidy/impl_test.go b/services/binary/tidy/impl_test.go
index 8b05eab..bc88203 100644
--- a/services/binary/tidy/impl_test.go
+++ b/services/binary/tidy/impl_test.go
@@ -11,10 +11,10 @@
 	"strings"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/services/application"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/services/binary/tidy/appd"
 	"v.io/x/ref/services/binary/tidy/binaryd"
@@ -29,7 +29,7 @@
 	defer shutdown()
 
 	apptape := servicetest.NewTape()
-	appserver, err := xrpc.NewDispatchingServer(ctx, "", appd.NewDispatcher(t, apptape))
+	ctx, appserver, err := v23.WithNewDispatchingServer(ctx, "", appd.NewDispatcher(t, apptape))
 	if err != nil {
 		t.Fatalf("applicationd NewDispatchingServer failed: %v", err)
 	}
@@ -69,13 +69,13 @@
 	defer shutdown()
 
 	binarytape := servicetest.NewTape()
-	binserver, err := xrpc.NewDispatchingServer(ctx, "", binaryd.NewDispatcher(t, binarytape))
+	ctx, binserver, err := v23.WithNewDispatchingServer(ctx, "", binaryd.NewDispatcher(t, binarytape))
 	if err != nil {
 		t.Fatalf("binaryd NewDispatchingServer failed: %v", err)
 	}
 
 	apptape := servicetest.NewTape()
-	appserver, err := xrpc.NewDispatchingServer(ctx, "", appd.NewDispatcher(t, apptape))
+	ctx, appserver, err := v23.WithNewDispatchingServer(ctx, "", appd.NewDispatcher(t, apptape))
 	if err != nil {
 		t.Fatalf("applicationd NewDispatchingServer failed: %v", err)
 	}
diff --git a/services/build/build/impl_test.go b/services/build/build/impl_test.go
index 2c7ab70..54b96d1 100644
--- a/services/build/build/impl_test.go
+++ b/services/build/build/impl_test.go
@@ -9,6 +9,7 @@
 	"strings"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
 	"v.io/v23/rpc"
@@ -17,7 +18,6 @@
 	"v.io/v23/verror"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/test"
 )
@@ -47,7 +47,7 @@
 
 func startServer(ctx *context.T, t *testing.T) naming.Endpoint {
 	unpublished := ""
-	server, err := xrpc.NewServer(ctx, unpublished, build.BuilderServer(&mock{}), nil)
+	ctx, server, err := v23.WithNewServer(ctx, unpublished, build.BuilderServer(&mock{}), nil)
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/build/buildd/impl_test.go b/services/build/buildd/impl_test.go
index 147b165..5cf973d 100644
--- a/services/build/buildd/impl_test.go
+++ b/services/build/buildd/impl_test.go
@@ -15,7 +15,7 @@
 	"v.io/v23/context"
 	"v.io/v23/services/build"
 
-	"v.io/x/ref/lib/xrpc"
+	"v.io/v23"
 	"v.io/x/ref/test"
 )
 
@@ -68,7 +68,7 @@
 	gobin, goroot := findGoBinary(t, "go")
 	service := build.BuilderServer(NewBuilderService(gobin, goroot))
 	unpublished := ""
-	server, err := xrpc.NewServer(ctx, unpublished, service, nil)
+	ctx, server, err := v23.WithNewServer(ctx, unpublished, service, nil)
 	if err != nil {
 		t.Fatalf("NewServer() failed: %v", err)
 	}
diff --git a/services/build/buildd/main.go b/services/build/buildd/main.go
index cf5cc2d..d6bfd92 100644
--- a/services/build/buildd/main.go
+++ b/services/build/buildd/main.go
@@ -11,13 +11,13 @@
 	"fmt"
 	"os"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/services/build"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/security/securityflag"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/roaming"
 )
 
@@ -44,7 +44,7 @@
 }
 
 func runBuildD(ctx *context.T, env *cmdline.Env, args []string) error {
-	server, err := xrpc.NewServer(ctx, name, build.BuilderServer(NewBuilderService(gobin, goroot)), securityflag.NewAuthorizerOrDie())
+	ctx, server, err := v23.WithNewServer(ctx, name, build.BuilderServer(NewBuilderService(gobin, goroot)), securityflag.NewAuthorizerOrDie())
 	if err != nil {
 		return fmt.Errorf("NewServer() failed: %v", err)
 	}
diff --git a/services/debug/debuglib/dispatcher_test.go b/services/debug/debuglib/dispatcher_test.go
index 1dcd3b6..d24878f 100644
--- a/services/debug/debuglib/dispatcher_test.go
+++ b/services/debug/debuglib/dispatcher_test.go
@@ -26,7 +26,6 @@
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
 	libstats "v.io/x/ref/lib/stats"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
@@ -60,7 +59,7 @@
 	ctx = context.WithLogger(ctx, testLogger)
 
 	disp := NewDispatcher(nil)
-	server, err := xrpc.NewDispatchingServer(ctx, "", disp)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", disp)
 	if err != nil {
 		t.Fatalf("failed to start debug server: %v", err)
 	}
diff --git a/services/device/claimable/main.go b/services/device/claimable/main.go
index 1c92bbf..32bb892 100644
--- a/services/device/claimable/main.go
+++ b/services/device/claimable/main.go
@@ -20,7 +20,6 @@
 	"v.io/x/ref/lib/security/securityflag"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/roaming"
 	"v.io/x/ref/services/device/internal/claim"
 	"v.io/x/ref/services/identity"
@@ -42,7 +41,7 @@
 		return errors.New("device is already claimed")
 	}
 
-	server, err := xrpc.NewDispatchingServer(ctx, "", claimable)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", claimable)
 	if err != nil {
 		return err
 	}
diff --git a/services/device/device/acl_test.go b/services/device/device/acl_test.go
index 0deb899..6b19ba2 100644
--- a/services/device/device/acl_test.go
+++ b/services/device/device/acl_test.go
@@ -11,12 +11,12 @@
 	"strings"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/security"
 	"v.io/v23/security/access"
 	"v.io/v23/verror"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 
 	cmd_device "v.io/x/ref/services/device/device"
@@ -34,7 +34,7 @@
 	defer shutdown()
 
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
@@ -81,7 +81,7 @@
 	defer shutdown()
 
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/device/device/associate_test.go b/services/device/device/associate_test.go
index 099d424..25b0003 100644
--- a/services/device/device/associate_test.go
+++ b/services/device/device/associate_test.go
@@ -10,10 +10,10 @@
 	"strings"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/services/device"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 
 	cmd_device "v.io/x/ref/services/device/device"
@@ -25,7 +25,7 @@
 	defer shutdown()
 
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
@@ -78,7 +78,7 @@
 	defer shutdown()
 
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
@@ -129,7 +129,7 @@
 	defer shutdown()
 
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/device/device/claim_test.go b/services/device/device/claim_test.go
index 0ac45aa..d8ce330 100644
--- a/services/device/device/claim_test.go
+++ b/services/device/device/claim_test.go
@@ -16,7 +16,6 @@
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/security"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 
 	cmd_device "v.io/x/ref/services/device/device"
@@ -28,7 +27,7 @@
 	defer shutdown()
 
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/device/device/debug_test.go b/services/device/device/debug_test.go
index cc8f528..cd1d5d6 100644
--- a/services/device/device/debug_test.go
+++ b/services/device/device/debug_test.go
@@ -11,10 +11,10 @@
 	"strings"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/naming"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 
 	cmd_device "v.io/x/ref/services/device/device"
@@ -25,7 +25,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/device/device/glob_test.go b/services/device/device/glob_test.go
index 25ac821..4c3bb25 100644
--- a/services/device/device/glob_test.go
+++ b/services/device/device/glob_test.go
@@ -15,16 +15,14 @@
 	"testing"
 	"time"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
 	"v.io/v23/services/device"
-
 	"v.io/x/lib/cmdline"
-	"v.io/x/ref/lib/xrpc"
-	"v.io/x/ref/test"
-
 	cmd_device "v.io/x/ref/services/device/device"
 	"v.io/x/ref/services/internal/servicetest"
+	"v.io/x/ref/test"
 )
 
 func simplePrintHandler(entry cmd_device.GlobResult, _ *context.T, stdout, _ io.Writer) error {
@@ -158,7 +156,7 @@
 	defer shutdown()
 	tapes := servicetest.NewTapeMap()
 	rootTape := tapes.ForSuffix("")
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/device/device/install_test.go b/services/device/device/install_test.go
index 61e766d..941b935 100644
--- a/services/device/device/install_test.go
+++ b/services/device/device/install_test.go
@@ -12,12 +12,12 @@
 	"strings"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/naming"
 	"v.io/v23/services/application"
 	"v.io/v23/services/device"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 
 	cmd_device "v.io/x/ref/services/device/device"
@@ -29,7 +29,7 @@
 	defer shutdown()
 
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/device/device/instantiate_test.go b/services/device/device/instantiate_test.go
index 53ff9ac..3acfcae 100644
--- a/services/device/device/instantiate_test.go
+++ b/services/device/device/instantiate_test.go
@@ -11,10 +11,10 @@
 	"strings"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/verror"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 
 	cmd_device "v.io/x/ref/services/device/device"
@@ -26,7 +26,7 @@
 	defer shutdown()
 
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/device/device/kill_test.go b/services/device/device/kill_test.go
index 3b37881..0e5d38d 100644
--- a/services/device/device/kill_test.go
+++ b/services/device/device/kill_test.go
@@ -11,11 +11,11 @@
 	"testing"
 	"time"
 
+	"v.io/v23"
 	"v.io/v23/naming"
 	"v.io/v23/verror"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 
 	cmd_device "v.io/x/ref/services/device/device"
@@ -27,7 +27,7 @@
 	defer shutdown()
 
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/device/device/local_install.go b/services/device/device/local_install.go
index aba34b2..75fc476 100644
--- a/services/device/device/local_install.go
+++ b/services/device/device/local_install.go
@@ -25,10 +25,8 @@
 	"v.io/v23/services/device"
 	"v.io/v23/services/repository"
 	"v.io/v23/uniqueid"
-
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/internal/packages"
 )
 
@@ -93,7 +91,7 @@
 		spec.Addrs = nil
 		ctx = v23.WithListenSpec(ctx, spec)
 	}
-	server, err := xrpc.NewDispatchingServer(ctx, name, dispatcher)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, name, dispatcher)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/services/device/device/local_install_test.go b/services/device/device/local_install_test.go
index aa0d615..4fb3444 100644
--- a/services/device/device/local_install_test.go
+++ b/services/device/device/local_install_test.go
@@ -15,13 +15,13 @@
 	"strings"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/naming"
 	"v.io/v23/security"
 	"v.io/v23/services/application"
 	"v.io/v23/services/device"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 
 	cmd_device "v.io/x/ref/services/device/device"
@@ -39,7 +39,7 @@
 	defer shutdown()
 
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/device/device/ls_test.go b/services/device/device/ls_test.go
index 79974b1..5a74820 100644
--- a/services/device/device/ls_test.go
+++ b/services/device/device/ls_test.go
@@ -9,10 +9,10 @@
 	"strings"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/naming"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 
 	cmd_device "v.io/x/ref/services/device/device"
@@ -26,7 +26,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/device/device/status_test.go b/services/device/device/status_test.go
index 81a1410..29a56c3 100644
--- a/services/device/device/status_test.go
+++ b/services/device/device/status_test.go
@@ -11,11 +11,11 @@
 	"strings"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/naming"
 	"v.io/v23/services/device"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 
 	cmd_device "v.io/x/ref/services/device/device"
@@ -26,7 +26,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/device/device/update_test.go b/services/device/device/update_test.go
index 338c358..ca32285 100644
--- a/services/device/device/update_test.go
+++ b/services/device/device/update_test.go
@@ -16,10 +16,10 @@
 	"unicode"
 	"unicode/utf8"
 
+	"v.io/v23"
 	"v.io/v23/naming"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 
 	cmd_device "v.io/x/ref/services/device/device"
@@ -39,7 +39,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/device/device/util_test.go b/services/device/device/util_test.go
index 29c79eb..9ba5b3e 100644
--- a/services/device/device/util_test.go
+++ b/services/device/device/util_test.go
@@ -10,12 +10,12 @@
 	"strings"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/naming"
 	"v.io/v23/services/device"
 	"v.io/v23/verror"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 
 	cmd_device "v.io/x/ref/services/device/device"
@@ -64,7 +64,7 @@
 	defer shutdown()
 
 	tapes := servicetest.NewTapeMap()
-	server, err := xrpc.NewDispatchingServer(ctx, "", newDispatcher(t, tapes))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", newDispatcher(t, tapes))
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 	}
diff --git a/services/device/deviced/internal/impl/proxy_invoker_test.go b/services/device/deviced/internal/impl/proxy_invoker_test.go
index 9c46e21..225027e 100644
--- a/services/device/deviced/internal/impl/proxy_invoker_test.go
+++ b/services/device/deviced/internal/impl/proxy_invoker_test.go
@@ -8,13 +8,13 @@
 	"reflect"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/security/access"
 	libstats "v.io/v23/services/stats"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
 )
@@ -26,7 +26,7 @@
 	defer shutdown()
 
 	// server1 is a normal server
-	server1, err := xrpc.NewServer(ctx, "", &dummy{}, nil)
+	ctx, server1, err := v23.WithNewServer(ctx, "", &dummy{}, nil)
 	if err != nil {
 		t.Fatalf("NewServer: %v", err)
 	}
@@ -36,7 +36,7 @@
 		remote: naming.JoinAddressName(server1.Status().Endpoints[0].String(), "__debug/stats"),
 		desc:   libstats.StatsServer(nil).Describe__(),
 	}
-	server2, err := xrpc.NewDispatchingServer(ctx, "", disp)
+	ctx, server2, err := v23.WithNewDispatchingServer(ctx, "", disp)
 	if err != nil {
 		t.Fatalf("NewServer: %v", err)
 	}
diff --git a/services/device/deviced/internal/impl/utiltest/app.go b/services/device/deviced/internal/impl/utiltest/app.go
index 3d36f15..ab31297 100644
--- a/services/device/deviced/internal/impl/utiltest/app.go
+++ b/services/device/deviced/internal/impl/utiltest/app.go
@@ -23,7 +23,6 @@
 	"v.io/x/ref/lib/exec"
 	"v.io/x/ref/lib/mgmt"
 	"v.io/x/ref/lib/signals"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/device/internal/suid"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/modules"
@@ -133,7 +132,7 @@
 	}
 	publishName := args[0]
 
-	_, err := xrpc.NewServer(ctx, publishName, new(appService), nil)
+	ctx, _, err := v23.WithNewServer(ctx, publishName, new(appService), nil)
 	if err != nil {
 		ctx.Fatalf("NewServer(%v) failed: %v", publishName, err)
 	}
@@ -166,7 +165,7 @@
 // function.
 func SetupPingServer(t *testing.T, ctx *context.T) (PingServer, func()) {
 	pingCh := make(chan PingArgs, 1)
-	server, err := xrpc.NewServer(ctx, "pingserver", PingServer{pingCh}, security.AllowEveryone())
+	ctx, server, err := v23.WithNewServer(ctx, "pingserver", PingServer{pingCh}, security.AllowEveryone())
 	if err != nil {
 		t.Fatalf("NewServer(%q, <dispatcher>) failed: %v", "pingserver", err)
 	}
diff --git a/services/device/deviced/internal/impl/utiltest/helpers.go b/services/device/deviced/internal/impl/utiltest/helpers.go
index 3c1a163..b8e855e 100644
--- a/services/device/deviced/internal/impl/utiltest/helpers.go
+++ b/services/device/deviced/internal/impl/utiltest/helpers.go
@@ -32,7 +32,6 @@
 	"v.io/v23/services/stats"
 	"v.io/v23/verror"
 	"v.io/x/ref/internal/logger"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/roaming"
 	"v.io/x/ref/services/device/deviced/internal/impl"
 	"v.io/x/ref/services/device/deviced/internal/versioning"
@@ -763,7 +762,7 @@
 	if err != nil {
 		t.Fatalf("server.NewDispatcher failed: %v", err)
 	}
-	server, err := xrpc.NewDispatchingServer(ctx, von, d)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, von, d)
 	if err != nil {
 		t.Fatalf("server.ServeDispatcher failed: %v", err)
 	}
diff --git a/services/device/deviced/internal/impl/utiltest/mock_repo.go b/services/device/deviced/internal/impl/utiltest/mock_repo.go
index c096d6d..a25ecad 100644
--- a/services/device/deviced/internal/impl/utiltest/mock_repo.go
+++ b/services/device/deviced/internal/impl/utiltest/mock_repo.go
@@ -14,6 +14,7 @@
 	"reflect"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
@@ -22,7 +23,6 @@
 	"v.io/v23/services/binary"
 	"v.io/v23/services/repository"
 	"v.io/v23/verror"
-	"v.io/x/ref/lib/xrpc"
 )
 
 const MockBinaryRepoName = "br"
@@ -44,7 +44,7 @@
 func StartApplicationRepository(ctx *context.T) (*application.Envelope, func()) {
 	invoker := new(arInvoker)
 	name := MockApplicationRepoName
-	server, err := xrpc.NewServer(ctx, name, repository.ApplicationServer(invoker), security.AllowEveryone())
+	ctx, server, err := v23.WithNewServer(ctx, name, repository.ApplicationServer(invoker), security.AllowEveryone())
 	if err != nil {
 		ctx.Fatalf("NewServer(%v) failed: %v", name, err)
 	}
@@ -91,7 +91,7 @@
 // returns a cleanup function.
 func StartBinaryRepository(ctx *context.T) func() {
 	name := MockBinaryRepoName
-	server, err := xrpc.NewServer(ctx, name, repository.BinaryServer(new(brInvoker)), security.AllowEveryone())
+	ctx, server, err := v23.WithNewServer(ctx, name, repository.BinaryServer(new(brInvoker)), security.AllowEveryone())
 	if err != nil {
 		ctx.Fatalf("Serve(%q) failed: %v", name, err)
 	}
diff --git a/services/device/deviced/internal/starter/starter.go b/services/device/deviced/internal/starter/starter.go
index f6cdcbf..3ad0a74 100644
--- a/services/device/deviced/internal/starter/starter.go
+++ b/services/device/deviced/internal/starter/starter.go
@@ -21,7 +21,6 @@
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	displib "v.io/x/ref/lib/dispatcher"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/runtime/factories/roaming"
 	"v.io/x/ref/services/debug/debuglib"
 	"v.io/x/ref/services/device/deviced/internal/impl"
@@ -155,7 +154,7 @@
 		return "", nil, err
 	}
 	ctx = v23.WithListenSpec(ctx, args.Device.ListenSpec)
-	server, err := xrpc.NewDispatchingServer(ctx, "", dispatcher)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", dispatcher)
 	if err != nil {
 		cancel()
 		return "", nil, err
@@ -334,7 +333,7 @@
 func startDeviceServer(ctx *context.T, args DeviceArgs, mt string, permStore *pathperms.PathStore) (shutdown func(), err error) {
 	ctx = v23.WithListenSpec(ctx, args.ListenSpec)
 	wrapper := displib.NewDispatcherWrapper()
-	server, err := xrpc.NewDispatchingServer(ctx, args.name(mt), wrapper)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, args.name(mt), wrapper)
 	if err != nil {
 		return nil, err
 	}
diff --git a/services/groups/groups/main_test.go b/services/groups/groups/main_test.go
index 3243c76..77ee096 100644
--- a/services/groups/groups/main_test.go
+++ b/services/groups/groups/main_test.go
@@ -14,6 +14,7 @@
 	"unicode"
 	"unicode/utf8"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
 	"v.io/v23/rpc"
@@ -21,7 +22,6 @@
 	"v.io/v23/services/groups"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 )
 
@@ -84,7 +84,7 @@
 
 func startServer(ctx *context.T, t *testing.T) (rpc.Server, naming.Endpoint) {
 	unpublished := ""
-	s, err := xrpc.NewServer(ctx, unpublished, groups.GroupServer(&mock{}), nil)
+	ctx, s, err := v23.WithNewServer(ctx, unpublished, groups.GroupServer(&mock{}), nil)
 	if err != nil {
 		t.Fatalf("NewServer(%v) failed: %v", unpublished, err)
 	}
diff --git a/services/groups/groupsd/groupsd_v23_test.go b/services/groups/groupsd/groupsd_v23_test.go
index fb27e4c..9cf1ecd 100644
--- a/services/groups/groupsd/groupsd_v23_test.go
+++ b/services/groups/groupsd/groupsd_v23_test.go
@@ -22,7 +22,6 @@
 	"v.io/v23/services/groups"
 	"v.io/v23/verror"
 	"v.io/x/lib/set"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/groups/groupsd/testdata/kvstore"
 	"v.io/x/ref/test/modules"
 	"v.io/x/ref/test/v23tests"
@@ -174,7 +173,7 @@
 	if err != nil {
 		return err
 	}
-	if _, err := xrpc.NewServer(ctx, kvServerName, kvstore.StoreServer(&store{}), authorizer); err != nil {
+	if _, _, err := v23.WithNewServer(ctx, kvServerName, kvstore.StoreServer(&store{}), authorizer); err != nil {
 		return err
 	}
 	modules.WaitForEOF(env.Stdin)
diff --git a/services/groups/groupsd/main.go b/services/groups/groupsd/main.go
index c785272..683b5b2 100644
--- a/services/groups/groupsd/main.go
+++ b/services/groups/groupsd/main.go
@@ -22,7 +22,6 @@
 	"v.io/x/ref/lib/security/securityflag"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/roaming"
 	"v.io/x/ref/services/groups/internal/server"
 	"v.io/x/ref/services/groups/internal/store/gkv"
@@ -99,7 +98,7 @@
 	default:
 		return fmt.Errorf("unknown storage engine %v", flagEngine)
 	}
-	server, err := xrpc.NewDispatchingServer(ctx, flagName, dispatcher)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, flagName, dispatcher)
 	if err != nil {
 		return fmt.Errorf("NewDispatchingServer(%v) failed: %v", flagName, err)
 	}
diff --git a/services/groups/internal/server/server_test.go b/services/groups/internal/server/server_test.go
index d5b0e6e..d807c86 100644
--- a/services/groups/internal/server/server_test.go
+++ b/services/groups/internal/server/server_test.go
@@ -18,7 +18,6 @@
 	"v.io/v23/security/access"
 	"v.io/v23/services/groups"
 	"v.io/v23/verror"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/services/groups/internal/server"
 	"v.io/x/ref/services/groups/internal/store"
@@ -133,7 +132,7 @@
 
 	m := server.NewManager(st, perms)
 
-	server, err := xrpc.NewDispatchingServer(ctx, "", m)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", m)
 	if err != nil {
 		ctx.Fatal("NewDispatchingServer() failed: ", err)
 	}
diff --git a/services/identity/internal/revocation/revocation_test.go b/services/identity/internal/revocation/revocation_test.go
index 34ad488..de6f2dd 100644
--- a/services/identity/internal/revocation/revocation_test.go
+++ b/services/identity/internal/revocation/revocation_test.go
@@ -7,22 +7,20 @@
 import (
 	"testing"
 
-	"v.io/x/ref/lib/xrpc"
+	"v.io/v23"
+	"v.io/v23/context"
+	"v.io/v23/security"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/services/discharger"
 	"v.io/x/ref/services/identity/internal/dischargerlib"
 	"v.io/x/ref/test"
-
-	"v.io/v23"
-	"v.io/v23/context"
-	"v.io/v23/security"
 )
 
 //go:generate v23 test generate
 
 func revokerSetup(t *testing.T, ctx *context.T) (dischargerKey security.PublicKey, dischargerEndpoint string, revoker RevocationManager) {
 	dischargerServiceStub := discharger.DischargerServer(dischargerlib.NewDischarger())
-	dischargerServer, err := xrpc.NewServer(ctx, "", dischargerServiceStub, nil)
+	ctx, dischargerServer, err := v23.WithNewServer(ctx, "", dischargerServiceStub, nil)
 	if err != nil {
 		t.Fatalf("r.NewServer: %s", err)
 	}
diff --git a/services/identity/internal/server/identityd.go b/services/identity/internal/server/identityd.go
index bf1898c..a388aa4 100644
--- a/services/identity/internal/server/identityd.go
+++ b/services/identity/internal/server/identityd.go
@@ -26,7 +26,6 @@
 	"v.io/v23/verror"
 	"v.io/x/ref/lib/security/audit"
 	"v.io/x/ref/lib/signals"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/discharger"
 	"v.io/x/ref/services/identity/internal/auditor"
 	"v.io/x/ref/services/identity/internal/blesser"
@@ -213,7 +212,7 @@
 	disp := newDispatcher(macaroonKey, s.oauthBlesserParams)
 	principal := v23.GetPrincipal(ctx)
 	objectAddr := naming.Join(s.mountNamePrefix, fmt.Sprintf("%v", principal.BlessingStore().Default()))
-	server, err := xrpc.NewDispatchingServer(ctx, objectAddr, disp)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, objectAddr, disp)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/services/internal/binarylib/client_test.go b/services/internal/binarylib/client_test.go
index 7c83ca2..01c868d 100644
--- a/services/internal/binarylib/client_test.go
+++ b/services/internal/binarylib/client_test.go
@@ -17,8 +17,6 @@
 	"v.io/v23/context"
 	"v.io/v23/naming"
 	"v.io/v23/services/repository"
-
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
 )
@@ -49,7 +47,7 @@
 	if err != nil {
 		t.Fatalf("NewDispatcher() failed: %v\n", err)
 	}
-	server, err := xrpc.NewDispatchingServer(ctx, "", dispatcher)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", dispatcher)
 	if err != nil {
 		t.Fatalf("NewServer() failed: %v", err)
 	}
diff --git a/services/internal/binarylib/impl_test.go b/services/internal/binarylib/impl_test.go
index 1ffd9a6..a8ea515 100644
--- a/services/internal/binarylib/impl_test.go
+++ b/services/internal/binarylib/impl_test.go
@@ -19,7 +19,7 @@
 	"v.io/v23/services/repository"
 	"v.io/v23/verror"
 
-	"v.io/x/ref/lib/xrpc"
+	"v.io/v23"
 	_ "v.io/x/ref/runtime/factories/static"
 	"v.io/x/ref/services/internal/binarylib"
 	"v.io/x/ref/services/internal/servicetest"
@@ -57,7 +57,7 @@
 		t.Fatalf("NewDispatcher failed: %v", err)
 	}
 	dontPublishName := ""
-	server, err := xrpc.NewDispatchingServer(ctx, dontPublishName, dispatcher)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, dontPublishName, dispatcher)
 	if err != nil {
 		t.Fatalf("NewServer(%q) failed: %v", dontPublishName, err)
 	}
diff --git a/services/internal/binarylib/perms_test.go b/services/internal/binarylib/perms_test.go
index 0729b69..89b330e 100644
--- a/services/internal/binarylib/perms_test.go
+++ b/services/internal/binarylib/perms_test.go
@@ -18,7 +18,6 @@
 	"v.io/v23/services/repository"
 	"v.io/v23/verror"
 	"v.io/x/ref/lib/signals"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/internal/binarylib"
 	"v.io/x/ref/services/internal/servicetest"
 	"v.io/x/ref/test"
@@ -49,7 +48,7 @@
 	if err != nil {
 		ctx.Fatalf("Failed to create binaryd dispatcher: %v", err)
 	}
-	server, err := xrpc.NewDispatchingServer(ctx, publishName, dispatcher)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, publishName, dispatcher)
 	if err != nil {
 		ctx.Fatalf("NewDispatchingServer(%v) failed: %v", publishName, err)
 	}
diff --git a/services/internal/logreaderlib/logfile_test.go b/services/internal/logreaderlib/logfile_test.go
index aeda437..c046fdd 100644
--- a/services/internal/logreaderlib/logfile_test.go
+++ b/services/internal/logreaderlib/logfile_test.go
@@ -10,12 +10,12 @@
 	"path"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
 	"v.io/v23/security"
 	"v.io/v23/services/logreader"
 	"v.io/v23/verror"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/internal/logreaderlib"
 	"v.io/x/ref/test"
 
@@ -50,7 +50,7 @@
 		t.Fatalf("ioutil.TempDir: %v", err)
 	}
 	defer os.RemoveAll(workdir)
-	server, err := xrpc.NewDispatchingServer(ctx, "", &logFileDispatcher{workdir})
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", &logFileDispatcher{workdir})
 	if err != nil {
 		t.Fatalf("NewDispatchingServer failed: %v", err)
 	}
@@ -136,7 +136,7 @@
 		t.Fatalf("ioutil.TempDir: %v", err)
 	}
 	defer os.RemoveAll(workdir)
-	server, err := xrpc.NewDispatchingServer(ctx, "", &logFileDispatcher{workdir})
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", &logFileDispatcher{workdir})
 	if err != nil {
 		t.Fatalf("NewDispatchingServer failed: %v", err)
 	}
diff --git a/services/internal/pproflib/proxy_test.go b/services/internal/pproflib/proxy_test.go
index 079993a..b9b21b2 100644
--- a/services/internal/pproflib/proxy_test.go
+++ b/services/internal/pproflib/proxy_test.go
@@ -10,9 +10,9 @@
 	"net/http"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/security"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/services/internal/pproflib"
 	"v.io/x/ref/test"
@@ -32,7 +32,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
-	s, err := xrpc.NewDispatchingServer(ctx, "", &dispatcher{pproflib.NewPProfService()})
+	ctx, s, err := v23.WithNewDispatchingServer(ctx, "", &dispatcher{pproflib.NewPProfService()})
 	if err != nil {
 		t.Fatalf("failed to start server: %v", err)
 	}
diff --git a/services/internal/servicetest/modules.go b/services/internal/servicetest/modules.go
index 56b4264..ae44db1 100644
--- a/services/internal/servicetest/modules.go
+++ b/services/internal/servicetest/modules.go
@@ -18,7 +18,6 @@
 	"v.io/v23/security"
 	"v.io/x/ref"
 	"v.io/x/ref/internal/logger"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test/modules"
 	"v.io/x/ref/test/testutil"
@@ -40,7 +39,7 @@
 	if err != nil {
 		return fmt.Errorf("mounttablelib.NewMountTableDispatcher failed: %s", err)
 	}
-	server, err := xrpc.NewDispatchingServer(ctx, "", mt, options.ServesMountTable(true))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", mt, options.ServesMountTable(true))
 	if err != nil {
 		return fmt.Errorf("root failed: %v", err)
 	}
diff --git a/services/internal/statslib/stats_test.go b/services/internal/statslib/stats_test.go
index eccd497..0a35a64 100644
--- a/services/internal/statslib/stats_test.go
+++ b/services/internal/statslib/stats_test.go
@@ -17,9 +17,9 @@
 	"v.io/v23/services/watch"
 	"v.io/v23/vdl"
 
+	"v.io/v23"
 	libstats "v.io/x/ref/lib/stats"
 	"v.io/x/ref/lib/stats/histogram"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/internal/statslib"
 	s_stats "v.io/x/ref/services/stats"
 	"v.io/x/ref/test"
@@ -41,7 +41,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
-	server, err := xrpc.NewDispatchingServer(ctx, "", &statsDispatcher{})
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", &statsDispatcher{})
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 		return
diff --git a/services/internal/vtracelib/vtrace_test.go b/services/internal/vtracelib/vtrace_test.go
index 3848ad2..536abe6 100644
--- a/services/internal/vtracelib/vtrace_test.go
+++ b/services/internal/vtracelib/vtrace_test.go
@@ -8,9 +8,9 @@
 	"io"
 	"testing"
 
+	"v.io/v23"
 	s_vtrace "v.io/v23/services/vtrace"
 	"v.io/v23/vtrace"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/internal/vtracelib"
 	"v.io/x/ref/test"
 
@@ -23,7 +23,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
-	server, err := xrpc.NewServer(ctx, "", vtracelib.NewVtraceService(), nil)
+	ctx, server, err := v23.WithNewServer(ctx, "", vtracelib.NewVtraceService(), nil)
 	if err != nil {
 		t.Fatalf("Could not create server: %s", err)
 	}
diff --git a/services/mounttable/mounttablelib/mounttable_test.go b/services/mounttable/mounttablelib/mounttable_test.go
index ae52282..1e0cd23 100644
--- a/services/mounttable/mounttablelib/mounttable_test.go
+++ b/services/mounttable/mounttablelib/mounttable_test.go
@@ -27,9 +27,7 @@
 	"v.io/v23/services/mounttable"
 	"v.io/v23/services/stats"
 	"v.io/v23/vdl"
-
 	libstats "v.io/x/ref/lib/stats"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/debug/debuglib"
 	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test"
@@ -198,7 +196,7 @@
 	}
 
 	// Start serving on a loopback address.
-	server, err := xrpc.NewDispatchingServer(ctx, "", mt, options.ServesMountTable(true))
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", mt, options.ServesMountTable(true))
 	if err != nil {
 		boom(t, "r.NewServer: %s", err)
 	}
@@ -211,7 +209,7 @@
 func newCollection(t *testing.T, rootCtx *context.T) (func() error, string) {
 	// Start serving a collection service on a loopback address.  This
 	// is just a service we can mount and test against.
-	server, err := xrpc.NewDispatchingServer(rootCtx, "collection", newCollectionServer())
+	_, server, err := v23.WithNewDispatchingServer(rootCtx, "collection", newCollectionServer())
 	if err != nil {
 		boom(t, "r.NewServer: %s", err)
 	}
diff --git a/services/mounttable/mounttablelib/neighborhood_test.go b/services/mounttable/mounttablelib/neighborhood_test.go
index 8216c23..f4a64ed 100644
--- a/services/mounttable/mounttablelib/neighborhood_test.go
+++ b/services/mounttable/mounttablelib/neighborhood_test.go
@@ -14,8 +14,6 @@
 	"v.io/v23"
 	"v.io/v23/naming"
 	"v.io/v23/options"
-
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test"
@@ -56,7 +54,7 @@
 	defer nhd.(stopper).Stop()
 
 	// Start serving on a loopback address.
-	server, err := xrpc.NewDispatchingServer(rootCtx, "", nhd)
+	rootCtx, server, err := v23.WithNewDispatchingServer(rootCtx, "", nhd)
 	if err != nil {
 		boom(t, "Failed to create neighborhood: %s", err)
 	}
diff --git a/services/mounttable/mounttablelib/servers.go b/services/mounttable/mounttablelib/servers.go
index 2d919d1..b0f6eb0 100644
--- a/services/mounttable/mounttablelib/servers.go
+++ b/services/mounttable/mounttablelib/servers.go
@@ -12,7 +12,6 @@
 	"v.io/v23/naming"
 	"v.io/v23/options"
 	"v.io/v23/rpc"
-	"v.io/x/ref/lib/xrpc"
 )
 
 func StartServers(ctx *context.T, listenSpec rpc.ListenSpec, mountName, nhName, permsFile, persistDir, debugPrefix string) (string, func(), error) {
@@ -29,10 +28,10 @@
 		return "", nil, err
 	}
 	ctx = v23.WithListenSpec(ctx, listenSpec)
-	mtServer, err := xrpc.NewDispatchingServer(ctx, mountName, mt, options.ServesMountTable(true))
+	ctx, mtServer, err := v23.WithNewDispatchingServer(ctx, mountName, mt, options.ServesMountTable(true))
 	if err != nil {
 
-		ctx.Errorf("v23.NewServer failed: %v", err)
+		ctx.Errorf("v23.WithNewServer failed: %v", err)
 		return "", nil, err
 	}
 	stopFuncs = append(stopFuncs, mtServer.Stop)
@@ -60,9 +59,9 @@
 			nh, err = NewNeighborhoodDispatcher(nhName, names...)
 		}
 
-		nhServer, err := xrpc.NewDispatchingServer(ctx, naming.Join(mtName, "nh"), nh, options.ServesMountTable(true))
+		ctx, nhServer, err := v23.WithNewDispatchingServer(ctx, naming.Join(mtName, "nh"), nh, options.ServesMountTable(true))
 		if err != nil {
-			ctx.Errorf("v23.NewServer failed: %v", err)
+			ctx.Errorf("v23.WithNewServer failed: %v", err)
 			stop()
 			return "", nil, err
 		}
diff --git a/services/profile/profile/impl_test.go b/services/profile/profile/impl_test.go
index 3879f0e..7c717ba 100644
--- a/services/profile/profile/impl_test.go
+++ b/services/profile/profile/impl_test.go
@@ -16,9 +16,9 @@
 	"v.io/v23/security"
 	"v.io/v23/services/build"
 
+	"v.io/v23"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/services/profile"
 	"v.io/x/ref/services/repository"
@@ -91,7 +91,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
-	server, err := xrpc.NewDispatchingServer(ctx, "", &dispatcher{})
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", &dispatcher{})
 	if err != nil {
 		return
 	}
diff --git a/services/profile/profiled/impl_test.go b/services/profile/profiled/impl_test.go
index 89e5667..2319d43 100644
--- a/services/profile/profiled/impl_test.go
+++ b/services/profile/profiled/impl_test.go
@@ -10,10 +10,9 @@
 	"reflect"
 	"testing"
 
+	"v.io/v23"
 	"v.io/v23/naming"
 	"v.io/v23/services/build"
-
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/profile"
 	"v.io/x/ref/services/repository"
 	"v.io/x/ref/test"
@@ -49,7 +48,7 @@
 	if err != nil {
 		t.Fatalf("NewDispatcher() failed: %v", err)
 	}
-	server, err := xrpc.NewDispatchingServer(ctx, "", dispatcher)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", dispatcher)
 	if err != nil {
 		t.Fatalf("NewServer() failed: %v", err)
 	}
@@ -109,7 +108,7 @@
 	if err != nil {
 		t.Fatalf("NewDispatcher() failed: %v", err)
 	}
-	server, err := xrpc.NewDispatchingServer(ctx, "", dispatcher)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, "", dispatcher)
 	if err != nil {
 		t.Fatalf("NewServer() failed: %v", err)
 	}
@@ -138,7 +137,7 @@
 	if err != nil {
 		t.Fatalf("NewDispatcher() failed: %v", err)
 	}
-	server, err = xrpc.NewDispatchingServer(ctx, "", dispatcher)
+	ctx, server, err = v23.WithNewDispatchingServer(ctx, "", dispatcher)
 	if err != nil {
 		t.Fatalf("NewServer() failed: %v", err)
 	}
diff --git a/services/profile/profiled/main.go b/services/profile/profiled/main.go
index 93cf635..6b51f64 100644
--- a/services/profile/profiled/main.go
+++ b/services/profile/profiled/main.go
@@ -10,12 +10,12 @@
 import (
 	"fmt"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/security/securityflag"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/roaming"
 )
 
@@ -49,7 +49,7 @@
 		return fmt.Errorf("NewDispatcher() failed: %v", err)
 	}
 
-	server, err := xrpc.NewDispatchingServer(ctx, name, dispatcher)
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, name, dispatcher)
 	if err != nil {
 		return fmt.Errorf("NewServer() failed: %v", err)
 	}
diff --git a/services/proxy/proxyd/main.go b/services/proxy/proxyd/main.go
index c7e6950..7b5488f 100644
--- a/services/proxy/proxyd/main.go
+++ b/services/proxy/proxyd/main.go
@@ -14,18 +14,15 @@
 	"net/http"
 	"time"
 
-	"v.io/x/lib/cmdline"
-
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/logging"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/security/access"
-
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/runtime/factories/static"
 )
 
@@ -97,7 +94,7 @@
 		monitoringName = name + "-mon"
 	}
 	ctx = v23.WithListenSpec(ctx, rpc.ListenSpec{Proxy: proxyEndpoint.Name()})
-	server, err := xrpc.NewDispatchingServer(ctx, monitoringName, &nilDispatcher{})
+	ctx, server, err := v23.WithNewDispatchingServer(ctx, monitoringName, &nilDispatcher{})
 	if err != nil {
 		return fmt.Errorf("NewServer failed: %v", err)
 	}
diff --git a/services/proxy/proxyd/proxyd_v23_test.go b/services/proxy/proxyd/proxyd_v23_test.go
index 86b7c64..85bf69e 100644
--- a/services/proxy/proxyd/proxyd_v23_test.go
+++ b/services/proxy/proxyd/proxyd_v23_test.go
@@ -11,7 +11,6 @@
 	"v.io/v23/context"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/test/modules"
 	"v.io/x/ref/test/v23tests"
 )
@@ -58,7 +57,7 @@
 var runServer = modules.Register(func(env *modules.Env, args ...string) error {
 	ctx, shutdown := v23.Init()
 	defer shutdown()
-	if _, err := xrpc.NewServer(ctx, serverName, service{}, security.AllowEveryone()); err != nil {
+	if _, _, err := v23.WithNewServer(ctx, serverName, service{}, security.AllowEveryone()); err != nil {
 		return err
 	}
 	modules.WaitForEOF(env.Stdin)
diff --git a/services/role/roled/internal/role_test.go b/services/role/roled/internal/role_test.go
index e59f6d6..c327825 100644
--- a/services/role/roled/internal/role_test.go
+++ b/services/role/roled/internal/role_test.go
@@ -18,7 +18,6 @@
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	vsecurity "v.io/x/ref/lib/security"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/role"
 	irole "v.io/x/ref/services/role/roled/internal"
 	"v.io/x/ref/test"
@@ -72,7 +71,7 @@
 
 	testServerCtx := newPrincipalContext(t, ctx, root, "testserver")
 	tDisp := &testDispatcher{}
-	_, err = xrpc.NewDispatchingServer(testServerCtx, "test", tDisp)
+	testServerCtx, _, err = v23.WithNewDispatchingServer(testServerCtx, "test", tDisp)
 	if err != nil {
 		t.Fatalf("NewDispatchingServer failed: %v", err)
 	}
@@ -156,15 +155,15 @@
 	roleAddr := newRoleServer(t, newPrincipalContext(t, ctx, root, "roles"), workdir)
 
 	tDisp := &testDispatcher{}
-	_, err = xrpc.NewDispatchingServer(peer1, "peer1", tDisp)
+	peer1, _, err = v23.WithNewDispatchingServer(peer1, "peer1", tDisp)
 	if err != nil {
 		t.Fatalf("NewDispatchingServer failed: %v", err)
 	}
-	_, err = xrpc.NewDispatchingServer(peer2, "peer2", tDisp)
+	peer2, _, err = v23.WithNewDispatchingServer(peer2, "peer2", tDisp)
 	if err != nil {
 		t.Fatalf("NewDispatchingServer failed: %v", err)
 	}
-	_, err = xrpc.NewDispatchingServer(peer3, "peer3", tDisp)
+	peer3, _, err = v23.WithNewDispatchingServer(peer3, "peer3", tDisp)
 	if err != nil {
 		t.Fatalf("NewDispatchingServer failed: %v", err)
 	}
@@ -276,7 +275,7 @@
 }
 
 func newRoleServer(t *testing.T, ctx *context.T, dir string) string {
-	_, err := xrpc.NewDispatchingServer(ctx, "role", irole.NewDispatcher(dir, "role"))
+	ctx, _, err := v23.WithNewDispatchingServer(ctx, "role", irole.NewDispatcher(dir, "role"))
 	if err != nil {
 		t.Fatalf("ServeDispatcher failed: %v", err)
 	}
diff --git a/services/role/roled/main.go b/services/role/roled/main.go
index e1a3857..4f77cc9 100644
--- a/services/role/roled/main.go
+++ b/services/role/roled/main.go
@@ -10,11 +10,11 @@
 import (
 	"fmt"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/static"
 	irole "v.io/x/ref/services/role/roled/internal"
 )
@@ -43,7 +43,7 @@
 	if len(name) == 0 {
 		return env.UsageErrorf("-name must be specified")
 	}
-	_, err := xrpc.NewDispatchingServer(ctx, name, irole.NewDispatcher(configDir, name))
+	ctx, _, err := v23.WithNewDispatchingServer(ctx, name, irole.NewDispatcher(configDir, name))
 	if err != nil {
 		return fmt.Errorf("NewServer failed: %v", err)
 	}
diff --git a/services/syncbase/syncbased/main.go b/services/syncbase/syncbased/main.go
index 887cc29..5602fa3 100644
--- a/services/syncbase/syncbased/main.go
+++ b/services/syncbase/syncbased/main.go
@@ -14,7 +14,6 @@
 	"v.io/v23/security/access"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/security/securityflag"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/roaming"
 	"v.io/x/ref/services/syncbase/server"
 )
@@ -62,9 +61,9 @@
 	d := server.NewDispatcher(service)
 
 	// Publish the service in the mount table.
-	s, err := xrpc.NewDispatchingServer(ctx, *name, d)
+	ctx, s, err := v23.WithNewDispatchingServer(ctx, *name, d)
 	if err != nil {
-		vlog.Fatal("v23.NewDispatchingServer() failed: ", err)
+		vlog.Fatal("v23.WithNewDispatchingServer() failed: ", err)
 	}
 	if *name != "" {
 		vlog.Info("Mounted at: ", *name)
diff --git a/services/syncbase/testutil/util.go b/services/syncbase/testutil/util.go
index a603d60..3d9aa31 100644
--- a/services/syncbase/testutil/util.go
+++ b/services/syncbase/testutil/util.go
@@ -24,7 +24,6 @@
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/flags"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/syncbase/server"
 	tsecurity "v.io/x/ref/test/testutil"
 )
@@ -240,9 +239,9 @@
 	if err != nil {
 		vlog.Fatal("server.NewService() failed: ", err)
 	}
-	s, err := xrpc.NewDispatchingServer(serverCtx, "", server.NewDispatcher(service))
+	serverCtx, s, err := v23.WithNewDispatchingServer(serverCtx, "", server.NewDispatcher(service))
 	if err != nil {
-		vlog.Fatal("xrpc.NewDispatchingServer() failed: ", err)
+		vlog.Fatal("v23.WithNewDispatchingServer() failed: ", err)
 	}
 	name := s.Status().Endpoints[0].Name()
 	return name, func() {
diff --git a/services/wspr/internal/app/app_test.go b/services/wspr/internal/app/app_test.go
index 47b42af..8731152 100644
--- a/services/wspr/internal/app/app_test.go
+++ b/services/wspr/internal/app/app_test.go
@@ -25,7 +25,6 @@
 	"v.io/v23/vom"
 	"v.io/v23/vtrace"
 	vsecurity "v.io/x/ref/lib/security"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/services/wspr/internal/lib"
@@ -109,7 +108,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
-	s, err := xrpc.NewServer(ctx, "", simpleAdder{}, nil)
+	ctx, s, err := v23.WithNewServer(ctx, "", simpleAdder{}, nil)
 	if err != nil {
 		t.Fatalf("unable to start server: %v", err)
 	}
@@ -152,7 +151,7 @@
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
-	s, err := xrpc.NewServer(ctx, "", simpleAdder{}, nil)
+	ctx, s, err := v23.WithNewServer(ctx, "", simpleAdder{}, nil)
 	if err != nil {
 		t.Fatalf("unable to start server: %v", err)
 	}
@@ -320,7 +319,7 @@
 	if err != nil {
 		return nil, fmt.Errorf("unable to start mounttable: %v", err)
 	}
-	s, err := xrpc.NewDispatchingServer(ctx, "", mt, options.ServesMountTable(true))
+	ctx, s, err := v23.WithNewDispatchingServer(ctx, "", mt, options.ServesMountTable(true))
 	if err != nil {
 		return nil, fmt.Errorf("unable to start mounttable: %v", err)
 	}
diff --git a/services/wspr/internal/browspr/browspr_test.go b/services/wspr/internal/browspr/browspr_test.go
index a950e8d..e70be78 100644
--- a/services/wspr/internal/browspr/browspr_test.go
+++ b/services/wspr/internal/browspr/browspr_test.go
@@ -19,8 +19,6 @@
 	"v.io/v23/vdl"
 	vdltime "v.io/v23/vdlroot/time"
 	"v.io/v23/vom"
-
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/services/wspr/internal/app"
@@ -74,7 +72,7 @@
 	if err != nil {
 		t.Fatalf("Failed to create mounttable: %v", err)
 	}
-	s, err := xrpc.NewDispatchingServer(ctx, "", mt, options.ServesMountTable(true))
+	ctx, s, err := v23.WithNewDispatchingServer(ctx, "", mt, options.ServesMountTable(true))
 	if err != nil {
 		t.Fatalf("Failed to start mounttable server: %v", err)
 	}
@@ -86,7 +84,7 @@
 	}
 
 	mockServerName := "mock/server"
-	mockServer, err := xrpc.NewServer(ctx, mockServerName, mockServer{}, nil)
+	ctx, mockServer, err := v23.WithNewServer(ctx, mockServerName, mockServer{}, nil)
 	if err != nil {
 		t.Fatalf("Failed to start mock server: %v", err)
 	}
diff --git a/test/hello/helloserver/helloserver.go b/test/hello/helloserver/helloserver.go
index 00d65fd..f9977a1 100644
--- a/test/hello/helloserver/helloserver.go
+++ b/test/hello/helloserver/helloserver.go
@@ -10,13 +10,13 @@
 import (
 	"fmt"
 
+	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
-	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 )
 
@@ -44,7 +44,7 @@
 }
 
 func runHelloServer(ctx *context.T, env *cmdline.Env, args []string) error {
-	server, err := xrpc.NewServer(ctx, name, &helloServer{}, security.AllowEveryone())
+	ctx, server, err := v23.WithNewServer(ctx, name, &helloServer{}, security.AllowEveryone())
 	if err != nil {
 		return fmt.Errorf("NewServer: %v", err)
 	}
diff --git a/test/init.go b/test/init.go
index c627309..ef625eb 100644
--- a/test/init.go
+++ b/test/init.go
@@ -14,10 +14,8 @@
 	"v.io/v23/context"
 	"v.io/v23/naming"
 	"v.io/v23/options"
-
 	"v.io/x/ref/internal/logger"
 	"v.io/x/ref/lib/flags"
-	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test/testutil"
 )
@@ -102,7 +100,7 @@
 		if err != nil {
 			panic(err)
 		}
-		s, err := xrpc.NewDispatchingServer(ctx, "", disp, options.ServesMountTable(true))
+		_, s, err := v23.WithNewDispatchingServer(ctx, "", disp, options.ServesMountTable(true))
 		if err != nil {
 			panic(err)
 		}