diff --git a/go/src/v.io/x/js.core/stress/stressd/main.go b/go/src/v.io/x/js.core/stress/stressd/main.go
index 021593e..6f4cb97 100644
--- a/go/src/v.io/x/js.core/stress/stressd/main.go
+++ b/go/src/v.io/x/js.core/stress/stressd/main.go
@@ -8,7 +8,10 @@
 	"runtime"
 
 	"v.io/v23"
+	"v.io/v23/security"
+	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/signals"
+	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 )
 
@@ -17,8 +20,9 @@
 	ctx, shutdown := v23.Init()
 	defer shutdown()
 
-	s := startServer(ctx, v23.GetListenSpec(ctx))
-	defer s.Stop()
-
+	_, err := xrpc.NewServer(ctx, "", NewStressService(), security.AllowEveryone())
+	if err != nil {
+		vlog.Fatalf("NewServer failed: %v", err)
+	}
 	<-signals.ShutdownOnSignals(ctx)
 }
diff --git a/go/src/v.io/x/js.core/stress/stressd/server.go b/go/src/v.io/x/js.core/stress/stressd/server.go
index 0ebb6fa..0f041dd 100644
--- a/go/src/v.io/x/js.core/stress/stressd/server.go
+++ b/go/src/v.io/x/js.core/stress/stressd/server.go
@@ -9,18 +9,19 @@
 	"fmt"
 	"time"
 
-	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/rpc"
-	"v.io/v23/security"
 	"v.io/x/js.core/stress"
-	"v.io/x/lib/vlog"
 )
 
 const payloadSize = 1000
 
 type impl struct{}
 
+func NewStressService() stress.StressServerStub {
+	return stress.StressServer(&impl{})
+}
+
 func (s *impl) Echo(_ *context.T, _ rpc.ServerCall, payload []byte) ([]byte, error) {
 	return payload, nil
 }
@@ -54,21 +55,3 @@
 	res.MsecsPerRpc = 1000 / res.Qps
 	return res, nil
 }
-
-func startServer(ctx *context.T, listenSpec rpc.ListenSpec) rpc.Server {
-	server, err := v23.NewServer(ctx)
-	if err != nil {
-		vlog.Fatalf("NewServer failed: %v", err)
-	}
-	_, err = server.Listen(listenSpec)
-	if err != nil {
-		vlog.Fatalf("Listen failed: %v", err)
-	}
-
-	s := impl{}
-	if err := server.Serve("", stress.StressServer(&s), security.AllowEveryone()); err != nil {
-		vlog.Fatalf("Serve failed: %v", err)
-	}
-
-	return server
-}
diff --git a/go/src/v.io/x/js.core/test_service/test_serviced/main.go b/go/src/v.io/x/js.core/test_service/test_serviced/main.go
index ec964e8..3bde24e 100644
--- a/go/src/v.io/x/js.core/test_service/test_serviced/main.go
+++ b/go/src/v.io/x/js.core/test_service/test_serviced/main.go
@@ -10,20 +10,22 @@
 	"log"
 
 	"v.io/v23"
+	"v.io/x/ref/lib/flags"
 	"v.io/x/ref/lib/signals"
+	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 )
 
 func main() {
+	flags.SetDefaultHostPort("127.0.0.1:0")
 	ctx, shutdown := v23.Init()
 	defer shutdown()
 
-	s, endpoint, err := StartServer(ctx)
+	s, err := xrpc.NewDispatchingServer(ctx, "test_service", NewDispatcher())
 	if err != nil {
-		log.Fatal("", err)
+		log.Fatalf("failure creating server: %v", err)
 	}
-	defer s.Stop()
-
+	endpoint := s.Status().Endpoints[0]
 	fmt.Printf("Listening at: %v\n", endpoint)
 	<-signals.ShutdownOnSignals(ctx)
 }
diff --git a/go/src/v.io/x/js.core/test_service/test_serviced/test_serviced.go b/go/src/v.io/x/js.core/test_service/test_serviced/test_serviced.go
index 092ae64..7d51839 100644
--- a/go/src/v.io/x/js.core/test_service/test_serviced/test_serviced.go
+++ b/go/src/v.io/x/js.core/test_service/test_serviced/test_serviced.go
@@ -8,9 +8,7 @@
 	"fmt"
 	"strings"
 
-	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/naming"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/js.core/test_service"
@@ -32,6 +30,17 @@
 	caveatedInvoker interface{}
 }
 
+func NewDispatcher() rpc.Dispatcher {
+	disp := &testServiceDispatcher{
+		cache:           test_service.CacheServer(NewCached()),
+		errorThrower:    test_service.ErrorThrowerServer(NewErrorThrower()),
+		cancelCollector: test_service.CancelCollectorServer(NewCancelCollector()),
+		native:          test_service.NativeTestServer(NewNativeTest()),
+		caveatedInvoker: test_service.InvokeMethodWithCaveatedIdentityServer(NewInvokeMethodWithCaveatedIdentityServer()),
+	}
+	return disp
+}
+
 func (sd *testServiceDispatcher) Lookup(suffix string) (interface{}, security.Authorizer, error) {
 	authorizer := openAuthorizer{}
 
@@ -58,34 +67,3 @@
 
 	return rpc.ReflectInvokerOrDie(sd.cache), authorizer, nil
 }
-
-func StartServer(ctx *context.T) (rpc.Server, naming.Endpoint, error) {
-	// Create a new server instance.
-	s, err := v23.NewServer(ctx)
-	if err != nil {
-		return nil, nil, fmt.Errorf("failure creating server: %v", err)
-	}
-
-	disp := &testServiceDispatcher{
-		cache:           test_service.CacheServer(NewCached()),
-		errorThrower:    test_service.ErrorThrowerServer(NewErrorThrower()),
-		cancelCollector: test_service.CancelCollectorServer(NewCancelCollector()),
-		native:          test_service.NativeTestServer(NewNativeTest()),
-		caveatedInvoker: test_service.InvokeMethodWithCaveatedIdentityServer(NewInvokeMethodWithCaveatedIdentityServer()),
-	}
-
-	// Create an endpoint and begin listening.
-	spec := rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"ws", "127.0.0.1:0"}}}
-	endpoints, err := s.Listen(spec)
-	if err != nil {
-		return nil, nil, fmt.Errorf("error listening to service: %v", err)
-	}
-
-	// Publish the services. This will register them in the mount table and
-	// maintain the registration until StopServing is called.
-	if err := s.ServeDispatcher("test_service", disp); err != nil {
-		return nil, nil, fmt.Errorf("error publishing service '%s': %v", err)
-	}
-
-	return s, endpoints[0], nil
-}
