diff --git a/clients/shell/go/src/v.io/x/chat/channel.go b/clients/shell/go/src/v.io/x/chat/channel.go
index d14ea07..203df6e 100644
--- a/clients/shell/go/src/v.io/x/chat/channel.go
+++ b/clients/shell/go/src/v.io/x/chat/channel.go
@@ -42,6 +42,7 @@
 	"v.io/v23/security/access"
 	mt "v.io/v23/services/mounttable"
 	"v.io/x/chat/vdl"
+	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/roaming"
 )
 
@@ -104,7 +105,7 @@
 	// The implementation of the chat server.
 	chatServerMethods *chatServerMethods
 	// The chat server.
-	server rpc.Server
+	server *xrpc.Server
 	// Channel that emits incoming messages.
 	messages chan message
 	// Cached list of channel members.
@@ -200,32 +201,17 @@
 
 // join starts a chat server and mounts it in the channel path.
 func (cr *channel) join() error {
-	// Create a new server.
-	s, err := v23.NewServer(cr.ctx)
-	if err != nil {
-		return err
-	}
-
-	// Start listening for incoming connections.
-	if _, err := s.Listen(v23.GetListenSpec(cr.ctx)); err != nil {
-		return err
-	}
-
 	// Get a locked name in the mounttable that we can mount our server on.
 	name, err := cr.getLockedName()
 	if err != nil {
 		return err
 	}
-
 	// Serve the chat server on the locked name.
 	serverChat := vdl.ChatServer(cr.chatServerMethods)
-	if err := s.Serve(name, serverChat, security.AllowEveryone()); err != nil {
-		return err
-	}
 
-	cr.server = s
-
-	return nil
+	// Create a new server.
+	cr.server, err = xrpc.NewServer(cr.ctx, name, serverChat, security.AllowEveryone())
+	return err
 }
 
 // leave stops the chat server and removes our mounted name from the
diff --git a/clients/shell/go/src/v.io/x/chat/channel_test.go b/clients/shell/go/src/v.io/x/chat/channel_test.go
index 7bdb1de..120eda1 100644
--- a/clients/shell/go/src/v.io/x/chat/channel_test.go
+++ b/clients/shell/go/src/v.io/x/chat/channel_test.go
@@ -14,6 +14,7 @@
 	"v.io/v23/context"
 	"v.io/v23/options"
 
+	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/modules"
@@ -25,24 +26,16 @@
 	ctx, shutdown := v23.Init()
 	defer shutdown()
 
-	lspec := v23.GetListenSpec(ctx)
-	server, err := v23.NewServer(ctx, options.ServesMountTable(true))
-	if err != nil {
-		return fmt.Errorf("root failed: %v", err)
-	}
 	mt, err := mounttablelib.NewMountTableDispatcher("", "", "mounttable")
 	if err != nil {
 		return fmt.Errorf("mounttable.NewMountTableDispatcher failed: %s", err)
 	}
-	eps, err := server.Listen(lspec)
+	server, err := xrpc.NewDispatchingServer(ctx, "", mt, options.ServesMountTable(true))
 	if err != nil {
-		return fmt.Errorf("server.Listen failed: %s", err)
-	}
-	if err := server.ServeDispatcher("", mt); err != nil {
-		return fmt.Errorf("root failed: %s", err)
+		return fmt.Errorf("root failed: %v", err)
 	}
 	fmt.Fprintf(env.Stdout, "PID=%d\n", os.Getpid())
-	for _, ep := range eps {
+	for _, ep := range server.Status().Endpoints {
 		fmt.Fprintf(env.Stdout, "MT_NAME=%s\n", ep.Name())
 	}
 	modules.WaitForEOF(env.Stdin)
