ref: Rename package ipc to rpc.

We are doing this because rpc better describes what we are offering.
Also now vrpc and rpc are more obviously related.
This has the potential downside of being confused with the go rpc package
but we believe the two packages will ralrely be used together..

MultiPart: 6/11

Change-Id: Ia5c35cb7938ac907be418b495f485aede3621e56
diff --git a/cmd/application/impl_test.go b/cmd/application/impl_test.go
index 2594b3f..f508b40 100644
--- a/cmd/application/impl_test.go
+++ b/cmd/application/impl_test.go
@@ -9,8 +9,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/application"
 	"v.io/v23/services/security/access"
@@ -75,27 +75,27 @@
 	suffix string
 }
 
-func (s *server) Match(_ ipc.ServerCall, profiles []string) (application.Envelope, error) {
+func (s *server) Match(_ rpc.ServerCall, profiles []string) (application.Envelope, error) {
 	vlog.VI(2).Infof("%v.Match(%v) was called", s.suffix, profiles)
 	return envelope, nil
 }
 
-func (s *server) Put(_ ipc.ServerCall, profiles []string, env application.Envelope) error {
+func (s *server) Put(_ rpc.ServerCall, profiles []string, env application.Envelope) error {
 	vlog.VI(2).Infof("%v.Put(%v, %v) was called", s.suffix, profiles, env)
 	return nil
 }
 
-func (s *server) Remove(_ ipc.ServerCall, profile string) error {
+func (s *server) Remove(_ rpc.ServerCall, profile string) error {
 	vlog.VI(2).Infof("%v.Remove(%v) was called", s.suffix, profile)
 	return nil
 }
 
-func (s *server) SetPermissions(_ ipc.ServerCall, acl access.Permissions, etag string) error {
+func (s *server) SetPermissions(_ rpc.ServerCall, acl access.Permissions, etag string) error {
 	vlog.VI(2).Infof("%v.SetPermissions(%v, %v) was called", acl, etag)
 	return nil
 }
 
-func (s *server) GetPermissions(ipc.ServerCall) (access.Permissions, string, error) {
+func (s *server) GetPermissions(rpc.ServerCall) (access.Permissions, string, error) {
 	vlog.VI(2).Infof("%v.GetPermissions() was called")
 	return nil, "", nil
 }
@@ -103,7 +103,7 @@
 type dispatcher struct {
 }
 
-func NewDispatcher() ipc.Dispatcher {
+func NewDispatcher() rpc.Dispatcher {
 	return &dispatcher{}
 }
 
@@ -111,7 +111,7 @@
 	return repository.ApplicationServer(&server{suffix: suffix}), nil, nil
 }
 
-func startServer(t *testing.T, ctx *context.T) (ipc.Server, naming.Endpoint, error) {
+func startServer(t *testing.T, ctx *context.T) (rpc.Server, naming.Endpoint, error) {
 	dispatcher := NewDispatcher()
 	server, err := v23.NewServer(ctx)
 	if err != nil {
@@ -130,7 +130,7 @@
 	return server, endpoints[0], nil
 }
 
-func stopServer(t *testing.T, server ipc.Server) {
+func stopServer(t *testing.T, server rpc.Server) {
 	if err := server.Stop(); err != nil {
 		t.Errorf("server.Stop failed: %v", err)
 	}
diff --git a/cmd/binary/impl_test.go b/cmd/binary/impl_test.go
index 62fbe40..b4a696b 100644
--- a/cmd/binary/impl_test.go
+++ b/cmd/binary/impl_test.go
@@ -13,8 +13,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/binary"
 	"v.io/v23/services/mgmt/repository"
@@ -29,12 +29,12 @@
 	suffix string
 }
 
-func (s *server) Create(ipc.ServerCall, int32, repository.MediaInfo) error {
+func (s *server) Create(rpc.ServerCall, int32, repository.MediaInfo) error {
 	vlog.Infof("Create() was called. suffix=%v", s.suffix)
 	return nil
 }
 
-func (s *server) Delete(ipc.ServerCall) error {
+func (s *server) Delete(rpc.ServerCall) error {
 	vlog.Infof("Delete() was called. suffix=%v", s.suffix)
 	if s.suffix != "exists" {
 		return fmt.Errorf("binary doesn't exist: %v", s.suffix)
@@ -50,7 +50,7 @@
 	return nil
 }
 
-func (s *server) DownloadUrl(ipc.ServerCall) (string, int64, error) {
+func (s *server) DownloadUrl(rpc.ServerCall) (string, int64, error) {
 	vlog.Infof("DownloadUrl() was called. suffix=%v", s.suffix)
 	if s.suffix != "" {
 		return "", 0, fmt.Errorf("non-empty suffix: %v", s.suffix)
@@ -58,7 +58,7 @@
 	return "test-download-url", 0, nil
 }
 
-func (s *server) Stat(ipc.ServerCall) ([]binary.PartInfo, repository.MediaInfo, error) {
+func (s *server) Stat(rpc.ServerCall) ([]binary.PartInfo, repository.MediaInfo, error) {
 	vlog.Infof("Stat() was called. suffix=%v", s.suffix)
 	h := md5.New()
 	text := "HelloWorld"
@@ -75,18 +75,18 @@
 	return nil
 }
 
-func (s *server) GetPermissions(ipc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (s *server) GetPermissions(rpc.ServerCall) (acl access.Permissions, etag string, err error) {
 	return nil, "", nil
 }
 
-func (s *server) SetPermissions(call ipc.ServerCall, acl access.Permissions, etag string) error {
+func (s *server) SetPermissions(call rpc.ServerCall, acl access.Permissions, etag string) error {
 	return nil
 }
 
 type dispatcher struct {
 }
 
-func NewDispatcher() ipc.Dispatcher {
+func NewDispatcher() rpc.Dispatcher {
 	return &dispatcher{}
 }
 
@@ -94,7 +94,7 @@
 	return repository.BinaryServer(&server{suffix: suffix}), nil, nil
 }
 
-func startServer(t *testing.T, ctx *context.T) (ipc.Server, naming.Endpoint, error) {
+func startServer(t *testing.T, ctx *context.T) (rpc.Server, naming.Endpoint, error) {
 	dispatcher := NewDispatcher()
 	server, err := v23.NewServer(ctx)
 	if err != nil {
@@ -113,7 +113,7 @@
 	return server, endpoints[0], nil
 }
 
-func stopServer(t *testing.T, server ipc.Server) {
+func stopServer(t *testing.T, server rpc.Server) {
 	if err := server.Stop(); err != nil {
 		t.Errorf("server.Stop failed: %v", err)
 	}
diff --git a/cmd/build/impl_test.go b/cmd/build/impl_test.go
index a05930b..96d7e31 100644
--- a/cmd/build/impl_test.go
+++ b/cmd/build/impl_test.go
@@ -7,8 +7,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/services/mgmt/binary"
 	"v.io/v23/services/mgmt/build"
 	"v.io/v23/verror"
@@ -32,14 +32,14 @@
 	return nil, nil
 }
 
-func (mock) Describe(_ ipc.ServerCall, name string) (binary.Description, error) {
+func (mock) Describe(_ rpc.ServerCall, name string) (binary.Description, error) {
 	vlog.VI(2).Infof("Describe(%v) was called", name)
 	return binary.Description{}, nil
 }
 
 type dispatcher struct{}
 
-func startServer(ctx *context.T, t *testing.T) (ipc.Server, naming.Endpoint) {
+func startServer(ctx *context.T, t *testing.T) (rpc.Server, naming.Endpoint) {
 	server, err := v23.NewServer(ctx)
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
@@ -56,7 +56,7 @@
 	return server, endpoints[0]
 }
 
-func stopServer(t *testing.T, server ipc.Server) {
+func stopServer(t *testing.T, server rpc.Server) {
 	if err := server.Stop(); err != nil {
 		t.Errorf("Stop() failed: %v", err)
 	}
diff --git a/cmd/debug/debug_v23_test.go b/cmd/debug/debug_v23_test.go
index 6e66711..5a3c93a 100644
--- a/cmd/debug/debug_v23_test.go
+++ b/cmd/debug/debug_v23_test.go
@@ -100,7 +100,7 @@
 		binary.Start("logs", "read", "__debug/logs/"+logName).WaitOrDie(nil, nil)
 	}
 
-	got := binary.Start("stats", "read", "__debug/stats/ipc/server/routing-id/*/methods/ReadLog/latency-ms").Output()
+	got := binary.Start("stats", "read", "__debug/stats/rpc/server/routing-id/*/methods/ReadLog/latency-ms").Output()
 
 	want := fmt.Sprintf("Count: %d", runCount)
 	if !strings.Contains(got, want) {
@@ -117,7 +117,7 @@
 	logName := filepath.Base(file.Name())
 	binary.Start("logs", "read", "__debug/logs/"+logName).WaitOrDie(nil, nil)
 
-	inv := binary.Start("stats", "watch", "-raw", "__debug/stats/ipc/server/routing-id/*/methods/ReadLog/latency-ms")
+	inv := binary.Start("stats", "watch", "-raw", "__debug/stats/rpc/server/routing-id/*/methods/ReadLog/latency-ms")
 
 	lineChan := make(chan string)
 	// Go off and read the invocation's stdout.
diff --git a/cmd/mgmt/device/impl/devicemanager_mock_test.go b/cmd/mgmt/device/impl/devicemanager_mock_test.go
index 643d503..7a36b65 100644
--- a/cmd/mgmt/device/impl/devicemanager_mock_test.go
+++ b/cmd/mgmt/device/impl/devicemanager_mock_test.go
@@ -10,8 +10,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/application"
 	"v.io/v23/services/mgmt/binary"
@@ -35,7 +35,7 @@
 	err error
 }
 
-func (mni *mockDeviceInvoker) ListAssociations(ipc.ServerCall) (associations []device.Association, err error) {
+func (mni *mockDeviceInvoker) ListAssociations(rpc.ServerCall) (associations []device.Association, err error) {
 	vlog.VI(2).Infof("ListAssociations() was called")
 
 	ir := mni.tape.Record("ListAssociations")
@@ -64,23 +64,23 @@
 	return nil
 }
 
-func (mni *mockDeviceInvoker) AssociateAccount(call ipc.ServerCall, identityNames []string, accountName string) error {
+func (mni *mockDeviceInvoker) AssociateAccount(call rpc.ServerCall, identityNames []string, accountName string) error {
 	return mni.simpleCore(AddAssociationStimulus{"AssociateAccount", identityNames, accountName}, "AssociateAccount")
 }
 
-func (mni *mockDeviceInvoker) Claim(call ipc.ServerCall, pairingToken string) error {
+func (mni *mockDeviceInvoker) Claim(call rpc.ServerCall, pairingToken string) error {
 	return mni.simpleCore("Claim", "Claim")
 }
 
-func (*mockDeviceInvoker) Describe(ipc.ServerCall) (device.Description, error) {
+func (*mockDeviceInvoker) Describe(rpc.ServerCall) (device.Description, error) {
 	return device.Description{}, nil
 }
 
-func (*mockDeviceInvoker) IsRunnable(_ ipc.ServerCall, description binary.Description) (bool, error) {
+func (*mockDeviceInvoker) IsRunnable(_ rpc.ServerCall, description binary.Description) (bool, error) {
 	return false, nil
 }
 
-func (*mockDeviceInvoker) Reset(call ipc.ServerCall, deadline uint64) error { return nil }
+func (*mockDeviceInvoker) Reset(call rpc.ServerCall, deadline uint64) error { return nil }
 
 // Mock Install
 type InstallStimulus struct {
@@ -150,7 +150,7 @@
 	return packageSize(dst), nil
 }
 
-func (mni *mockDeviceInvoker) Install(call ipc.ServerCall, appName string, config device.Config, packages application.Packages) (string, error) {
+func (mni *mockDeviceInvoker) Install(call rpc.ServerCall, appName string, config device.Config, packages application.Packages) (string, error) {
 	is := InstallStimulus{"Install", appName, config, packages, application.Envelope{}, nil}
 	if appName != appNameNoFetch {
 		// Fetch the envelope and record it in the stimulus.
@@ -196,22 +196,22 @@
 	return r.appId, r.err
 }
 
-func (*mockDeviceInvoker) Refresh(ipc.ServerCall) error { return nil }
+func (*mockDeviceInvoker) Refresh(rpc.ServerCall) error { return nil }
 
-func (*mockDeviceInvoker) Restart(ipc.ServerCall) error { return nil }
+func (*mockDeviceInvoker) Restart(rpc.ServerCall) error { return nil }
 
-func (mni *mockDeviceInvoker) Resume(_ ipc.ServerCall) error {
+func (mni *mockDeviceInvoker) Resume(_ rpc.ServerCall) error {
 	return mni.simpleCore("Resume", "Resume")
 }
 
-func (i *mockDeviceInvoker) Revert(call ipc.ServerCall) error { return nil }
+func (i *mockDeviceInvoker) Revert(call rpc.ServerCall) error { return nil }
 
 type StartResponse struct {
 	err  error
 	msgs []device.StartServerMessage
 }
 
-func (mni *mockDeviceInvoker) Start(call ipc.StreamServerCall) error {
+func (mni *mockDeviceInvoker) Start(call rpc.StreamServerCall) error {
 	ir := mni.tape.Record("Start")
 	r := ir.(StartResponse)
 	for _, m := range r.msgs {
@@ -225,19 +225,19 @@
 	timeDelta uint32
 }
 
-func (mni *mockDeviceInvoker) Stop(_ ipc.ServerCall, timeDelta uint32) error {
+func (mni *mockDeviceInvoker) Stop(_ rpc.ServerCall, timeDelta uint32) error {
 	return mni.simpleCore(StopStimulus{"Stop", timeDelta}, "Stop")
 }
 
-func (mni *mockDeviceInvoker) Suspend(_ ipc.ServerCall) error {
+func (mni *mockDeviceInvoker) Suspend(_ rpc.ServerCall) error {
 	return mni.simpleCore("Suspend", "Suspend")
 }
 
-func (*mockDeviceInvoker) Uninstall(ipc.ServerCall) error { return nil }
+func (*mockDeviceInvoker) Uninstall(rpc.ServerCall) error { return nil }
 
-func (i *mockDeviceInvoker) Update(ipc.ServerCall) error { return nil }
+func (i *mockDeviceInvoker) Update(rpc.ServerCall) error { return nil }
 
-func (*mockDeviceInvoker) UpdateTo(ipc.ServerCall, string) error { return nil }
+func (*mockDeviceInvoker) UpdateTo(rpc.ServerCall, string) error { return nil }
 
 // Mock AccessList getting and setting
 type GetPermissionsResponse struct {
@@ -252,17 +252,17 @@
 	etag string
 }
 
-func (mni *mockDeviceInvoker) SetPermissions(_ ipc.ServerCall, acl access.Permissions, etag string) error {
+func (mni *mockDeviceInvoker) SetPermissions(_ rpc.ServerCall, acl access.Permissions, etag string) error {
 	return mni.simpleCore(SetPermissionsStimulus{"SetPermissions", acl, etag}, "SetPermissions")
 }
 
-func (mni *mockDeviceInvoker) GetPermissions(ipc.ServerCall) (access.Permissions, string, error) {
+func (mni *mockDeviceInvoker) GetPermissions(rpc.ServerCall) (access.Permissions, string, error) {
 	ir := mni.tape.Record("GetPermissions")
 	r := ir.(GetPermissionsResponse)
 	return r.acl, r.etag, r.err
 }
 
-func (mni *mockDeviceInvoker) Debug(ipc.ServerCall) (string, error) {
+func (mni *mockDeviceInvoker) Debug(rpc.ServerCall) (string, error) {
 	ir := mni.tape.Record("Debug")
 	r := ir.(string)
 	return r, nil
@@ -273,7 +273,7 @@
 	t    *testing.T
 }
 
-func NewDispatcher(t *testing.T, tape *Tape) ipc.Dispatcher {
+func NewDispatcher(t *testing.T, tape *Tape) rpc.Dispatcher {
 	return &dispatcher{tape: tape, t: t}
 }
 
@@ -281,7 +281,7 @@
 	return &mockDeviceInvoker{tape: d.tape, t: d.t}, nil, nil
 }
 
-func startServer(t *testing.T, ctx *context.T, tape *Tape) (ipc.Server, naming.Endpoint, error) {
+func startServer(t *testing.T, ctx *context.T, tape *Tape) (rpc.Server, naming.Endpoint, error) {
 	dispatcher := NewDispatcher(t, tape)
 	server, err := v23.NewServer(ctx)
 	if err != nil {
@@ -302,7 +302,7 @@
 	return server, endpoints[0], nil
 }
 
-func stopServer(t *testing.T, server ipc.Server) {
+func stopServer(t *testing.T, server rpc.Server) {
 	if err := server.Stop(); err != nil {
 		t.Errorf("server.Stop failed: %v", err)
 	}
diff --git a/cmd/mgmt/device/impl/impl.go b/cmd/mgmt/device/impl/impl.go
index 2a772a8..be5b3fb 100644
--- a/cmd/mgmt/device/impl/impl.go
+++ b/cmd/mgmt/device/impl/impl.go
@@ -7,9 +7,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/application"
 	"v.io/v23/services/mgmt/device"
@@ -121,7 +121,7 @@
 }
 
 type granter struct {
-	ipc.CallOpt
+	rpc.CallOpt
 	p         security.Principal
 	extension string
 }
@@ -208,7 +208,7 @@
 	if len(args) > 2 {
 		pairingToken = args[2]
 	}
-	var serverKeyOpts ipc.CallOpt
+	var serverKeyOpts rpc.CallOpt
 	if len(args) > 3 {
 		marshalledPublicKey, err := base64.URLEncoding.DecodeString(args[3])
 		if err != nil {
diff --git a/cmd/mgmt/device/impl/local_install.go b/cmd/mgmt/device/impl/local_install.go
index 5f72597..48f1e1d 100644
--- a/cmd/mgmt/device/impl/local_install.go
+++ b/cmd/mgmt/device/impl/local_install.go
@@ -12,8 +12,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/application"
 	"v.io/v23/services/mgmt/binary"
@@ -131,11 +131,11 @@
 
 type binaryInvoker string
 
-func (binaryInvoker) Create(ipc.ServerCall, int32, repository.MediaInfo) error {
+func (binaryInvoker) Create(rpc.ServerCall, int32, repository.MediaInfo) error {
 	return errNotImplemented
 }
 
-func (binaryInvoker) Delete(ipc.ServerCall) error {
+func (binaryInvoker) Delete(rpc.ServerCall) error {
 	return errNotImplemented
 }
 
@@ -176,11 +176,11 @@
 	}
 }
 
-func (binaryInvoker) DownloadUrl(ipc.ServerCall) (string, int64, error) {
+func (binaryInvoker) DownloadUrl(rpc.ServerCall) (string, int64, error) {
 	return "", 0, errNotImplemented
 }
 
-func (i binaryInvoker) Stat(call ipc.ServerCall) ([]binary.PartInfo, repository.MediaInfo, error) {
+func (i binaryInvoker) Stat(call rpc.ServerCall) ([]binary.PartInfo, repository.MediaInfo, error) {
 	fileName := string(i)
 	h := md5.New()
 	bytes, err := ioutil.ReadFile(fileName)
@@ -196,24 +196,24 @@
 	return errNotImplemented
 }
 
-func (binaryInvoker) GetPermissions(call ipc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (binaryInvoker) GetPermissions(call rpc.ServerCall) (acl access.Permissions, etag string, err error) {
 	return nil, "", errNotImplemented
 }
 
-func (binaryInvoker) SetPermissions(call ipc.ServerCall, acl access.Permissions, etag string) error {
+func (binaryInvoker) SetPermissions(call rpc.ServerCall, acl access.Permissions, etag string) error {
 	return errNotImplemented
 }
 
 type envelopeInvoker application.Envelope
 
-func (i envelopeInvoker) Match(ipc.ServerCall, []string) (application.Envelope, error) {
+func (i envelopeInvoker) Match(rpc.ServerCall, []string) (application.Envelope, error) {
 	return application.Envelope(i), nil
 }
-func (envelopeInvoker) GetPermissions(ipc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (envelopeInvoker) GetPermissions(rpc.ServerCall) (acl access.Permissions, etag string, err error) {
 	return nil, "", errNotImplemented
 }
 
-func (envelopeInvoker) SetPermissions(ipc.ServerCall, access.Permissions, string) error {
+func (envelopeInvoker) SetPermissions(rpc.ServerCall, access.Permissions, string) error {
 	return errNotImplemented
 }
 
diff --git a/cmd/mounttable/impl.go b/cmd/mounttable/impl.go
index eb1e50d..dfd2ebe 100644
--- a/cmd/mounttable/impl.go
+++ b/cmd/mounttable/impl.go
@@ -7,9 +7,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/cmdline"
 	"v.io/x/lib/vlog"
@@ -45,7 +45,7 @@
 
 	name, pattern := args[0], args[1]
 	client := v23.GetClient(ctx)
-	call, err := client.StartCall(ctx, name, ipc.GlobMethod, []interface{}{pattern}, options.NoResolve{})
+	call, err := client.StartCall(ctx, name, rpc.GlobMethod, []interface{}{pattern}, options.NoResolve{})
 	if err != nil {
 		return err
 	}
@@ -230,7 +230,7 @@
 	vlog.Infof("Contacting %q to determine the blessings presented by it", server)
 	ctx, cancel := context.WithTimeout(ctx, time.Minute)
 	defer cancel()
-	call, err := v23.GetClient(ctx).StartCall(ctx, server, ipc.ReservedSignature, nil)
+	call, err := v23.GetClient(ctx).StartCall(ctx, server, rpc.ReservedSignature, nil)
 	if err != nil {
 		return nil, fmt.Errorf("Unable to extract blessings presented by %q: %v", server, err)
 	}
diff --git a/cmd/mounttable/impl_test.go b/cmd/mounttable/impl_test.go
index 972eaf6..096d8d8 100644
--- a/cmd/mounttable/impl_test.go
+++ b/cmd/mounttable/impl_test.go
@@ -9,8 +9,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mounttable"
 	"v.io/v23/services/security/access"
@@ -32,7 +32,7 @@
 	suffix string
 }
 
-func (s *server) Glob__(call ipc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
+func (s *server) Glob__(call rpc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
 	vlog.VI(2).Infof("Glob() was called. suffix=%v pattern=%q", s.suffix, pattern)
 	ch := make(chan naming.GlobReply, 2)
 	ch <- naming.GlobReplyEntry{naming.MountEntry{"name1", []naming.MountedServer{{"server1", nil, deadline1}}, false}}
@@ -41,45 +41,45 @@
 	return ch, nil
 }
 
-func (s *server) Mount(_ ipc.ServerCall, server string, ttl uint32, flags naming.MountFlag) error {
+func (s *server) Mount(_ rpc.ServerCall, 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
 }
 
-func (s *server) MountX(_ ipc.ServerCall, server string, patterns []security.BlessingPattern, ttl uint32, flags naming.MountFlag) error {
+func (s *server) MountX(_ rpc.ServerCall, server string, patterns []security.BlessingPattern, ttl uint32, flags naming.MountFlag) error {
 	vlog.VI(2).Infof("MountX() was called. suffix=%v servers=%q patterns=%v ttl=%d", s.suffix, server, patterns, ttl)
 	return nil
 }
 
-func (s *server) Unmount(_ ipc.ServerCall, server string) error {
+func (s *server) Unmount(_ rpc.ServerCall, server string) error {
 	vlog.VI(2).Infof("Unmount() was called. suffix=%v server=%q", s.suffix, server)
 	return nil
 }
 
-func (s *server) ResolveStep(ipc.ServerCall) (entry naming.MountEntry, err error) {
+func (s *server) ResolveStep(rpc.ServerCall) (entry naming.MountEntry, err error) {
 	vlog.VI(2).Infof("ResolveStep() was called. suffix=%v", s.suffix)
 	entry.Servers = []naming.MountedServer{{"server1", nil, deadline1}}
 	entry.Name = s.suffix
 	return
 }
 
-func (s *server) ResolveStepX(ipc.ServerCall) (entry naming.MountEntry, err error) {
+func (s *server) ResolveStepX(rpc.ServerCall) (entry naming.MountEntry, err error) {
 	vlog.VI(2).Infof("ResolveStepX() was called. suffix=%v", s.suffix)
 	entry.Servers = []naming.MountedServer{{"server1", nil, deadline1}}
 	entry.Name = s.suffix
 	return
 }
 
-func (s *server) Delete(ipc.ServerCall, bool) error {
+func (s *server) Delete(rpc.ServerCall, bool) error {
 	vlog.VI(2).Infof("Delete() was called. suffix=%v", s.suffix)
 	return nil
 }
-func (s *server) SetPermissions(ipc.ServerCall, access.Permissions, string) error {
+func (s *server) SetPermissions(rpc.ServerCall, access.Permissions, string) error {
 	vlog.VI(2).Infof("SetPermissions() was called. suffix=%v", s.suffix)
 	return nil
 }
 
-func (s *server) GetPermissions(ipc.ServerCall) (access.Permissions, string, error) {
+func (s *server) GetPermissions(rpc.ServerCall) (access.Permissions, string, error) {
 	vlog.VI(2).Infof("GetPermissions() was called. suffix=%v", s.suffix)
 	return nil, "", nil
 }
@@ -91,7 +91,7 @@
 	return mounttable.MountTableServer(&server{suffix: suffix}), nil, nil
 }
 
-func startServer(t *testing.T, ctx *context.T) (ipc.Server, naming.Endpoint, error) {
+func startServer(t *testing.T, ctx *context.T) (rpc.Server, naming.Endpoint, error) {
 	dispatcher := new(dispatcher)
 	server, err := v23.NewServer(ctx)
 	if err != nil {
@@ -110,7 +110,7 @@
 	return server, endpoints[0], nil
 }
 
-func stopServer(t *testing.T, server ipc.Server) {
+func stopServer(t *testing.T, server rpc.Server) {
 	if err := server.Stop(); err != nil {
 		t.Errorf("server.Stop failed: %v", err)
 	}
diff --git a/cmd/namespace/impl.go b/cmd/namespace/impl.go
index cf8e458..3d9fb58 100644
--- a/cmd/namespace/impl.go
+++ b/cmd/namespace/impl.go
@@ -7,9 +7,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/cmdline"
 	"v.io/x/lib/vlog"
@@ -245,7 +245,7 @@
 	vlog.Infof("Contacting %q to determine the blessings presented by it", server)
 	ctx, cancel := context.WithTimeout(ctx, time.Minute)
 	defer cancel()
-	call, err := v23.GetClient(ctx).StartCall(ctx, server, ipc.ReservedSignature, nil)
+	call, err := v23.GetClient(ctx).StartCall(ctx, server, rpc.ReservedSignature, nil)
 	if err != nil {
 		return nil, fmt.Errorf("Unable to extract blessings presented by %q: %v", server, err)
 	}
diff --git a/cmd/principal/main.go b/cmd/principal/main.go
index 036e7b3..d8076a0 100644
--- a/cmd/principal/main.go
+++ b/cmd/principal/main.go
@@ -16,7 +16,7 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vom"
 	"v.io/x/lib/cmdline"
@@ -854,7 +854,7 @@
 	token     string
 }
 
-func (r *recvBlessingsService) Grant(call ipc.StreamServerCall, token string) error {
+func (r *recvBlessingsService) Grant(call rpc.StreamServerCall, token string) error {
 	b := call.GrantedBlessings()
 	if b.IsZero() {
 		return fmt.Errorf("no blessings granted by sender")
@@ -902,7 +902,7 @@
 
 func (g *granter) Grant(server security.Blessings) (security.Blessings, error) {
 	if got := fmt.Sprintf("%v", server.PublicKey()); got != g.serverKey {
-		// If the granter returns an error, the IPC framework should
+		// If the granter returns an error, the RPC framework should
 		// abort the RPC before sending the request to the server.
 		// Thus, there is no concern about leaking the token to an
 		// imposter server.
@@ -910,7 +910,7 @@
 	}
 	return g.p.Bless(server.PublicKey(), g.with, g.extension, g.caveats[0], g.caveats[1:]...)
 }
-func (*granter) IPCCallOpt() {}
+func (*granter) RPCCallOpt() {}
 
 func sendBlessings(ctx *context.T, object string, granter *granter, remoteToken string) error {
 	client := v23.GetClient(ctx)
diff --git a/cmd/profile/impl_test.go b/cmd/profile/impl_test.go
index 6178105..146fac0 100644
--- a/cmd/profile/impl_test.go
+++ b/cmd/profile/impl_test.go
@@ -8,8 +8,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/build"
 	"v.io/x/lib/vlog"
@@ -36,7 +36,7 @@
 	suffix string
 }
 
-func (s *server) Label(ipc.ServerCall) (string, error) {
+func (s *server) Label(rpc.ServerCall) (string, error) {
 	vlog.VI(2).Infof("%v.Label() was called", s.suffix)
 	if s.suffix != "exists" {
 		return "", fmt.Errorf("profile doesn't exist: %v", s.suffix)
@@ -44,7 +44,7 @@
 	return spec.Label, nil
 }
 
-func (s *server) Description(ipc.ServerCall) (string, error) {
+func (s *server) Description(rpc.ServerCall) (string, error) {
 	vlog.VI(2).Infof("%v.Description() was called", s.suffix)
 	if s.suffix != "exists" {
 		return "", fmt.Errorf("profile doesn't exist: %v", s.suffix)
@@ -52,7 +52,7 @@
 	return spec.Description, nil
 }
 
-func (s *server) Specification(ipc.ServerCall) (profile.Specification, error) {
+func (s *server) Specification(rpc.ServerCall) (profile.Specification, error) {
 	vlog.VI(2).Infof("%v.Specification() was called", s.suffix)
 	if s.suffix != "exists" {
 		return profile.Specification{}, fmt.Errorf("profile doesn't exist: %v", s.suffix)
@@ -60,12 +60,12 @@
 	return spec, nil
 }
 
-func (s *server) Put(_ ipc.ServerCall, _ profile.Specification) error {
+func (s *server) Put(_ rpc.ServerCall, _ profile.Specification) error {
 	vlog.VI(2).Infof("%v.Put() was called", s.suffix)
 	return nil
 }
 
-func (s *server) Remove(ipc.ServerCall) error {
+func (s *server) Remove(rpc.ServerCall) error {
 	vlog.VI(2).Infof("%v.Remove() was called", s.suffix)
 	if s.suffix != "exists" {
 		return fmt.Errorf("profile doesn't exist: %v", s.suffix)
@@ -76,7 +76,7 @@
 type dispatcher struct {
 }
 
-func NewDispatcher() ipc.Dispatcher {
+func NewDispatcher() rpc.Dispatcher {
 	return &dispatcher{}
 }
 
@@ -84,7 +84,7 @@
 	return repository.ProfileServer(&server{suffix: suffix}), nil, nil
 }
 
-func startServer(t *testing.T, ctx *context.T) (ipc.Server, naming.Endpoint, error) {
+func startServer(t *testing.T, ctx *context.T) (rpc.Server, naming.Endpoint, error) {
 	server, err := v23.NewServer(ctx)
 	if err != nil {
 		t.Errorf("NewServer failed: %v", err)
@@ -102,7 +102,7 @@
 	return server, endpoints[0], nil
 }
 
-func stopServer(t *testing.T, server ipc.Server) {
+func stopServer(t *testing.T, server rpc.Server) {
 	if err := server.Stop(); err != nil {
 		t.Errorf("server.Stop failed: %v", err)
 	}
diff --git a/cmd/vdl/arith_test.go b/cmd/vdl/arith_test.go
index 1ce37bd..30f8a60 100644
--- a/cmd/vdl/arith_test.go
+++ b/cmd/vdl/arith_test.go
@@ -1,7 +1,7 @@
 package main_test
 
 // This test assumes the vdl packages under veyron2/vdl/testdata have been
-// compiled using the vdl binary, and runs end-to-end ipc tests against the
+// compiled using the vdl binary, and runs end-to-end rpc tests against the
 // generated output.  It's meant as a final sanity check of the vdl compiler; by
 // using the compiled results we're behaving as an end-user would behave.
 
@@ -13,7 +13,7 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/vdl"
 	"v.io/x/ref/lib/vdl/testdata/arith"
 	"v.io/x/ref/lib/vdl/testdata/base"
@@ -24,7 +24,7 @@
 
 var generatedError = errors.New("generated error")
 
-func newServer(ctx *context.T) ipc.Server {
+func newServer(ctx *context.T) rpc.Server {
 	s, err := v23.NewServer(ctx)
 	if err != nil {
 		panic(err)
@@ -35,19 +35,19 @@
 // serverArith implements the arith.Arith interface.
 type serverArith struct{}
 
-func (*serverArith) Add(_ ipc.ServerCall, A, B int32) (int32, error) {
+func (*serverArith) Add(_ rpc.ServerCall, A, B int32) (int32, error) {
 	return A + B, nil
 }
 
-func (*serverArith) DivMod(_ ipc.ServerCall, A, B int32) (int32, int32, error) {
+func (*serverArith) DivMod(_ rpc.ServerCall, A, B int32) (int32, int32, error) {
 	return A / B, A % B, nil
 }
 
-func (*serverArith) Sub(_ ipc.ServerCall, args base.Args) (int32, error) {
+func (*serverArith) Sub(_ rpc.ServerCall, args base.Args) (int32, error) {
 	return args.A - args.B, nil
 }
 
-func (*serverArith) Mul(_ ipc.ServerCall, nestedArgs base.NestedArgs) (int32, error) {
+func (*serverArith) Mul(_ rpc.ServerCall, nestedArgs base.NestedArgs) (int32, error) {
 	return nestedArgs.Args.A * nestedArgs.Args.B, nil
 }
 
@@ -71,11 +71,11 @@
 	return total, call.RecvStream().Err()
 }
 
-func (*serverArith) GenError(_ ipc.ServerCall) error {
+func (*serverArith) GenError(_ rpc.ServerCall) error {
 	return generatedError
 }
 
-func (*serverArith) QuoteAny(_ ipc.ServerCall, any *vdl.Value) (*vdl.Value, error) {
+func (*serverArith) QuoteAny(_ rpc.ServerCall, any *vdl.Value) (*vdl.Value, error) {
 	return vdl.StringValue(any.String()), nil
 }
 
@@ -83,23 +83,23 @@
 	serverArith
 }
 
-func (*serverCalculator) Sine(_ ipc.ServerCall, angle float64) (float64, error) {
+func (*serverCalculator) Sine(_ rpc.ServerCall, angle float64) (float64, error) {
 	return math.Sin(angle), nil
 }
 
-func (*serverCalculator) Cosine(_ ipc.ServerCall, angle float64) (float64, error) {
+func (*serverCalculator) Cosine(_ rpc.ServerCall, angle float64) (float64, error) {
 	return math.Cos(angle), nil
 }
 
-func (*serverCalculator) Exp(_ ipc.ServerCall, x float64) (float64, error) {
+func (*serverCalculator) Exp(_ rpc.ServerCall, x float64) (float64, error) {
 	return math.Exp(x), nil
 }
 
-func (*serverCalculator) On(_ ipc.ServerCall) error {
+func (*serverCalculator) On(_ rpc.ServerCall) error {
 	return nil
 }
 
-func (*serverCalculator) Off(_ ipc.ServerCall) error {
+func (*serverCalculator) Off(_ rpc.ServerCall) error {
 	return nil
 }
 
@@ -158,11 +158,11 @@
 
 	// Test auto-generated methods.
 	serverStub := arith.CalculatorServer(&serverCalculator{})
-	expectDesc(t, serverStub.Describe__(), []ipc.InterfaceDesc{
+	expectDesc(t, serverStub.Describe__(), []rpc.InterfaceDesc{
 		{
 			Name:    "Calculator",
 			PkgPath: "v.io/x/ref/lib/vdl/testdata/arith",
-			Embeds: []ipc.EmbedDesc{
+			Embeds: []rpc.EmbedDesc{
 				{
 					Name:    "Arith",
 					PkgPath: "v.io/x/ref/lib/vdl/testdata/arith",
@@ -172,7 +172,7 @@
 					PkgPath: "v.io/x/ref/lib/vdl/testdata/arith",
 				},
 			},
-			Methods: []ipc.MethodDesc{
+			Methods: []rpc.MethodDesc{
 				{Name: "On"},
 				{Name: "Off", Tags: []*vdl.Value{vdl.StringValue("offtag")}},
 			},
@@ -180,26 +180,26 @@
 		{
 			Name:    "Arith",
 			PkgPath: "v.io/x/ref/lib/vdl/testdata/arith",
-			Methods: []ipc.MethodDesc{
+			Methods: []rpc.MethodDesc{
 				{
 					Name:    "Add",
-					InArgs:  []ipc.ArgDesc{{Name: "a"}, {Name: "b"}},
-					OutArgs: []ipc.ArgDesc{{}},
+					InArgs:  []rpc.ArgDesc{{Name: "a"}, {Name: "b"}},
+					OutArgs: []rpc.ArgDesc{{}},
 				},
 				{
 					Name:    "DivMod",
-					InArgs:  []ipc.ArgDesc{{Name: "a"}, {Name: "b"}},
-					OutArgs: []ipc.ArgDesc{{Name: "quot"}, {Name: "rem"}},
+					InArgs:  []rpc.ArgDesc{{Name: "a"}, {Name: "b"}},
+					OutArgs: []rpc.ArgDesc{{Name: "quot"}, {Name: "rem"}},
 				},
 				{
 					Name:    "Sub",
-					InArgs:  []ipc.ArgDesc{{Name: "args"}},
-					OutArgs: []ipc.ArgDesc{{}},
+					InArgs:  []rpc.ArgDesc{{Name: "args"}},
+					OutArgs: []rpc.ArgDesc{{}},
 				},
 				{
 					Name:    "Mul",
-					InArgs:  []ipc.ArgDesc{{Name: "nested"}},
-					OutArgs: []ipc.ArgDesc{{}},
+					InArgs:  []rpc.ArgDesc{{Name: "nested"}},
+					OutArgs: []rpc.ArgDesc{{}},
 				},
 				{
 					Name: "GenError",
@@ -207,23 +207,23 @@
 				},
 				{
 					Name:   "Count",
-					InArgs: []ipc.ArgDesc{{Name: "start"}},
+					InArgs: []rpc.ArgDesc{{Name: "start"}},
 				},
 				{
 					Name:    "StreamingAdd",
-					OutArgs: []ipc.ArgDesc{{Name: "total"}},
+					OutArgs: []rpc.ArgDesc{{Name: "total"}},
 				},
 				{
 					Name:    "QuoteAny",
-					InArgs:  []ipc.ArgDesc{{Name: "a"}},
-					OutArgs: []ipc.ArgDesc{{}},
+					InArgs:  []rpc.ArgDesc{{Name: "a"}},
+					OutArgs: []rpc.ArgDesc{{}},
 				},
 			},
 		},
 		{
 			Name:    "AdvancedMath",
 			PkgPath: "v.io/x/ref/lib/vdl/testdata/arith",
-			Embeds: []ipc.EmbedDesc{
+			Embeds: []rpc.EmbedDesc{
 				{
 					Name:    "Trigonometry",
 					PkgPath: "v.io/x/ref/lib/vdl/testdata/arith",
@@ -237,22 +237,22 @@
 			Name:    "Trigonometry",
 			PkgPath: "v.io/x/ref/lib/vdl/testdata/arith",
 			Doc:     "// Trigonometry is an interface that specifies a couple trigonometric functions.",
-			Methods: []ipc.MethodDesc{
+			Methods: []rpc.MethodDesc{
 				{
 					Name: "Sine",
-					InArgs: []ipc.ArgDesc{
+					InArgs: []rpc.ArgDesc{
 						{"angle", ``}, // float64
 					},
-					OutArgs: []ipc.ArgDesc{
+					OutArgs: []rpc.ArgDesc{
 						{"", ``}, // float64
 					},
 				},
 				{
 					Name: "Cosine",
-					InArgs: []ipc.ArgDesc{
+					InArgs: []rpc.ArgDesc{
 						{"angle", ``}, // float64
 					},
-					OutArgs: []ipc.ArgDesc{
+					OutArgs: []rpc.ArgDesc{
 						{"", ``}, // float64
 					},
 				},
@@ -261,13 +261,13 @@
 		{
 			Name:    "Exp",
 			PkgPath: "v.io/x/ref/lib/vdl/testdata/arith/exp",
-			Methods: []ipc.MethodDesc{
+			Methods: []rpc.MethodDesc{
 				{
 					Name: "Exp",
-					InArgs: []ipc.ArgDesc{
+					InArgs: []rpc.ArgDesc{
 						{"x", ``}, // float64
 					},
-					OutArgs: []ipc.ArgDesc{
+					OutArgs: []rpc.ArgDesc{
 						{"", ``}, // float64
 					},
 				},
@@ -403,30 +403,30 @@
 		// Server-side stubs
 
 		serverStub := arith.ArithServer(&serverArith{})
-		expectDesc(t, serverStub.Describe__(), []ipc.InterfaceDesc{
+		expectDesc(t, serverStub.Describe__(), []rpc.InterfaceDesc{
 			{
 				Name:    "Arith",
 				PkgPath: "v.io/x/ref/lib/vdl/testdata/arith",
-				Methods: []ipc.MethodDesc{
+				Methods: []rpc.MethodDesc{
 					{
 						Name:    "Add",
-						InArgs:  []ipc.ArgDesc{{Name: "a"}, {Name: "b"}},
-						OutArgs: []ipc.ArgDesc{{}},
+						InArgs:  []rpc.ArgDesc{{Name: "a"}, {Name: "b"}},
+						OutArgs: []rpc.ArgDesc{{}},
 					},
 					{
 						Name:    "DivMod",
-						InArgs:  []ipc.ArgDesc{{Name: "a"}, {Name: "b"}},
-						OutArgs: []ipc.ArgDesc{{Name: "quot"}, {Name: "rem"}},
+						InArgs:  []rpc.ArgDesc{{Name: "a"}, {Name: "b"}},
+						OutArgs: []rpc.ArgDesc{{Name: "quot"}, {Name: "rem"}},
 					},
 					{
 						Name:    "Sub",
-						InArgs:  []ipc.ArgDesc{{Name: "args"}},
-						OutArgs: []ipc.ArgDesc{{}},
+						InArgs:  []rpc.ArgDesc{{Name: "args"}},
+						OutArgs: []rpc.ArgDesc{{}},
 					},
 					{
 						Name:    "Mul",
-						InArgs:  []ipc.ArgDesc{{Name: "nested"}},
-						OutArgs: []ipc.ArgDesc{{}},
+						InArgs:  []rpc.ArgDesc{{Name: "nested"}},
+						OutArgs: []rpc.ArgDesc{{}},
 					},
 					{
 						Name: "GenError",
@@ -434,16 +434,16 @@
 					},
 					{
 						Name:   "Count",
-						InArgs: []ipc.ArgDesc{{Name: "start"}},
+						InArgs: []rpc.ArgDesc{{Name: "start"}},
 					},
 					{
 						Name:    "StreamingAdd",
-						OutArgs: []ipc.ArgDesc{{Name: "total"}},
+						OutArgs: []rpc.ArgDesc{{Name: "total"}},
 					},
 					{
 						Name:    "QuoteAny",
-						InArgs:  []ipc.ArgDesc{{Name: "a"}},
-						OutArgs: []ipc.ArgDesc{{}},
+						InArgs:  []rpc.ArgDesc{{Name: "a"}},
+						OutArgs: []rpc.ArgDesc{{}},
 					},
 				},
 			},
@@ -451,7 +451,7 @@
 	}
 }
 
-func expectDesc(t *testing.T, got, want []ipc.InterfaceDesc) {
+func expectDesc(t *testing.T, got, want []rpc.InterfaceDesc) {
 	stripDesc(got)
 	stripDesc(want)
 	if !reflect.DeepEqual(got, want) {
@@ -459,7 +459,7 @@
 	}
 }
 
-func stripDesc(desc []ipc.InterfaceDesc) {
+func stripDesc(desc []rpc.InterfaceDesc) {
 	// Don't bother testing the documentation, to avoid spurious changes.
 	for i := range desc {
 		desc[i].Doc = ""
diff --git a/cmd/vrpc/test_base/test_base.vdl.go b/cmd/vrpc/test_base/test_base.vdl.go
index 5fd3968..8c85aab 100644
--- a/cmd/vrpc/test_base/test_base.vdl.go
+++ b/cmd/vrpc/test_base/test_base.vdl.go
@@ -8,7 +8,7 @@
 	"io"
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/vdl"
 )
 
@@ -41,39 +41,39 @@
 // test Signature output, which sorts methods alphabetically.
 type TypeTesterClientMethods interface {
 	// Methods to test support for primitive types.
-	EchoBool(ctx *context.T, I1 bool, opts ...ipc.CallOpt) (O1 bool, err error)
-	EchoFloat32(ctx *context.T, I1 float32, opts ...ipc.CallOpt) (O1 float32, err error)
-	EchoFloat64(ctx *context.T, I1 float64, opts ...ipc.CallOpt) (O1 float64, err error)
-	EchoInt32(ctx *context.T, I1 int32, opts ...ipc.CallOpt) (O1 int32, err error)
-	EchoInt64(ctx *context.T, I1 int64, opts ...ipc.CallOpt) (O1 int64, err error)
-	EchoString(ctx *context.T, I1 string, opts ...ipc.CallOpt) (O1 string, err error)
-	EchoByte(ctx *context.T, I1 byte, opts ...ipc.CallOpt) (O1 byte, err error)
-	EchoUint32(ctx *context.T, I1 uint32, opts ...ipc.CallOpt) (O1 uint32, err error)
-	EchoUint64(ctx *context.T, I1 uint64, opts ...ipc.CallOpt) (O1 uint64, err error)
+	EchoBool(ctx *context.T, I1 bool, opts ...rpc.CallOpt) (O1 bool, err error)
+	EchoFloat32(ctx *context.T, I1 float32, opts ...rpc.CallOpt) (O1 float32, err error)
+	EchoFloat64(ctx *context.T, I1 float64, opts ...rpc.CallOpt) (O1 float64, err error)
+	EchoInt32(ctx *context.T, I1 int32, opts ...rpc.CallOpt) (O1 int32, err error)
+	EchoInt64(ctx *context.T, I1 int64, opts ...rpc.CallOpt) (O1 int64, err error)
+	EchoString(ctx *context.T, I1 string, opts ...rpc.CallOpt) (O1 string, err error)
+	EchoByte(ctx *context.T, I1 byte, opts ...rpc.CallOpt) (O1 byte, err error)
+	EchoUint32(ctx *context.T, I1 uint32, opts ...rpc.CallOpt) (O1 uint32, err error)
+	EchoUint64(ctx *context.T, I1 uint64, opts ...rpc.CallOpt) (O1 uint64, err error)
 	// Methods to test support for composite types.
-	XEchoArray(ctx *context.T, I1 Array2Int, opts ...ipc.CallOpt) (O1 Array2Int, err error)
-	XEchoMap(ctx *context.T, I1 map[int32]string, opts ...ipc.CallOpt) (O1 map[int32]string, err error)
-	XEchoSet(ctx *context.T, I1 map[int32]struct{}, opts ...ipc.CallOpt) (O1 map[int32]struct{}, err error)
-	XEchoSlice(ctx *context.T, I1 []int32, opts ...ipc.CallOpt) (O1 []int32, err error)
-	XEchoStruct(ctx *context.T, I1 Struct, opts ...ipc.CallOpt) (O1 Struct, err error)
+	XEchoArray(ctx *context.T, I1 Array2Int, opts ...rpc.CallOpt) (O1 Array2Int, err error)
+	XEchoMap(ctx *context.T, I1 map[int32]string, opts ...rpc.CallOpt) (O1 map[int32]string, err error)
+	XEchoSet(ctx *context.T, I1 map[int32]struct{}, opts ...rpc.CallOpt) (O1 map[int32]struct{}, err error)
+	XEchoSlice(ctx *context.T, I1 []int32, opts ...rpc.CallOpt) (O1 []int32, err error)
+	XEchoStruct(ctx *context.T, I1 Struct, opts ...rpc.CallOpt) (O1 Struct, err error)
 	// Methods to test support for different number of arguments.
-	YMultiArg(ctx *context.T, I1 int32, I2 int32, opts ...ipc.CallOpt) (O1 int32, O2 int32, err error)
-	YNoArgs(*context.T, ...ipc.CallOpt) error
+	YMultiArg(ctx *context.T, I1 int32, I2 int32, opts ...rpc.CallOpt) (O1 int32, O2 int32, err error)
+	YNoArgs(*context.T, ...rpc.CallOpt) error
 	// Methods to test support for streaming.
-	ZStream(ctx *context.T, NumStreamItems int32, StreamItem bool, opts ...ipc.CallOpt) (TypeTesterZStreamClientCall, error)
+	ZStream(ctx *context.T, NumStreamItems int32, StreamItem bool, opts ...rpc.CallOpt) (TypeTesterZStreamClientCall, error)
 }
 
 // TypeTesterClientStub adds universal methods to TypeTesterClientMethods.
 type TypeTesterClientStub interface {
 	TypeTesterClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // TypeTesterClient returns a client stub for TypeTester.
-func TypeTesterClient(name string, opts ...ipc.BindOpt) TypeTesterClientStub {
-	var client ipc.Client
+func TypeTesterClient(name string, opts ...rpc.BindOpt) TypeTesterClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -82,18 +82,18 @@
 
 type implTypeTesterClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implTypeTesterClientStub) c(ctx *context.T) ipc.Client {
+func (c implTypeTesterClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implTypeTesterClientStub) EchoBool(ctx *context.T, i0 bool, opts ...ipc.CallOpt) (o0 bool, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) EchoBool(ctx *context.T, i0 bool, opts ...rpc.CallOpt) (o0 bool, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "EchoBool", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -101,8 +101,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) EchoFloat32(ctx *context.T, i0 float32, opts ...ipc.CallOpt) (o0 float32, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) EchoFloat32(ctx *context.T, i0 float32, opts ...rpc.CallOpt) (o0 float32, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "EchoFloat32", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -110,8 +110,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) EchoFloat64(ctx *context.T, i0 float64, opts ...ipc.CallOpt) (o0 float64, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) EchoFloat64(ctx *context.T, i0 float64, opts ...rpc.CallOpt) (o0 float64, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "EchoFloat64", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -119,8 +119,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) EchoInt32(ctx *context.T, i0 int32, opts ...ipc.CallOpt) (o0 int32, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) EchoInt32(ctx *context.T, i0 int32, opts ...rpc.CallOpt) (o0 int32, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "EchoInt32", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -128,8 +128,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) EchoInt64(ctx *context.T, i0 int64, opts ...ipc.CallOpt) (o0 int64, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) EchoInt64(ctx *context.T, i0 int64, opts ...rpc.CallOpt) (o0 int64, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "EchoInt64", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -137,8 +137,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) EchoString(ctx *context.T, i0 string, opts ...ipc.CallOpt) (o0 string, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) EchoString(ctx *context.T, i0 string, opts ...rpc.CallOpt) (o0 string, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "EchoString", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -146,8 +146,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) EchoByte(ctx *context.T, i0 byte, opts ...ipc.CallOpt) (o0 byte, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) EchoByte(ctx *context.T, i0 byte, opts ...rpc.CallOpt) (o0 byte, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "EchoByte", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -155,8 +155,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) EchoUint32(ctx *context.T, i0 uint32, opts ...ipc.CallOpt) (o0 uint32, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) EchoUint32(ctx *context.T, i0 uint32, opts ...rpc.CallOpt) (o0 uint32, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "EchoUint32", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -164,8 +164,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) EchoUint64(ctx *context.T, i0 uint64, opts ...ipc.CallOpt) (o0 uint64, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) EchoUint64(ctx *context.T, i0 uint64, opts ...rpc.CallOpt) (o0 uint64, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "EchoUint64", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -173,8 +173,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) XEchoArray(ctx *context.T, i0 Array2Int, opts ...ipc.CallOpt) (o0 Array2Int, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) XEchoArray(ctx *context.T, i0 Array2Int, opts ...rpc.CallOpt) (o0 Array2Int, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "XEchoArray", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -182,8 +182,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) XEchoMap(ctx *context.T, i0 map[int32]string, opts ...ipc.CallOpt) (o0 map[int32]string, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) XEchoMap(ctx *context.T, i0 map[int32]string, opts ...rpc.CallOpt) (o0 map[int32]string, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "XEchoMap", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -191,8 +191,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) XEchoSet(ctx *context.T, i0 map[int32]struct{}, opts ...ipc.CallOpt) (o0 map[int32]struct{}, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) XEchoSet(ctx *context.T, i0 map[int32]struct{}, opts ...rpc.CallOpt) (o0 map[int32]struct{}, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "XEchoSet", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -200,8 +200,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) XEchoSlice(ctx *context.T, i0 []int32, opts ...ipc.CallOpt) (o0 []int32, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) XEchoSlice(ctx *context.T, i0 []int32, opts ...rpc.CallOpt) (o0 []int32, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "XEchoSlice", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -209,8 +209,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) XEchoStruct(ctx *context.T, i0 Struct, opts ...ipc.CallOpt) (o0 Struct, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) XEchoStruct(ctx *context.T, i0 Struct, opts ...rpc.CallOpt) (o0 Struct, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "XEchoStruct", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -218,8 +218,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) YMultiArg(ctx *context.T, i0 int32, i1 int32, opts ...ipc.CallOpt) (o0 int32, o1 int32, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) YMultiArg(ctx *context.T, i0 int32, i1 int32, opts ...rpc.CallOpt) (o0 int32, o1 int32, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "YMultiArg", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -227,8 +227,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) YNoArgs(ctx *context.T, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) YNoArgs(ctx *context.T, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "YNoArgs", nil, opts...); err != nil {
 		return
 	}
@@ -236,8 +236,8 @@
 	return
 }
 
-func (c implTypeTesterClientStub) ZStream(ctx *context.T, i0 int32, i1 bool, opts ...ipc.CallOpt) (ocall TypeTesterZStreamClientCall, err error) {
-	var call ipc.ClientCall
+func (c implTypeTesterClientStub) ZStream(ctx *context.T, i0 int32, i1 bool, opts ...rpc.CallOpt) (ocall TypeTesterZStreamClientCall, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "ZStream", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -278,7 +278,7 @@
 }
 
 type implTypeTesterZStreamClientCall struct {
-	ipc.ClientCall
+	rpc.ClientCall
 	valRecv bool
 	errRecv error
 }
@@ -320,52 +320,52 @@
 // test Signature output, which sorts methods alphabetically.
 type TypeTesterServerMethods interface {
 	// Methods to test support for primitive types.
-	EchoBool(call ipc.ServerCall, I1 bool) (O1 bool, err error)
-	EchoFloat32(call ipc.ServerCall, I1 float32) (O1 float32, err error)
-	EchoFloat64(call ipc.ServerCall, I1 float64) (O1 float64, err error)
-	EchoInt32(call ipc.ServerCall, I1 int32) (O1 int32, err error)
-	EchoInt64(call ipc.ServerCall, I1 int64) (O1 int64, err error)
-	EchoString(call ipc.ServerCall, I1 string) (O1 string, err error)
-	EchoByte(call ipc.ServerCall, I1 byte) (O1 byte, err error)
-	EchoUint32(call ipc.ServerCall, I1 uint32) (O1 uint32, err error)
-	EchoUint64(call ipc.ServerCall, I1 uint64) (O1 uint64, err error)
+	EchoBool(call rpc.ServerCall, I1 bool) (O1 bool, err error)
+	EchoFloat32(call rpc.ServerCall, I1 float32) (O1 float32, err error)
+	EchoFloat64(call rpc.ServerCall, I1 float64) (O1 float64, err error)
+	EchoInt32(call rpc.ServerCall, I1 int32) (O1 int32, err error)
+	EchoInt64(call rpc.ServerCall, I1 int64) (O1 int64, err error)
+	EchoString(call rpc.ServerCall, I1 string) (O1 string, err error)
+	EchoByte(call rpc.ServerCall, I1 byte) (O1 byte, err error)
+	EchoUint32(call rpc.ServerCall, I1 uint32) (O1 uint32, err error)
+	EchoUint64(call rpc.ServerCall, I1 uint64) (O1 uint64, err error)
 	// Methods to test support for composite types.
-	XEchoArray(call ipc.ServerCall, I1 Array2Int) (O1 Array2Int, err error)
-	XEchoMap(call ipc.ServerCall, I1 map[int32]string) (O1 map[int32]string, err error)
-	XEchoSet(call ipc.ServerCall, I1 map[int32]struct{}) (O1 map[int32]struct{}, err error)
-	XEchoSlice(call ipc.ServerCall, I1 []int32) (O1 []int32, err error)
-	XEchoStruct(call ipc.ServerCall, I1 Struct) (O1 Struct, err error)
+	XEchoArray(call rpc.ServerCall, I1 Array2Int) (O1 Array2Int, err error)
+	XEchoMap(call rpc.ServerCall, I1 map[int32]string) (O1 map[int32]string, err error)
+	XEchoSet(call rpc.ServerCall, I1 map[int32]struct{}) (O1 map[int32]struct{}, err error)
+	XEchoSlice(call rpc.ServerCall, I1 []int32) (O1 []int32, err error)
+	XEchoStruct(call rpc.ServerCall, I1 Struct) (O1 Struct, err error)
 	// Methods to test support for different number of arguments.
-	YMultiArg(call ipc.ServerCall, I1 int32, I2 int32) (O1 int32, O2 int32, err error)
-	YNoArgs(ipc.ServerCall) error
+	YMultiArg(call rpc.ServerCall, I1 int32, I2 int32) (O1 int32, O2 int32, err error)
+	YNoArgs(rpc.ServerCall) error
 	// Methods to test support for streaming.
 	ZStream(call TypeTesterZStreamServerCall, NumStreamItems int32, StreamItem bool) error
 }
 
 // TypeTesterServerStubMethods is the server interface containing
-// TypeTester methods, as expected by ipc.Server.
+// TypeTester methods, as expected by rpc.Server.
 // The only difference between this interface and TypeTesterServerMethods
 // is the streaming methods.
 type TypeTesterServerStubMethods interface {
 	// Methods to test support for primitive types.
-	EchoBool(call ipc.ServerCall, I1 bool) (O1 bool, err error)
-	EchoFloat32(call ipc.ServerCall, I1 float32) (O1 float32, err error)
-	EchoFloat64(call ipc.ServerCall, I1 float64) (O1 float64, err error)
-	EchoInt32(call ipc.ServerCall, I1 int32) (O1 int32, err error)
-	EchoInt64(call ipc.ServerCall, I1 int64) (O1 int64, err error)
-	EchoString(call ipc.ServerCall, I1 string) (O1 string, err error)
-	EchoByte(call ipc.ServerCall, I1 byte) (O1 byte, err error)
-	EchoUint32(call ipc.ServerCall, I1 uint32) (O1 uint32, err error)
-	EchoUint64(call ipc.ServerCall, I1 uint64) (O1 uint64, err error)
+	EchoBool(call rpc.ServerCall, I1 bool) (O1 bool, err error)
+	EchoFloat32(call rpc.ServerCall, I1 float32) (O1 float32, err error)
+	EchoFloat64(call rpc.ServerCall, I1 float64) (O1 float64, err error)
+	EchoInt32(call rpc.ServerCall, I1 int32) (O1 int32, err error)
+	EchoInt64(call rpc.ServerCall, I1 int64) (O1 int64, err error)
+	EchoString(call rpc.ServerCall, I1 string) (O1 string, err error)
+	EchoByte(call rpc.ServerCall, I1 byte) (O1 byte, err error)
+	EchoUint32(call rpc.ServerCall, I1 uint32) (O1 uint32, err error)
+	EchoUint64(call rpc.ServerCall, I1 uint64) (O1 uint64, err error)
 	// Methods to test support for composite types.
-	XEchoArray(call ipc.ServerCall, I1 Array2Int) (O1 Array2Int, err error)
-	XEchoMap(call ipc.ServerCall, I1 map[int32]string) (O1 map[int32]string, err error)
-	XEchoSet(call ipc.ServerCall, I1 map[int32]struct{}) (O1 map[int32]struct{}, err error)
-	XEchoSlice(call ipc.ServerCall, I1 []int32) (O1 []int32, err error)
-	XEchoStruct(call ipc.ServerCall, I1 Struct) (O1 Struct, err error)
+	XEchoArray(call rpc.ServerCall, I1 Array2Int) (O1 Array2Int, err error)
+	XEchoMap(call rpc.ServerCall, I1 map[int32]string) (O1 map[int32]string, err error)
+	XEchoSet(call rpc.ServerCall, I1 map[int32]struct{}) (O1 map[int32]struct{}, err error)
+	XEchoSlice(call rpc.ServerCall, I1 []int32) (O1 []int32, err error)
+	XEchoStruct(call rpc.ServerCall, I1 Struct) (O1 Struct, err error)
 	// Methods to test support for different number of arguments.
-	YMultiArg(call ipc.ServerCall, I1 int32, I2 int32) (O1 int32, O2 int32, err error)
-	YNoArgs(ipc.ServerCall) error
+	YMultiArg(call rpc.ServerCall, I1 int32, I2 int32) (O1 int32, O2 int32, err error)
+	YNoArgs(rpc.ServerCall) error
 	// Methods to test support for streaming.
 	ZStream(call *TypeTesterZStreamServerCallStub, NumStreamItems int32, StreamItem bool) error
 }
@@ -374,21 +374,21 @@
 type TypeTesterServerStub interface {
 	TypeTesterServerStubMethods
 	// Describe the TypeTester interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // TypeTesterServer returns a server stub for TypeTester.
 // It converts an implementation of TypeTesterServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func TypeTesterServer(impl TypeTesterServerMethods) TypeTesterServerStub {
 	stub := implTypeTesterServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -396,70 +396,70 @@
 
 type implTypeTesterServerStub struct {
 	impl TypeTesterServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implTypeTesterServerStub) EchoBool(call ipc.ServerCall, i0 bool) (bool, error) {
+func (s implTypeTesterServerStub) EchoBool(call rpc.ServerCall, i0 bool) (bool, error) {
 	return s.impl.EchoBool(call, i0)
 }
 
-func (s implTypeTesterServerStub) EchoFloat32(call ipc.ServerCall, i0 float32) (float32, error) {
+func (s implTypeTesterServerStub) EchoFloat32(call rpc.ServerCall, i0 float32) (float32, error) {
 	return s.impl.EchoFloat32(call, i0)
 }
 
-func (s implTypeTesterServerStub) EchoFloat64(call ipc.ServerCall, i0 float64) (float64, error) {
+func (s implTypeTesterServerStub) EchoFloat64(call rpc.ServerCall, i0 float64) (float64, error) {
 	return s.impl.EchoFloat64(call, i0)
 }
 
-func (s implTypeTesterServerStub) EchoInt32(call ipc.ServerCall, i0 int32) (int32, error) {
+func (s implTypeTesterServerStub) EchoInt32(call rpc.ServerCall, i0 int32) (int32, error) {
 	return s.impl.EchoInt32(call, i0)
 }
 
-func (s implTypeTesterServerStub) EchoInt64(call ipc.ServerCall, i0 int64) (int64, error) {
+func (s implTypeTesterServerStub) EchoInt64(call rpc.ServerCall, i0 int64) (int64, error) {
 	return s.impl.EchoInt64(call, i0)
 }
 
-func (s implTypeTesterServerStub) EchoString(call ipc.ServerCall, i0 string) (string, error) {
+func (s implTypeTesterServerStub) EchoString(call rpc.ServerCall, i0 string) (string, error) {
 	return s.impl.EchoString(call, i0)
 }
 
-func (s implTypeTesterServerStub) EchoByte(call ipc.ServerCall, i0 byte) (byte, error) {
+func (s implTypeTesterServerStub) EchoByte(call rpc.ServerCall, i0 byte) (byte, error) {
 	return s.impl.EchoByte(call, i0)
 }
 
-func (s implTypeTesterServerStub) EchoUint32(call ipc.ServerCall, i0 uint32) (uint32, error) {
+func (s implTypeTesterServerStub) EchoUint32(call rpc.ServerCall, i0 uint32) (uint32, error) {
 	return s.impl.EchoUint32(call, i0)
 }
 
-func (s implTypeTesterServerStub) EchoUint64(call ipc.ServerCall, i0 uint64) (uint64, error) {
+func (s implTypeTesterServerStub) EchoUint64(call rpc.ServerCall, i0 uint64) (uint64, error) {
 	return s.impl.EchoUint64(call, i0)
 }
 
-func (s implTypeTesterServerStub) XEchoArray(call ipc.ServerCall, i0 Array2Int) (Array2Int, error) {
+func (s implTypeTesterServerStub) XEchoArray(call rpc.ServerCall, i0 Array2Int) (Array2Int, error) {
 	return s.impl.XEchoArray(call, i0)
 }
 
-func (s implTypeTesterServerStub) XEchoMap(call ipc.ServerCall, i0 map[int32]string) (map[int32]string, error) {
+func (s implTypeTesterServerStub) XEchoMap(call rpc.ServerCall, i0 map[int32]string) (map[int32]string, error) {
 	return s.impl.XEchoMap(call, i0)
 }
 
-func (s implTypeTesterServerStub) XEchoSet(call ipc.ServerCall, i0 map[int32]struct{}) (map[int32]struct{}, error) {
+func (s implTypeTesterServerStub) XEchoSet(call rpc.ServerCall, i0 map[int32]struct{}) (map[int32]struct{}, error) {
 	return s.impl.XEchoSet(call, i0)
 }
 
-func (s implTypeTesterServerStub) XEchoSlice(call ipc.ServerCall, i0 []int32) ([]int32, error) {
+func (s implTypeTesterServerStub) XEchoSlice(call rpc.ServerCall, i0 []int32) ([]int32, error) {
 	return s.impl.XEchoSlice(call, i0)
 }
 
-func (s implTypeTesterServerStub) XEchoStruct(call ipc.ServerCall, i0 Struct) (Struct, error) {
+func (s implTypeTesterServerStub) XEchoStruct(call rpc.ServerCall, i0 Struct) (Struct, error) {
 	return s.impl.XEchoStruct(call, i0)
 }
 
-func (s implTypeTesterServerStub) YMultiArg(call ipc.ServerCall, i0 int32, i1 int32) (int32, int32, error) {
+func (s implTypeTesterServerStub) YMultiArg(call rpc.ServerCall, i0 int32, i1 int32) (int32, int32, error) {
 	return s.impl.YMultiArg(call, i0, i1)
 }
 
-func (s implTypeTesterServerStub) YNoArgs(call ipc.ServerCall) error {
+func (s implTypeTesterServerStub) YNoArgs(call rpc.ServerCall) error {
 	return s.impl.YNoArgs(call)
 }
 
@@ -467,159 +467,159 @@
 	return s.impl.ZStream(call, i0, i1)
 }
 
-func (s implTypeTesterServerStub) Globber() *ipc.GlobState {
+func (s implTypeTesterServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implTypeTesterServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{TypeTesterDesc}
+func (s implTypeTesterServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{TypeTesterDesc}
 }
 
 // TypeTesterDesc describes the TypeTester interface.
-var TypeTesterDesc ipc.InterfaceDesc = descTypeTester
+var TypeTesterDesc rpc.InterfaceDesc = descTypeTester
 
 // descTypeTester hides the desc to keep godoc clean.
-var descTypeTester = ipc.InterfaceDesc{
+var descTypeTester = rpc.InterfaceDesc{
 	Name:    "TypeTester",
 	PkgPath: "v.io/x/ref/cmd/vrpc/test_base",
 	Doc:     "// TypeTester methods are listed in alphabetical order, to make it easier to\n// test Signature output, which sorts methods alphabetically.",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "EchoBool",
 			Doc:  "// Methods to test support for primitive types.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // bool
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // bool
 			},
 		},
 		{
 			Name: "EchoFloat32",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // float32
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // float32
 			},
 		},
 		{
 			Name: "EchoFloat64",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // float64
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // float64
 			},
 		},
 		{
 			Name: "EchoInt32",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // int32
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // int32
 			},
 		},
 		{
 			Name: "EchoInt64",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // int64
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // int64
 			},
 		},
 		{
 			Name: "EchoString",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // string
 			},
 		},
 		{
 			Name: "EchoByte",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // byte
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // byte
 			},
 		},
 		{
 			Name: "EchoUint32",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // uint32
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // uint32
 			},
 		},
 		{
 			Name: "EchoUint64",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // uint64
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // uint64
 			},
 		},
 		{
 			Name: "XEchoArray",
 			Doc:  "// Methods to test support for composite types.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // Array2Int
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // Array2Int
 			},
 		},
 		{
 			Name: "XEchoMap",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // map[int32]string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // map[int32]string
 			},
 		},
 		{
 			Name: "XEchoSet",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // map[int32]struct{}
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // map[int32]struct{}
 			},
 		},
 		{
 			Name: "XEchoSlice",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // []int32
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // []int32
 			},
 		},
 		{
 			Name: "XEchoStruct",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // Struct
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // Struct
 			},
 		},
 		{
 			Name: "YMultiArg",
 			Doc:  "// Methods to test support for different number of arguments.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"I1", ``}, // int32
 				{"I2", ``}, // int32
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"O1", ``}, // int32
 				{"O2", ``}, // int32
 			},
@@ -630,7 +630,7 @@
 		{
 			Name: "ZStream",
 			Doc:  "// Methods to test support for streaming.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"NumStreamItems", ``}, // int32
 				{"StreamItem", ``},     // bool
 			},
@@ -651,18 +651,18 @@
 
 // TypeTesterZStreamServerCall represents the context passed to TypeTester.ZStream.
 type TypeTesterZStreamServerCall interface {
-	ipc.ServerCall
+	rpc.ServerCall
 	TypeTesterZStreamServerStream
 }
 
-// TypeTesterZStreamServerCallStub is a wrapper that converts ipc.StreamServerCall into
+// TypeTesterZStreamServerCallStub is a wrapper that converts rpc.StreamServerCall into
 // a typesafe stub that implements TypeTesterZStreamServerCall.
 type TypeTesterZStreamServerCallStub struct {
-	ipc.StreamServerCall
+	rpc.StreamServerCall
 }
 
-// Init initializes TypeTesterZStreamServerCallStub from ipc.StreamServerCall.
-func (s *TypeTesterZStreamServerCallStub) Init(call ipc.StreamServerCall) {
+// Init initializes TypeTesterZStreamServerCallStub from rpc.StreamServerCall.
+func (s *TypeTesterZStreamServerCallStub) Init(call rpc.StreamServerCall) {
 	s.StreamServerCall = call
 }
 
diff --git a/cmd/vrpc/vrpc.go b/cmd/vrpc/vrpc.go
index 1241b0b..c80d7a8 100644
--- a/cmd/vrpc/vrpc.go
+++ b/cmd/vrpc/vrpc.go
@@ -12,8 +12,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc/reserved"
 	"v.io/v23/options"
+	"v.io/v23/rpc/reserved"
 	"v.io/v23/vdl"
 	"v.io/v23/vdlroot/signature"
 	"v.io/x/lib/cmdline"
diff --git a/cmd/vrpc/vrpc_test.go b/cmd/vrpc/vrpc_test.go
index 70e4f10..74a42c8 100644
--- a/cmd/vrpc/vrpc_test.go
+++ b/cmd/vrpc/vrpc_test.go
@@ -6,7 +6,7 @@
 	"testing"
 
 	"v.io/v23"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 
 	"v.io/x/ref/cmd/vrpc/test_base"
@@ -18,82 +18,82 @@
 
 // TypeTester interface implementation
 
-func (*server) EchoBool(call ipc.ServerCall, i1 bool) (bool, error) {
+func (*server) EchoBool(call rpc.ServerCall, i1 bool) (bool, error) {
 	vlog.VI(2).Info("EchoBool(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoFloat32(call ipc.ServerCall, i1 float32) (float32, error) {
+func (*server) EchoFloat32(call rpc.ServerCall, i1 float32) (float32, error) {
 	vlog.VI(2).Info("EchoFloat32(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoFloat64(call ipc.ServerCall, i1 float64) (float64, error) {
+func (*server) EchoFloat64(call rpc.ServerCall, i1 float64) (float64, error) {
 	vlog.VI(2).Info("EchoFloat64(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoInt32(call ipc.ServerCall, i1 int32) (int32, error) {
+func (*server) EchoInt32(call rpc.ServerCall, i1 int32) (int32, error) {
 	vlog.VI(2).Info("EchoInt32(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoInt64(call ipc.ServerCall, i1 int64) (int64, error) {
+func (*server) EchoInt64(call rpc.ServerCall, i1 int64) (int64, error) {
 	vlog.VI(2).Info("EchoInt64(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoString(call ipc.ServerCall, i1 string) (string, error) {
+func (*server) EchoString(call rpc.ServerCall, i1 string) (string, error) {
 	vlog.VI(2).Info("EchoString(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoByte(call ipc.ServerCall, i1 byte) (byte, error) {
+func (*server) EchoByte(call rpc.ServerCall, i1 byte) (byte, error) {
 	vlog.VI(2).Info("EchoByte(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoUint32(call ipc.ServerCall, i1 uint32) (uint32, error) {
+func (*server) EchoUint32(call rpc.ServerCall, i1 uint32) (uint32, error) {
 	vlog.VI(2).Info("EchoUint32(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoUint64(call ipc.ServerCall, i1 uint64) (uint64, error) {
+func (*server) EchoUint64(call rpc.ServerCall, i1 uint64) (uint64, error) {
 	vlog.VI(2).Info("EchoUint64(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) XEchoArray(call ipc.ServerCall, i1 test_base.Array2Int) (test_base.Array2Int, error) {
+func (*server) XEchoArray(call rpc.ServerCall, i1 test_base.Array2Int) (test_base.Array2Int, error) {
 	vlog.VI(2).Info("XEchoArray(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) XEchoMap(call ipc.ServerCall, i1 map[int32]string) (map[int32]string, error) {
+func (*server) XEchoMap(call rpc.ServerCall, i1 map[int32]string) (map[int32]string, error) {
 	vlog.VI(2).Info("XEchoMap(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) XEchoSet(call ipc.ServerCall, i1 map[int32]struct{}) (map[int32]struct{}, error) {
+func (*server) XEchoSet(call rpc.ServerCall, i1 map[int32]struct{}) (map[int32]struct{}, error) {
 	vlog.VI(2).Info("XEchoSet(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) XEchoSlice(call ipc.ServerCall, i1 []int32) ([]int32, error) {
+func (*server) XEchoSlice(call rpc.ServerCall, i1 []int32) ([]int32, error) {
 	vlog.VI(2).Info("XEchoSlice(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) XEchoStruct(call ipc.ServerCall, i1 test_base.Struct) (test_base.Struct, error) {
+func (*server) XEchoStruct(call rpc.ServerCall, i1 test_base.Struct) (test_base.Struct, error) {
 	vlog.VI(2).Info("XEchoStruct(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) YMultiArg(call ipc.ServerCall, i1, i2 int32) (int32, int32, error) {
+func (*server) YMultiArg(call rpc.ServerCall, i1, i2 int32) (int32, int32, error) {
 	vlog.VI(2).Info("YMultiArg(%v,%v) was called.", i1, i2)
 	return i1, i2, nil
 }
 
-func (*server) YNoArgs(call ipc.ServerCall) error {
+func (*server) YNoArgs(call rpc.ServerCall) error {
 	vlog.VI(2).Info("YNoArgs() was called.")
 	return nil
 }
@@ -111,19 +111,19 @@
 	// The gctx initialized here is the global context defined in vrpc.go.
 	gctx, shutdown = test.InitForTest()
 
-	ipcServer, err := v23.NewServer(gctx)
+	rpcServer, err := v23.NewServer(gctx)
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
 		return
 	}
-	endpoints, err := ipcServer.Listen(v23.GetListenSpec(gctx))
+	endpoints, err := rpcServer.Listen(v23.GetListenSpec(gctx))
 	if err != nil {
 		t.Fatalf("Listen failed: %v", err)
 		return
 	}
 	name = endpoints[0].Name()
 	obj := test_base.TypeTesterServer(&server{})
-	if err := ipcServer.Serve("", obj, nil); err != nil {
+	if err := rpcServer.Serve("", obj, nil); err != nil {
 		t.Fatalf("Serve failed: %v", err)
 		return name, shutdown
 	}
@@ -166,7 +166,7 @@
 	ZStream(NumStreamItems int32, StreamItem bool) stream<_, bool> error
 }
 
-// Reserved methods implemented by the IPC framework.  Each method name is prefixed with a double underscore "__".
+// Reserved methods implemented by the RPC framework.  Each method name is prefixed with a double underscore "__".
 type __Reserved interface {
 	// Glob returns all entries matching the pattern.
 	__Glob(pattern string) stream<any, any> error
diff --git a/examples/rps/rpsbot/impl.go b/examples/rps/rpsbot/impl.go
index 8e3f944..3db881d 100644
--- a/examples/rps/rpsbot/impl.go
+++ b/examples/rps/rpsbot/impl.go
@@ -4,7 +4,7 @@
 	"errors"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
@@ -35,7 +35,7 @@
 	return r.scoreKeeper
 }
 
-func (r *RPS) CreateGame(call ipc.ServerCall, opts rps.GameOptions) (rps.GameId, error) {
+func (r *RPS) CreateGame(call rpc.ServerCall, opts rps.GameOptions) (rps.GameId, error) {
 	if vlog.V(1) {
 		b, _ := security.BlessingNames(call.Context(), security.CallSideRemote)
 		vlog.Infof("CreateGame %+v from %v", opts, b)
@@ -56,14 +56,14 @@
 	return r.judge.play(call, names[0], id)
 }
 
-func (r *RPS) Challenge(call ipc.ServerCall, address string, id rps.GameId, opts rps.GameOptions) error {
+func (r *RPS) Challenge(call rpc.ServerCall, address string, id rps.GameId, opts rps.GameOptions) error {
 	b, _ := security.BlessingNames(call.Context(), security.CallSideRemote)
 	vlog.VI(1).Infof("Challenge (%q, %+v, %+v) from %v", address, id, opts, b)
 	newctx, _ := vtrace.SetNewTrace(r.ctx)
 	return r.player.challenge(newctx, address, id, opts)
 }
 
-func (r *RPS) Record(call ipc.ServerCall, score rps.ScoreCard) error {
+func (r *RPS) Record(call rpc.ServerCall, score rps.ScoreCard) error {
 	b, _ := security.BlessingNames(call.Context(), security.CallSideRemote)
 	vlog.VI(1).Infof("Record (%+v) from %v", score, b)
 	return r.scoreKeeper.Record(call, score)
diff --git a/examples/rps/rpsbot/impl_test.go b/examples/rps/rpsbot/impl_test.go
index a662320..b26bdc4 100644
--- a/examples/rps/rpsbot/impl_test.go
+++ b/examples/rps/rpsbot/impl_test.go
@@ -15,7 +15,7 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/x/ref/examples/rps"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/expect"
@@ -25,7 +25,7 @@
 
 //go:generate v23 test generate
 
-var spec = ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
+var spec = rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
 
 func startRockPaperScissors(t *testing.T, ctx *context.T, mtAddress string) (*RPS, func()) {
 	ns := v23.GetNamespace(ctx)
diff --git a/examples/rps/rpsbot/scorekeeper.go b/examples/rps/rpsbot/scorekeeper.go
index bc504a6..1f7e7d7 100644
--- a/examples/rps/rpsbot/scorekeeper.go
+++ b/examples/rps/rpsbot/scorekeeper.go
@@ -1,7 +1,7 @@
 package main
 
 import (
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/examples/rps"
@@ -24,7 +24,7 @@
 	return k.numRecords.Value()
 }
 
-func (k *ScoreKeeper) Record(call ipc.ServerCall, score rps.ScoreCard) error {
+func (k *ScoreKeeper) Record(call rpc.ServerCall, score rps.ScoreCard) error {
 	b, _ := security.BlessingNames(call.Context(), security.CallSideRemote)
 	vlog.VI(1).Infof("Received ScoreCard from %v:", b)
 	vlog.VI(1).Info(common.FormatScoreCard(score))
diff --git a/examples/rps/rpsplayer/main.go b/examples/rps/rpsplayer/main.go
index 2ee461c..de34412 100644
--- a/examples/rps/rpsplayer/main.go
+++ b/examples/rps/rpsplayer/main.go
@@ -13,8 +13,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
@@ -72,7 +72,7 @@
 	return prev
 }
 
-func (i *impl) Challenge(call ipc.ServerCall, address string, id rps.GameId, opts rps.GameOptions) error {
+func (i *impl) Challenge(call rpc.ServerCall, address string, id rps.GameId, opts rps.GameOptions) error {
 	remote, _ := security.BlessingNames(call.Context(), security.CallSideRemote)
 	vlog.VI(1).Infof("Challenge (%q, %+v) from %v", address, id, remote)
 	// When setDecline(true) returns, future challenges will be declined.
diff --git a/examples/rps/rpsscorekeeper/main.go b/examples/rps/rpsscorekeeper/main.go
index 090fcf0..653baca 100644
--- a/examples/rps/rpsscorekeeper/main.go
+++ b/examples/rps/rpsscorekeeper/main.go
@@ -9,7 +9,7 @@
 	"os"
 
 	"v.io/v23"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
 
@@ -24,7 +24,7 @@
 	ch chan rps.ScoreCard
 }
 
-func (i *impl) Record(call ipc.ServerCall, score rps.ScoreCard) error {
+func (i *impl) Record(call rpc.ServerCall, score rps.ScoreCard) error {
 	b, _ := security.BlessingNames(call.Context(), security.CallSideRemote)
 	vlog.VI(1).Infof("Record (%+v) from %v", score, b)
 	i.ch <- score
diff --git a/examples/rps/service.vdl.go b/examples/rps/service.vdl.go
index 2ae4827..78b5b49 100644
--- a/examples/rps/service.vdl.go
+++ b/examples/rps/service.vdl.go
@@ -22,7 +22,7 @@
 	"io"
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/vdl"
 
 	// VDL user imports
@@ -249,22 +249,22 @@
 type JudgeClientMethods interface {
 	// CreateGame creates a new game with the given game options and returns a game
 	// identifier that can be used by the players to join the game.
-	CreateGame(ctx *context.T, Opts GameOptions, opts ...ipc.CallOpt) (GameId, error)
+	CreateGame(ctx *context.T, Opts GameOptions, opts ...rpc.CallOpt) (GameId, error)
 	// Play lets a player join an existing game and play.
-	Play(ctx *context.T, Id GameId, opts ...ipc.CallOpt) (JudgePlayClientCall, error)
+	Play(ctx *context.T, Id GameId, opts ...rpc.CallOpt) (JudgePlayClientCall, error)
 }
 
 // JudgeClientStub adds universal methods to JudgeClientMethods.
 type JudgeClientStub interface {
 	JudgeClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // JudgeClient returns a client stub for Judge.
-func JudgeClient(name string, opts ...ipc.BindOpt) JudgeClientStub {
-	var client ipc.Client
+func JudgeClient(name string, opts ...rpc.BindOpt) JudgeClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -273,18 +273,18 @@
 
 type implJudgeClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implJudgeClientStub) c(ctx *context.T) ipc.Client {
+func (c implJudgeClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implJudgeClientStub) CreateGame(ctx *context.T, i0 GameOptions, opts ...ipc.CallOpt) (o0 GameId, err error) {
-	var call ipc.ClientCall
+func (c implJudgeClientStub) CreateGame(ctx *context.T, i0 GameOptions, opts ...rpc.CallOpt) (o0 GameId, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "CreateGame", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -292,8 +292,8 @@
 	return
 }
 
-func (c implJudgeClientStub) Play(ctx *context.T, i0 GameId, opts ...ipc.CallOpt) (ocall JudgePlayClientCall, err error) {
-	var call ipc.ClientCall
+func (c implJudgeClientStub) Play(ctx *context.T, i0 GameId, opts ...rpc.CallOpt) (ocall JudgePlayClientCall, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Play", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -351,7 +351,7 @@
 }
 
 type implJudgePlayClientCall struct {
-	ipc.ClientCall
+	rpc.ClientCall
 	valRecv JudgeAction
 	errRecv error
 }
@@ -408,19 +408,19 @@
 type JudgeServerMethods interface {
 	// CreateGame creates a new game with the given game options and returns a game
 	// identifier that can be used by the players to join the game.
-	CreateGame(call ipc.ServerCall, Opts GameOptions) (GameId, error)
+	CreateGame(call rpc.ServerCall, Opts GameOptions) (GameId, error)
 	// Play lets a player join an existing game and play.
 	Play(call JudgePlayServerCall, Id GameId) (PlayResult, error)
 }
 
 // JudgeServerStubMethods is the server interface containing
-// Judge methods, as expected by ipc.Server.
+// Judge methods, as expected by rpc.Server.
 // The only difference between this interface and JudgeServerMethods
 // is the streaming methods.
 type JudgeServerStubMethods interface {
 	// CreateGame creates a new game with the given game options and returns a game
 	// identifier that can be used by the players to join the game.
-	CreateGame(call ipc.ServerCall, Opts GameOptions) (GameId, error)
+	CreateGame(call rpc.ServerCall, Opts GameOptions) (GameId, error)
 	// Play lets a player join an existing game and play.
 	Play(call *JudgePlayServerCallStub, Id GameId) (PlayResult, error)
 }
@@ -429,21 +429,21 @@
 type JudgeServerStub interface {
 	JudgeServerStubMethods
 	// Describe the Judge interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // JudgeServer returns a server stub for Judge.
 // It converts an implementation of JudgeServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func JudgeServer(impl JudgeServerMethods) JudgeServerStub {
 	stub := implJudgeServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -451,10 +451,10 @@
 
 type implJudgeServerStub struct {
 	impl JudgeServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implJudgeServerStub) CreateGame(call ipc.ServerCall, i0 GameOptions) (GameId, error) {
+func (s implJudgeServerStub) CreateGame(call rpc.ServerCall, i0 GameOptions) (GameId, error) {
 	return s.impl.CreateGame(call, i0)
 }
 
@@ -462,29 +462,29 @@
 	return s.impl.Play(call, i0)
 }
 
-func (s implJudgeServerStub) Globber() *ipc.GlobState {
+func (s implJudgeServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implJudgeServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{JudgeDesc}
+func (s implJudgeServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{JudgeDesc}
 }
 
 // JudgeDesc describes the Judge interface.
-var JudgeDesc ipc.InterfaceDesc = descJudge
+var JudgeDesc rpc.InterfaceDesc = descJudge
 
 // descJudge hides the desc to keep godoc clean.
-var descJudge = ipc.InterfaceDesc{
+var descJudge = rpc.InterfaceDesc{
 	Name:    "Judge",
 	PkgPath: "v.io/x/ref/examples/rps",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "CreateGame",
 			Doc:  "// CreateGame creates a new game with the given game options and returns a game\n// identifier that can be used by the players to join the game.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"Opts", ``}, // GameOptions
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // GameId
 			},
 			Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Write"))},
@@ -492,10 +492,10 @@
 		{
 			Name: "Play",
 			Doc:  "// Play lets a player join an existing game and play.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"Id", ``}, // GameId
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // PlayResult
 			},
 			Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Write"))},
@@ -528,20 +528,20 @@
 
 // JudgePlayServerCall represents the context passed to Judge.Play.
 type JudgePlayServerCall interface {
-	ipc.ServerCall
+	rpc.ServerCall
 	JudgePlayServerStream
 }
 
-// JudgePlayServerCallStub is a wrapper that converts ipc.StreamServerCall into
+// JudgePlayServerCallStub is a wrapper that converts rpc.StreamServerCall into
 // a typesafe stub that implements JudgePlayServerCall.
 type JudgePlayServerCallStub struct {
-	ipc.StreamServerCall
+	rpc.StreamServerCall
 	valRecv PlayerAction
 	errRecv error
 }
 
-// Init initializes JudgePlayServerCallStub from ipc.StreamServerCall.
-func (s *JudgePlayServerCallStub) Init(call ipc.StreamServerCall) {
+// Init initializes JudgePlayServerCallStub from rpc.StreamServerCall.
+func (s *JudgePlayServerCallStub) Init(call rpc.StreamServerCall) {
 	s.StreamServerCall = call
 }
 
@@ -594,20 +594,20 @@
 type PlayerClientMethods interface {
 	// Challenge is used by other players to challenge this player to a game. If
 	// the challenge is accepted, the method returns nil.
-	Challenge(ctx *context.T, Address string, Id GameId, Opts GameOptions, opts ...ipc.CallOpt) error
+	Challenge(ctx *context.T, Address string, Id GameId, Opts GameOptions, opts ...rpc.CallOpt) error
 }
 
 // PlayerClientStub adds universal methods to PlayerClientMethods.
 type PlayerClientStub interface {
 	PlayerClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // PlayerClient returns a client stub for Player.
-func PlayerClient(name string, opts ...ipc.BindOpt) PlayerClientStub {
-	var client ipc.Client
+func PlayerClient(name string, opts ...rpc.BindOpt) PlayerClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -616,18 +616,18 @@
 
 type implPlayerClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implPlayerClientStub) c(ctx *context.T) ipc.Client {
+func (c implPlayerClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implPlayerClientStub) Challenge(ctx *context.T, i0 string, i1 GameId, i2 GameOptions, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implPlayerClientStub) Challenge(ctx *context.T, i0 string, i1 GameId, i2 GameOptions, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Challenge", []interface{}{i0, i1, i2}, opts...); err != nil {
 		return
 	}
@@ -642,11 +642,11 @@
 type PlayerServerMethods interface {
 	// Challenge is used by other players to challenge this player to a game. If
 	// the challenge is accepted, the method returns nil.
-	Challenge(call ipc.ServerCall, Address string, Id GameId, Opts GameOptions) error
+	Challenge(call rpc.ServerCall, Address string, Id GameId, Opts GameOptions) error
 }
 
 // PlayerServerStubMethods is the server interface containing
-// Player methods, as expected by ipc.Server.
+// Player methods, as expected by rpc.Server.
 // There is no difference between this interface and PlayerServerMethods
 // since there are no streaming methods.
 type PlayerServerStubMethods PlayerServerMethods
@@ -655,21 +655,21 @@
 type PlayerServerStub interface {
 	PlayerServerStubMethods
 	// Describe the Player interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // PlayerServer returns a server stub for Player.
 // It converts an implementation of PlayerServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func PlayerServer(impl PlayerServerMethods) PlayerServerStub {
 	stub := implPlayerServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -677,34 +677,34 @@
 
 type implPlayerServerStub struct {
 	impl PlayerServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implPlayerServerStub) Challenge(call ipc.ServerCall, i0 string, i1 GameId, i2 GameOptions) error {
+func (s implPlayerServerStub) Challenge(call rpc.ServerCall, i0 string, i1 GameId, i2 GameOptions) error {
 	return s.impl.Challenge(call, i0, i1, i2)
 }
 
-func (s implPlayerServerStub) Globber() *ipc.GlobState {
+func (s implPlayerServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implPlayerServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{PlayerDesc}
+func (s implPlayerServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{PlayerDesc}
 }
 
 // PlayerDesc describes the Player interface.
-var PlayerDesc ipc.InterfaceDesc = descPlayer
+var PlayerDesc rpc.InterfaceDesc = descPlayer
 
 // descPlayer hides the desc to keep godoc clean.
-var descPlayer = ipc.InterfaceDesc{
+var descPlayer = rpc.InterfaceDesc{
 	Name:    "Player",
 	PkgPath: "v.io/x/ref/examples/rps",
 	Doc:     "// Player can receive challenges from other players.",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Challenge",
 			Doc:  "// Challenge is used by other players to challenge this player to a game. If\n// the challenge is accepted, the method returns nil.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"Address", ``}, // string
 				{"Id", ``},      // GameId
 				{"Opts", ``},    // GameOptions
@@ -719,20 +719,20 @@
 //
 // ScoreKeeper receives the outcome of games from Judges.
 type ScoreKeeperClientMethods interface {
-	Record(ctx *context.T, Score ScoreCard, opts ...ipc.CallOpt) error
+	Record(ctx *context.T, Score ScoreCard, opts ...rpc.CallOpt) error
 }
 
 // ScoreKeeperClientStub adds universal methods to ScoreKeeperClientMethods.
 type ScoreKeeperClientStub interface {
 	ScoreKeeperClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // ScoreKeeperClient returns a client stub for ScoreKeeper.
-func ScoreKeeperClient(name string, opts ...ipc.BindOpt) ScoreKeeperClientStub {
-	var client ipc.Client
+func ScoreKeeperClient(name string, opts ...rpc.BindOpt) ScoreKeeperClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -741,18 +741,18 @@
 
 type implScoreKeeperClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implScoreKeeperClientStub) c(ctx *context.T) ipc.Client {
+func (c implScoreKeeperClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implScoreKeeperClientStub) Record(ctx *context.T, i0 ScoreCard, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implScoreKeeperClientStub) Record(ctx *context.T, i0 ScoreCard, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Record", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -765,11 +765,11 @@
 //
 // ScoreKeeper receives the outcome of games from Judges.
 type ScoreKeeperServerMethods interface {
-	Record(call ipc.ServerCall, Score ScoreCard) error
+	Record(call rpc.ServerCall, Score ScoreCard) error
 }
 
 // ScoreKeeperServerStubMethods is the server interface containing
-// ScoreKeeper methods, as expected by ipc.Server.
+// ScoreKeeper methods, as expected by rpc.Server.
 // There is no difference between this interface and ScoreKeeperServerMethods
 // since there are no streaming methods.
 type ScoreKeeperServerStubMethods ScoreKeeperServerMethods
@@ -778,21 +778,21 @@
 type ScoreKeeperServerStub interface {
 	ScoreKeeperServerStubMethods
 	// Describe the ScoreKeeper interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // ScoreKeeperServer returns a server stub for ScoreKeeper.
 // It converts an implementation of ScoreKeeperServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func ScoreKeeperServer(impl ScoreKeeperServerMethods) ScoreKeeperServerStub {
 	stub := implScoreKeeperServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -800,33 +800,33 @@
 
 type implScoreKeeperServerStub struct {
 	impl ScoreKeeperServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implScoreKeeperServerStub) Record(call ipc.ServerCall, i0 ScoreCard) error {
+func (s implScoreKeeperServerStub) Record(call rpc.ServerCall, i0 ScoreCard) error {
 	return s.impl.Record(call, i0)
 }
 
-func (s implScoreKeeperServerStub) Globber() *ipc.GlobState {
+func (s implScoreKeeperServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implScoreKeeperServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{ScoreKeeperDesc}
+func (s implScoreKeeperServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{ScoreKeeperDesc}
 }
 
 // ScoreKeeperDesc describes the ScoreKeeper interface.
-var ScoreKeeperDesc ipc.InterfaceDesc = descScoreKeeper
+var ScoreKeeperDesc rpc.InterfaceDesc = descScoreKeeper
 
 // descScoreKeeper hides the desc to keep godoc clean.
-var descScoreKeeper = ipc.InterfaceDesc{
+var descScoreKeeper = rpc.InterfaceDesc{
 	Name:    "ScoreKeeper",
 	PkgPath: "v.io/x/ref/examples/rps",
 	Doc:     "// ScoreKeeper receives the outcome of games from Judges.",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Record",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"Score", ``}, // ScoreCard
 			},
 			Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Write"))},
@@ -847,14 +847,14 @@
 // RockPaperScissorsClientStub adds universal methods to RockPaperScissorsClientMethods.
 type RockPaperScissorsClientStub interface {
 	RockPaperScissorsClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // RockPaperScissorsClient returns a client stub for RockPaperScissors.
-func RockPaperScissorsClient(name string, opts ...ipc.BindOpt) RockPaperScissorsClientStub {
-	var client ipc.Client
+func RockPaperScissorsClient(name string, opts ...rpc.BindOpt) RockPaperScissorsClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -863,14 +863,14 @@
 
 type implRockPaperScissorsClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 
 	JudgeClientStub
 	PlayerClientStub
 	ScoreKeeperClientStub
 }
 
-func (c implRockPaperScissorsClientStub) c(ctx *context.T) ipc.Client {
+func (c implRockPaperScissorsClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
@@ -888,7 +888,7 @@
 }
 
 // RockPaperScissorsServerStubMethods is the server interface containing
-// RockPaperScissors methods, as expected by ipc.Server.
+// RockPaperScissors methods, as expected by rpc.Server.
 // The only difference between this interface and RockPaperScissorsServerMethods
 // is the streaming methods.
 type RockPaperScissorsServerStubMethods interface {
@@ -903,12 +903,12 @@
 type RockPaperScissorsServerStub interface {
 	RockPaperScissorsServerStubMethods
 	// Describe the RockPaperScissors interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // RockPaperScissorsServer returns a server stub for RockPaperScissors.
 // It converts an implementation of RockPaperScissorsServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func RockPaperScissorsServer(impl RockPaperScissorsServerMethods) RockPaperScissorsServerStub {
 	stub := implRockPaperScissorsServerStub{
 		impl:                  impl,
@@ -918,9 +918,9 @@
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -931,25 +931,25 @@
 	JudgeServerStub
 	PlayerServerStub
 	ScoreKeeperServerStub
-	gs *ipc.GlobState
+	gs *rpc.GlobState
 }
 
-func (s implRockPaperScissorsServerStub) Globber() *ipc.GlobState {
+func (s implRockPaperScissorsServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implRockPaperScissorsServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{RockPaperScissorsDesc, JudgeDesc, PlayerDesc, ScoreKeeperDesc}
+func (s implRockPaperScissorsServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{RockPaperScissorsDesc, JudgeDesc, PlayerDesc, ScoreKeeperDesc}
 }
 
 // RockPaperScissorsDesc describes the RockPaperScissors interface.
-var RockPaperScissorsDesc ipc.InterfaceDesc = descRockPaperScissors
+var RockPaperScissorsDesc rpc.InterfaceDesc = descRockPaperScissors
 
 // descRockPaperScissors hides the desc to keep godoc clean.
-var descRockPaperScissors = ipc.InterfaceDesc{
+var descRockPaperScissors = rpc.InterfaceDesc{
 	Name:    "RockPaperScissors",
 	PkgPath: "v.io/x/ref/examples/rps",
-	Embeds: []ipc.EmbedDesc{
+	Embeds: []rpc.EmbedDesc{
 		{"Judge", "v.io/x/ref/examples/rps", ``},
 		{"Player", "v.io/x/ref/examples/rps", "// Player can receive challenges from other players."},
 		{"ScoreKeeper", "v.io/x/ref/examples/rps", "// ScoreKeeper receives the outcome of games from Judges."},
diff --git a/examples/tunnel/tunnel.vdl.go b/examples/tunnel/tunnel.vdl.go
index cb994d1..72006c7 100644
--- a/examples/tunnel/tunnel.vdl.go
+++ b/examples/tunnel/tunnel.vdl.go
@@ -10,7 +10,7 @@
 	"io"
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/vdl"
 
 	// VDL user imports
@@ -154,26 +154,26 @@
 	// the byte stream is forwarded to the requested network address and all the
 	// data received from that network connection is sent back in the reply
 	// stream.
-	Forward(ctx *context.T, network string, address string, opts ...ipc.CallOpt) (TunnelForwardClientCall, error)
+	Forward(ctx *context.T, network string, address string, opts ...rpc.CallOpt) (TunnelForwardClientCall, error)
 	// The Shell method is used to either run shell commands remotely, or to open
 	// an interactive shell. The data received over the byte stream is sent to the
 	// shell's stdin, and the data received from the shell's stdout and stderr is
 	// sent back in the reply stream. It returns the exit status of the shell
 	// command.
-	Shell(ctx *context.T, command string, shellOpts ShellOpts, opts ...ipc.CallOpt) (TunnelShellClientCall, error)
+	Shell(ctx *context.T, command string, shellOpts ShellOpts, opts ...rpc.CallOpt) (TunnelShellClientCall, error)
 }
 
 // TunnelClientStub adds universal methods to TunnelClientMethods.
 type TunnelClientStub interface {
 	TunnelClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // TunnelClient returns a client stub for Tunnel.
-func TunnelClient(name string, opts ...ipc.BindOpt) TunnelClientStub {
-	var client ipc.Client
+func TunnelClient(name string, opts ...rpc.BindOpt) TunnelClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -182,18 +182,18 @@
 
 type implTunnelClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implTunnelClientStub) c(ctx *context.T) ipc.Client {
+func (c implTunnelClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implTunnelClientStub) Forward(ctx *context.T, i0 string, i1 string, opts ...ipc.CallOpt) (ocall TunnelForwardClientCall, err error) {
-	var call ipc.ClientCall
+func (c implTunnelClientStub) Forward(ctx *context.T, i0 string, i1 string, opts ...rpc.CallOpt) (ocall TunnelForwardClientCall, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Forward", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -201,8 +201,8 @@
 	return
 }
 
-func (c implTunnelClientStub) Shell(ctx *context.T, i0 string, i1 ShellOpts, opts ...ipc.CallOpt) (ocall TunnelShellClientCall, err error) {
-	var call ipc.ClientCall
+func (c implTunnelClientStub) Shell(ctx *context.T, i0 string, i1 ShellOpts, opts ...rpc.CallOpt) (ocall TunnelShellClientCall, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Shell", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -260,7 +260,7 @@
 }
 
 type implTunnelForwardClientCall struct {
-	ipc.ClientCall
+	rpc.ClientCall
 	valRecv []byte
 	errRecv error
 }
@@ -362,7 +362,7 @@
 }
 
 type implTunnelShellClientCall struct {
-	ipc.ClientCall
+	rpc.ClientCall
 	valRecv ServerShellPacket
 	errRecv error
 }
@@ -431,7 +431,7 @@
 }
 
 // TunnelServerStubMethods is the server interface containing
-// Tunnel methods, as expected by ipc.Server.
+// Tunnel methods, as expected by rpc.Server.
 // The only difference between this interface and TunnelServerMethods
 // is the streaming methods.
 type TunnelServerStubMethods interface {
@@ -452,21 +452,21 @@
 type TunnelServerStub interface {
 	TunnelServerStubMethods
 	// Describe the Tunnel interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // TunnelServer returns a server stub for Tunnel.
 // It converts an implementation of TunnelServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func TunnelServer(impl TunnelServerMethods) TunnelServerStub {
 	stub := implTunnelServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -474,7 +474,7 @@
 
 type implTunnelServerStub struct {
 	impl TunnelServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
 func (s implTunnelServerStub) Forward(call *TunnelForwardServerCallStub, i0 string, i1 string) error {
@@ -485,26 +485,26 @@
 	return s.impl.Shell(call, i0, i1)
 }
 
-func (s implTunnelServerStub) Globber() *ipc.GlobState {
+func (s implTunnelServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implTunnelServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{TunnelDesc}
+func (s implTunnelServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{TunnelDesc}
 }
 
 // TunnelDesc describes the Tunnel interface.
-var TunnelDesc ipc.InterfaceDesc = descTunnel
+var TunnelDesc rpc.InterfaceDesc = descTunnel
 
 // descTunnel hides the desc to keep godoc clean.
-var descTunnel = ipc.InterfaceDesc{
+var descTunnel = rpc.InterfaceDesc{
 	Name:    "Tunnel",
 	PkgPath: "v.io/x/ref/examples/tunnel",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Forward",
 			Doc:  "// The Forward method is used for network forwarding. All the data sent over\n// the byte stream is forwarded to the requested network address and all the\n// data received from that network connection is sent back in the reply\n// stream.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"network", ``}, // string
 				{"address", ``}, // string
 			},
@@ -513,11 +513,11 @@
 		{
 			Name: "Shell",
 			Doc:  "// The Shell method is used to either run shell commands remotely, or to open\n// an interactive shell. The data received over the byte stream is sent to the\n// shell's stdin, and the data received from the shell's stdout and stderr is\n// sent back in the reply stream. It returns the exit status of the shell\n// command.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"command", ``},   // string
 				{"shellOpts", ``}, // ShellOpts
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // int32
 			},
 			Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Admin"))},
@@ -550,20 +550,20 @@
 
 // TunnelForwardServerCall represents the context passed to Tunnel.Forward.
 type TunnelForwardServerCall interface {
-	ipc.ServerCall
+	rpc.ServerCall
 	TunnelForwardServerStream
 }
 
-// TunnelForwardServerCallStub is a wrapper that converts ipc.StreamServerCall into
+// TunnelForwardServerCallStub is a wrapper that converts rpc.StreamServerCall into
 // a typesafe stub that implements TunnelForwardServerCall.
 type TunnelForwardServerCallStub struct {
-	ipc.StreamServerCall
+	rpc.StreamServerCall
 	valRecv []byte
 	errRecv error
 }
 
-// Init initializes TunnelForwardServerCallStub from ipc.StreamServerCall.
-func (s *TunnelForwardServerCallStub) Init(call ipc.StreamServerCall) {
+// Init initializes TunnelForwardServerCallStub from rpc.StreamServerCall.
+func (s *TunnelForwardServerCallStub) Init(call rpc.StreamServerCall) {
 	s.StreamServerCall = call
 }
 
@@ -634,20 +634,20 @@
 
 // TunnelShellServerCall represents the context passed to Tunnel.Shell.
 type TunnelShellServerCall interface {
-	ipc.ServerCall
+	rpc.ServerCall
 	TunnelShellServerStream
 }
 
-// TunnelShellServerCallStub is a wrapper that converts ipc.StreamServerCall into
+// TunnelShellServerCallStub is a wrapper that converts rpc.StreamServerCall into
 // a typesafe stub that implements TunnelShellServerCall.
 type TunnelShellServerCallStub struct {
-	ipc.StreamServerCall
+	rpc.StreamServerCall
 	valRecv ClientShellPacket
 	errRecv error
 }
 
-// Init initializes TunnelShellServerCallStub from ipc.StreamServerCall.
-func (s *TunnelShellServerCallStub) Init(call ipc.StreamServerCall) {
+// Init initializes TunnelShellServerCallStub from rpc.StreamServerCall.
+func (s *TunnelShellServerCallStub) Init(call rpc.StreamServerCall) {
 	s.StreamServerCall = call
 }
 
diff --git a/lib/flags/flags.go b/lib/flags/flags.go
index f476016..ec618f0 100644
--- a/lib/flags/flags.go
+++ b/lib/flags/flags.go
@@ -25,7 +25,7 @@
 	// --veyron.vtrace.collect_regexp
 	Runtime FlagGroup = iota
 	// Listen identifies the flags typically required to configure
-	// ipc.ListenSpec. Namely:
+	// rpc.ListenSpec. Namely:
 	// --veyron.tcp.protocol
 	// --veyron.tcp.address
 	// --veyron.proxy
@@ -156,7 +156,7 @@
 }
 
 // ListenAddrs is the set of listen addresses captured from the command line.
-// ListenAddrs mirrors ipc.ListenAddrs.
+// ListenAddrs mirrors rpc.ListenAddrs.
 type ListenAddrs []struct {
 	Protocol, Address string
 }
diff --git a/lib/signals/signals_test.go b/lib/signals/signals_test.go
index 6445c03..0517b02 100644
--- a/lib/signals/signals_test.go
+++ b/lib/signals/signals_test.go
@@ -12,9 +12,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/mgmt"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/services/mgmt/appcycle"
 	"v.io/v23/vtrace"
 
@@ -321,7 +321,7 @@
 	ch chan<- string
 }
 
-func (c *configServer) Set(_ ipc.ServerCall, key, value string) error {
+func (c *configServer) Set(_ rpc.ServerCall, key, value string) error {
 	if key != mgmt.AppCycleManagerConfigKey {
 		return fmt.Errorf("Unexpected key: %v", key)
 	}
@@ -330,7 +330,7 @@
 
 }
 
-func createConfigServer(t *testing.T, ctx *context.T) (ipc.Server, string, <-chan string) {
+func createConfigServer(t *testing.T, ctx *context.T) (rpc.Server, string, <-chan string) {
 	server, err := v23.NewServer(ctx)
 	if err != nil {
 		t.Fatalf("Got error: %v", err)
diff --git a/lib/stats/stats_test.go b/lib/stats/stats_test.go
index 5c5a596..25aded6 100644
--- a/lib/stats/stats_test.go
+++ b/lib/stats/stats_test.go
@@ -27,17 +27,17 @@
 	now := time.Unix(1, 0)
 	counter.TimeNow = func() time.Time { return now }
 
-	a := libstats.NewInteger("ipc/test/aaa")
-	b := libstats.NewFloat("ipc/test/bbb")
-	c := libstats.NewString("ipc/test/ccc")
-	d := libstats.NewCounter("ipc/test/ddd")
+	a := libstats.NewInteger("rpc/test/aaa")
+	b := libstats.NewFloat("rpc/test/bbb")
+	c := libstats.NewString("rpc/test/ccc")
+	d := libstats.NewCounter("rpc/test/ddd")
 
 	a.Set(1)
 	b.Set(2)
 	c.Set("Hello")
 	d.Set(4)
 
-	got, err := libstats.Value("ipc/test/aaa")
+	got, err := libstats.Value("rpc/test/aaa")
 	if err != nil {
 		t.Errorf("unexpected error: %v", err)
 	}
@@ -91,53 +91,53 @@
 		libstats.KeyValue{Key: "", Value: int64(42)},
 		libstats.KeyValue{Key: "foo", Value: int64(55)},
 		libstats.KeyValue{Key: "foo/bar", Value: int64(44)},
-		libstats.KeyValue{Key: "ipc/test/aaa", Value: int64(1)},
-		libstats.KeyValue{Key: "ipc/test/bbb", Value: float64(2)},
-		libstats.KeyValue{Key: "ipc/test/ccc", Value: string("Hello")},
-		libstats.KeyValue{Key: "ipc/test/ddd", Value: int64(4)},
-		libstats.KeyValue{Key: "ipc/test/ddd/delta10m", Value: int64(4)},
-		libstats.KeyValue{Key: "ipc/test/ddd/delta1h", Value: int64(4)},
-		libstats.KeyValue{Key: "ipc/test/ddd/delta1m", Value: int64(4)},
-		libstats.KeyValue{Key: "ipc/test/ddd/rate10m", Value: float64(0)},
-		libstats.KeyValue{Key: "ipc/test/ddd/rate1h", Value: float64(0)},
-		libstats.KeyValue{Key: "ipc/test/ddd/rate1m", Value: float64(0)},
+		libstats.KeyValue{Key: "rpc/test/aaa", Value: int64(1)},
+		libstats.KeyValue{Key: "rpc/test/bbb", Value: float64(2)},
+		libstats.KeyValue{Key: "rpc/test/ccc", Value: string("Hello")},
+		libstats.KeyValue{Key: "rpc/test/ddd", Value: int64(4)},
+		libstats.KeyValue{Key: "rpc/test/ddd/delta10m", Value: int64(4)},
+		libstats.KeyValue{Key: "rpc/test/ddd/delta1h", Value: int64(4)},
+		libstats.KeyValue{Key: "rpc/test/ddd/delta1m", Value: int64(4)},
+		libstats.KeyValue{Key: "rpc/test/ddd/rate10m", Value: float64(0)},
+		libstats.KeyValue{Key: "rpc/test/ddd/rate1h", Value: float64(0)},
+		libstats.KeyValue{Key: "rpc/test/ddd/rate1m", Value: float64(0)},
 	}
 	if !reflect.DeepEqual(result, expected) {
 		t.Errorf("unexpected result. Got %#v, want %#v", result, expected)
 	}
 
-	result, err = doGlob("", "ipc/test/*", now, true)
+	result, err = doGlob("", "rpc/test/*", now, true)
 	if err != nil {
 		t.Errorf("unexpected error: %v", err)
 	}
 	expected = []libstats.KeyValue{
-		libstats.KeyValue{Key: "ipc/test/aaa", Value: int64(1)},
-		libstats.KeyValue{Key: "ipc/test/bbb", Value: float64(2)},
-		libstats.KeyValue{Key: "ipc/test/ccc", Value: string("Hello")},
-		libstats.KeyValue{Key: "ipc/test/ddd", Value: int64(4)},
+		libstats.KeyValue{Key: "rpc/test/aaa", Value: int64(1)},
+		libstats.KeyValue{Key: "rpc/test/bbb", Value: float64(2)},
+		libstats.KeyValue{Key: "rpc/test/ccc", Value: string("Hello")},
+		libstats.KeyValue{Key: "rpc/test/ddd", Value: int64(4)},
 	}
 	if !reflect.DeepEqual(result, expected) {
 		t.Errorf("unexpected result. Got %#v, want %#v", result, expected)
 	}
 
 	// Glob showing all nodes without values
-	result, err = doGlob("", "ipc/...", time.Time{}, false)
+	result, err = doGlob("", "rpc/...", time.Time{}, false)
 	if err != nil {
 		t.Errorf("unexpected error: %v", err)
 	}
 	expected = []libstats.KeyValue{
-		libstats.KeyValue{Key: "ipc"},
-		libstats.KeyValue{Key: "ipc/test"},
-		libstats.KeyValue{Key: "ipc/test/aaa"},
-		libstats.KeyValue{Key: "ipc/test/bbb"},
-		libstats.KeyValue{Key: "ipc/test/ccc"},
-		libstats.KeyValue{Key: "ipc/test/ddd"},
-		libstats.KeyValue{Key: "ipc/test/ddd/delta10m"},
-		libstats.KeyValue{Key: "ipc/test/ddd/delta1h"},
-		libstats.KeyValue{Key: "ipc/test/ddd/delta1m"},
-		libstats.KeyValue{Key: "ipc/test/ddd/rate10m"},
-		libstats.KeyValue{Key: "ipc/test/ddd/rate1h"},
-		libstats.KeyValue{Key: "ipc/test/ddd/rate1m"},
+		libstats.KeyValue{Key: "rpc"},
+		libstats.KeyValue{Key: "rpc/test"},
+		libstats.KeyValue{Key: "rpc/test/aaa"},
+		libstats.KeyValue{Key: "rpc/test/bbb"},
+		libstats.KeyValue{Key: "rpc/test/ccc"},
+		libstats.KeyValue{Key: "rpc/test/ddd"},
+		libstats.KeyValue{Key: "rpc/test/ddd/delta10m"},
+		libstats.KeyValue{Key: "rpc/test/ddd/delta1h"},
+		libstats.KeyValue{Key: "rpc/test/ddd/delta1m"},
+		libstats.KeyValue{Key: "rpc/test/ddd/rate10m"},
+		libstats.KeyValue{Key: "rpc/test/ddd/rate1h"},
+		libstats.KeyValue{Key: "rpc/test/ddd/rate1m"},
 	}
 	if !reflect.DeepEqual(result, expected) {
 		t.Errorf("unexpected result. Got %#v, want %#v", result, expected)
@@ -146,24 +146,24 @@
 	// Test the rate counter.
 	now = now.Add(10 * time.Second)
 	d.Incr(100)
-	result, err = doGlob("", "ipc/test/ddd/*", now, true)
+	result, err = doGlob("", "rpc/test/ddd/*", now, true)
 	if err != nil {
 		t.Errorf("unexpected error: %v", err)
 	}
 	expected = []libstats.KeyValue{
-		libstats.KeyValue{Key: "ipc/test/ddd/delta10m", Value: int64(104)},
-		libstats.KeyValue{Key: "ipc/test/ddd/delta1h", Value: int64(104)},
-		libstats.KeyValue{Key: "ipc/test/ddd/delta1m", Value: int64(104)},
-		libstats.KeyValue{Key: "ipc/test/ddd/rate10m", Value: float64(10.4)},
-		libstats.KeyValue{Key: "ipc/test/ddd/rate1h", Value: float64(0)},
-		libstats.KeyValue{Key: "ipc/test/ddd/rate1m", Value: float64(10.4)},
+		libstats.KeyValue{Key: "rpc/test/ddd/delta10m", Value: int64(104)},
+		libstats.KeyValue{Key: "rpc/test/ddd/delta1h", Value: int64(104)},
+		libstats.KeyValue{Key: "rpc/test/ddd/delta1m", Value: int64(104)},
+		libstats.KeyValue{Key: "rpc/test/ddd/rate10m", Value: float64(10.4)},
+		libstats.KeyValue{Key: "rpc/test/ddd/rate1h", Value: float64(0)},
+		libstats.KeyValue{Key: "rpc/test/ddd/rate1m", Value: float64(10.4)},
 	}
 	if !reflect.DeepEqual(result, expected) {
 		t.Errorf("unexpected result. Got %#v, want %#v", result, expected)
 	}
 
 	// Test Glob on non-root object.
-	result, err = doGlob("ipc/test", "*", time.Time{}, true)
+	result, err = doGlob("rpc/test", "*", time.Time{}, true)
 	if err != nil {
 		t.Errorf("unexpected error: %v", err)
 	}
@@ -177,7 +177,7 @@
 		t.Errorf("unexpected result. Got %#v, want %#v", result, expected)
 	}
 
-	result, err = doGlob("ipc/test/aaa", "", time.Time{}, true)
+	result, err = doGlob("rpc/test/aaa", "", time.Time{}, true)
 	if err != nil {
 		t.Errorf("unexpected error: %v", err)
 	}
@@ -189,7 +189,7 @@
 	}
 
 	// Test LastUpdate. The test only works on Counters.
-	result, err = doGlob("ipc/test", "ddd", now, true)
+	result, err = doGlob("rpc/test", "ddd", now, true)
 	if err != nil {
 		t.Errorf("unexpected error: %v", err)
 	}
@@ -200,7 +200,7 @@
 		t.Errorf("unexpected result. Got %#v, want %#v", result, expected)
 	}
 
-	result, err = doGlob("ipc/test", "ddd", now.Add(time.Second), true)
+	result, err = doGlob("rpc/test", "ddd", now.Add(time.Second), true)
 	if err != nil {
 		t.Errorf("unexpected error: %v", err)
 	}
@@ -210,17 +210,17 @@
 	}
 
 	// Test histogram
-	h := libstats.NewHistogram("ipc/test/hhh", histogram.Options{NumBuckets: 5, GrowthFactor: 0})
+	h := libstats.NewHistogram("rpc/test/hhh", histogram.Options{NumBuckets: 5, GrowthFactor: 0})
 	h.Add(1)
 	h.Add(2)
 
-	result, err = doGlob("", "ipc/test/hhh", now, true)
+	result, err = doGlob("", "rpc/test/hhh", now, true)
 	if err != nil {
 		t.Errorf("unexpected error: %v", err)
 	}
 	expected = []libstats.KeyValue{
 		libstats.KeyValue{
-			Key: "ipc/test/hhh",
+			Key: "rpc/test/hhh",
 			Value: istats.HistogramValue{
 				Count: 2,
 				Sum:   3,
@@ -245,13 +245,13 @@
 	now = now.Add(30 * time.Second)
 	h.Add(3)
 
-	result, err = doGlob("", "ipc/test/hhh/delta1m", now, true)
+	result, err = doGlob("", "rpc/test/hhh/delta1m", now, true)
 	if err != nil {
 		t.Errorf("unexpected error: %v", err)
 	}
 	expected = []libstats.KeyValue{
 		libstats.KeyValue{
-			Key: "ipc/test/hhh/delta1m",
+			Key: "rpc/test/hhh/delta1m",
 			Value: istats.HistogramValue{
 				Count: 2,
 				Sum:   5,
diff --git a/lib/unixfd/unixfd.go b/lib/unixfd/unixfd.go
index 9dacc65..e56ba0b 100644
--- a/lib/unixfd/unixfd.go
+++ b/lib/unixfd/unixfd.go
@@ -14,13 +14,13 @@
 	"time"
 	"unsafe"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 )
 
 const Network string = "unixfd"
 
 func init() {
-	ipc.RegisterProtocol(Network, unixFDConn, unixFDListen)
+	rpc.RegisterProtocol(Network, unixFDConn, unixFDListen)
 }
 
 // singleConnListener implements net.Listener for an already-connected socket.
diff --git a/lib/vdl/codegen/golang/gen.go b/lib/vdl/codegen/golang/gen.go
index ba55d1c..8233bc6 100644
--- a/lib/vdl/codegen/golang/gen.go
+++ b/lib/vdl/codegen/golang/gen.go
@@ -304,21 +304,21 @@
 }
 
 // The first arg of every server method is a context; the type is either a typed
-// context for streams, or ipc.ServerCall for non-streams.
+// context for streams, or rpc.ServerCall for non-streams.
 func serverCallType(prefix string, data goData, iface *compile.Interface, method *compile.Method) string {
 	if isStreamingMethod(method) {
 		return prefix + uniqueName(iface, method, "ServerCall")
 	}
-	return prefix + data.Pkg("v.io/v23/ipc") + "ServerCall"
+	return prefix + data.Pkg("v.io/v23/rpc") + "ServerCall"
 }
 
 // The first arg of every server stub method is a context; the type is either a
-// typed context stub for streams, or ipc.ServerCall for non-streams.
+// typed context stub for streams, or rpc.ServerCall for non-streams.
 func serverCallStubType(prefix string, data goData, iface *compile.Interface, method *compile.Method) string {
 	if isStreamingMethod(method) {
 		return prefix + "*" + uniqueName(iface, method, "ServerCallStub")
 	}
-	return prefix + data.Pkg("v.io/v23/ipc") + "ServerCall"
+	return prefix + data.Pkg("v.io/v23/rpc") + "ServerCall"
 }
 
 // outArgsClient returns the out args of an interface method on the client,
@@ -339,7 +339,7 @@
 	if len(method.InArgs) > 0 {
 		inargs = "[]interface{}{" + argNames("&", "i", "", "", method.InArgs) + "}"
 	}
-	fmt.Fprint(&buf, "\tvar call "+data.Pkg("v.io/v23/ipc")+"ClientCall\n")
+	fmt.Fprint(&buf, "\tvar call "+data.Pkg("v.io/v23/rpc")+"ClientCall\n")
 	fmt.Fprintf(&buf, "\tif call, err = c.c(ctx).StartCall(ctx, c.name, %q, %s, opts...); err != nil {\n\t\treturn\n\t}\n", method.Name, inargs)
 	switch {
 	case isStreamingMethod(method):
@@ -454,9 +454,9 @@
 
 {{range $iface := $file.Interfaces}}
 {{$ifaceStreaming := hasStreamingMethods $iface.AllMethods}}
-{{$ipc_ := $data.Pkg "v.io/v23/ipc"}}
+{{$rpc_ := $data.Pkg "v.io/v23/rpc"}}
 {{$ctxArg := print "ctx *" ($data.Pkg "v.io/v23/context") "T"}}
-{{$optsArg := print "opts ..." $ipc_ "CallOpt"}}
+{{$optsArg := print "opts ..." $rpc_ "CallOpt"}}
 // {{$iface.Name}}ClientMethods is the client interface
 // containing {{$iface.Name}} methods.
 {{docBreak $iface.Doc}}type {{$iface.Name}}ClientMethods interface { {{range $embed := $iface.Embeds}}
@@ -467,14 +467,14 @@
 // {{$iface.Name}}ClientStub adds universal methods to {{$iface.Name}}ClientMethods.
 type {{$iface.Name}}ClientStub interface {
 	{{$iface.Name}}ClientMethods
-	{{$ipc_}}UniversalServiceMethods
+	{{$rpc_}}UniversalServiceMethods
 }
 
 // {{$iface.Name}}Client returns a client stub for {{$iface.Name}}.
-func {{$iface.Name}}Client(name string, opts ...{{$ipc_}}BindOpt) {{$iface.Name}}ClientStub {
-	var client {{$ipc_}}Client
+func {{$iface.Name}}Client(name string, opts ...{{$rpc_}}BindOpt) {{$iface.Name}}ClientStub {
+	var client {{$rpc_}}Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.({{$ipc_}}Client); ok {
+		if clientOpt, ok := opt.({{$rpc_}}Client); ok {
 			client = clientOpt
 		}
 	}
@@ -483,12 +483,12 @@
 
 type impl{{$iface.Name}}ClientStub struct {
 	name   string
-	client {{$ipc_}}Client
+	client {{$rpc_}}Client
 {{range $embed := $iface.Embeds}}
 	{{embedGo $data $embed}}ClientStub{{end}}
 }
 
-func (c impl{{$iface.Name}}ClientStub) c({{$ctxArg}}) {{$ipc_}}Client {
+func (c impl{{$iface.Name}}ClientStub) c({{$ctxArg}}) {{$rpc_}}Client {
 	if c.client != nil {
 		return c.client
 	}
@@ -560,7 +560,7 @@
 }
 
 type {{$clientCallImpl}} struct {
-	{{$ipc_}}ClientCall{{if $method.OutStream}}
+	{{$rpc_}}ClientCall{{if $method.OutStream}}
 	valRecv {{typeGo $data $method.OutStream}}
 	errRecv error{{end}}
 }
@@ -621,7 +621,7 @@
 }
 
 // {{$iface.Name}}ServerStubMethods is the server interface containing
-// {{$iface.Name}} methods, as expected by ipc.Server.{{if $ifaceStreaming}}
+// {{$iface.Name}} methods, as expected by rpc.Server.{{if $ifaceStreaming}}
 // The only difference between this interface and {{$iface.Name}}ServerMethods
 // is the streaming methods.{{else}}
 // There is no difference between this interface and {{$iface.Name}}ServerMethods
@@ -637,12 +637,12 @@
 type {{$iface.Name}}ServerStub interface {
 	{{$iface.Name}}ServerStubMethods
 	// Describe the {{$iface.Name}} interfaces.
-	Describe__() []{{$ipc_}}InterfaceDesc
+	Describe__() []{{$rpc_}}InterfaceDesc
 }
 
 // {{$iface.Name}}Server returns a server stub for {{$iface.Name}}.
 // It converts an implementation of {{$iface.Name}}ServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func {{$iface.Name}}Server(impl {{$iface.Name}}ServerMethods) {{$iface.Name}}ServerStub {
 	stub := impl{{$iface.Name}}ServerStub{
 		impl: impl,{{range $embed := $iface.Embeds}}
@@ -650,9 +650,9 @@
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := {{$ipc_}}NewGlobState(stub); gs != nil {
+	if gs := {{$rpc_}}NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := {{$ipc_}}NewGlobState(impl); gs != nil {
+	} else if gs := {{$rpc_}}NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -661,7 +661,7 @@
 type impl{{$iface.Name}}ServerStub struct {
 	impl {{$iface.Name}}ServerMethods{{range $embed := $iface.Embeds}}
 	{{embedGo $data $embed}}ServerStub{{end}}
-	gs *{{$ipc_}}GlobState
+	gs *{{$rpc_}}GlobState
 }
 
 {{range $method := $iface.Methods}}
@@ -670,33 +670,33 @@
 }
 {{end}}
 
-func (s impl{{$iface.Name}}ServerStub) Globber() *{{$ipc_}}GlobState {
+func (s impl{{$iface.Name}}ServerStub) Globber() *{{$rpc_}}GlobState {
 	return s.gs
 }
 
-func (s impl{{$iface.Name}}ServerStub) Describe__() []{{$ipc_}}InterfaceDesc {
-	return []{{$ipc_}}InterfaceDesc{ {{$iface.Name}}Desc{{range $embed := $iface.TransitiveEmbeds}}, {{embedGo $data $embed}}Desc{{end}} }
+func (s impl{{$iface.Name}}ServerStub) Describe__() []{{$rpc_}}InterfaceDesc {
+	return []{{$rpc_}}InterfaceDesc{ {{$iface.Name}}Desc{{range $embed := $iface.TransitiveEmbeds}}, {{embedGo $data $embed}}Desc{{end}} }
 }
 
 // {{$iface.Name}}Desc describes the {{$iface.Name}} interface.
-var {{$iface.Name}}Desc {{$ipc_}}InterfaceDesc = desc{{$iface.Name}}
+var {{$iface.Name}}Desc {{$rpc_}}InterfaceDesc = desc{{$iface.Name}}
 
 // desc{{$iface.Name}} hides the desc to keep godoc clean.
-var desc{{$iface.Name}} = {{$ipc_}}InterfaceDesc{ {{if $iface.Name}}
+var desc{{$iface.Name}} = {{$rpc_}}InterfaceDesc{ {{if $iface.Name}}
 	Name: "{{$iface.Name}}",{{end}}{{if $iface.File.Package.Path}}
 	PkgPath: "{{$iface.File.Package.Path}}",{{end}}{{if $iface.Doc}}
 	Doc: {{quoteStripDoc $iface.Doc}},{{end}}{{if $iface.Embeds}}
-	Embeds: []{{$ipc_}}EmbedDesc{ {{range $embed := $iface.Embeds}}
+	Embeds: []{{$rpc_}}EmbedDesc{ {{range $embed := $iface.Embeds}}
 		{ "{{$embed.Name}}", "{{$embed.File.Package.Path}}", {{quoteStripDoc $embed.Doc}} },{{end}}
 	},{{end}}{{if $iface.Methods}}
-	Methods: []{{$ipc_}}MethodDesc{ {{range $method := $iface.Methods}}
+	Methods: []{{$rpc_}}MethodDesc{ {{range $method := $iface.Methods}}
 		{ {{if $method.Name}}
 			Name: "{{$method.Name}}",{{end}}{{if $method.Doc}}
 			Doc: {{quoteStripDoc $method.Doc}},{{end}}{{if $method.InArgs}}
-			InArgs: []{{$ipc_}}ArgDesc{ {{range $arg := $method.InArgs}}
+			InArgs: []{{$rpc_}}ArgDesc{ {{range $arg := $method.InArgs}}
 				{ "{{$arg.Name}}", {{quoteStripDoc $arg.Doc}} }, // {{typeGo $data $arg.Type}}{{end}}
 			},{{end}}{{if $method.OutArgs}}
-			OutArgs: []{{$ipc_}}ArgDesc{ {{range $arg := $method.OutArgs}}
+			OutArgs: []{{$rpc_}}ArgDesc{ {{range $arg := $method.OutArgs}}
 				{ "{{$arg.Name}}", {{quoteStripDoc $arg.Doc}} }, // {{typeGo $data $arg.Type}}{{end}}
 			},{{end}}{{if $method.Tags}}
 			Tags: []*{{$data.Pkg "v.io/v23/vdl"}}Value{ {{range $tag := $method.Tags}}{{tagValue $data $tag}} ,{{end}} },{{end}}
@@ -737,20 +737,20 @@
 
 // {{$serverCall}} represents the context passed to {{$iface.Name}}.{{$method.Name}}.
 type {{$serverCall}} interface {
-	{{$ipc_}}ServerCall
+	{{$rpc_}}ServerCall
 	{{$serverStream}}
 }
 
-// {{$serverCallStub}} is a wrapper that converts ipc.StreamServerCall into
+// {{$serverCallStub}} is a wrapper that converts rpc.StreamServerCall into
 // a typesafe stub that implements {{$serverCall}}.
 type {{$serverCallStub}} struct {
-	{{$ipc_}}StreamServerCall{{if $method.InStream}}
+	{{$rpc_}}StreamServerCall{{if $method.InStream}}
 	valRecv {{typeGo $data $method.InStream}}
 	errRecv error{{end}}
 }
 
-// Init initializes {{$serverCallStub}} from ipc.StreamServerCall.
-func (s *{{$serverCallStub}}) Init(call {{$ipc_}}StreamServerCall) {
+// Init initializes {{$serverCallStub}} from rpc.StreamServerCall.
+func (s *{{$serverCallStub}}) Init(call {{$rpc_}}StreamServerCall) {
 	s.StreamServerCall = call
 }
 
diff --git a/lib/vdl/codegen/golang/import.go b/lib/vdl/codegen/golang/import.go
index 558c071..e8f9f90 100644
--- a/lib/vdl/codegen/golang/import.go
+++ b/lib/vdl/codegen/golang/import.go
@@ -333,7 +333,7 @@
 	if len(file.Interfaces) > 0 {
 		system["v.io/v23"] = "v23"
 		system["v.io/v23/context"] = "context"
-		system["v.io/v23/ipc"] = "ipc"
+		system["v.io/v23/rpc"] = "rpc"
 	}
 	if deps.streamingMethods {
 		system["io"] = "io"
diff --git a/lib/vdl/codegen/java/file_client_factory.go b/lib/vdl/codegen/java/file_client_factory.go
index d7e90db..1251bb2 100644
--- a/lib/vdl/codegen/java/file_client_factory.go
+++ b/lib/vdl/codegen/java/file_client_factory.go
@@ -18,9 +18,9 @@
         return bind(name, null);
     }
     public static {{ .ServiceName }}Client bind(final java.lang.String name, final io.v.v23.Options veyronOpts) {
-        io.v.v23.ipc.Client client = null;
+        io.v.v23.rpc.Client client = null;
         if (veyronOpts != null && veyronOpts.get(io.v.v23.OptionDefs.CLIENT) != null) {
-            client = veyronOpts.get(io.v.v23.OptionDefs.CLIENT, io.v.v23.ipc.Client.class);
+            client = veyronOpts.get(io.v.v23.OptionDefs.CLIENT, io.v.v23.rpc.Client.class);
         }
         return new {{ .StubName }}(client, name);
     }
diff --git a/lib/vdl/codegen/java/file_client_stub.go b/lib/vdl/codegen/java/file_client_stub.go
index 0b9a82a..b820015 100644
--- a/lib/vdl/codegen/java/file_client_stub.go
+++ b/lib/vdl/codegen/java/file_client_stub.go
@@ -15,7 +15,7 @@
 
 /* Client stub for interface: {{ .ServiceName }}Client. */
 {{ .AccessModifier }} final class {{ .ServiceName }}ClientStub implements {{ .FullServiceName }}Client {
-    private final io.v.v23.ipc.Client client;
+    private final io.v.v23.rpc.Client client;
     private final java.lang.String veyronName;
 
     {{/* Define fields to hold each of the embedded object stubs*/}}
@@ -24,7 +24,7 @@
     private final {{ $embed.StubClassName }} {{ $embed.LocalStubVarName }};
     {{ end }}
 
-    public {{ .ServiceName }}ClientStub(final io.v.v23.ipc.Client client, final java.lang.String veyronName) {
+    public {{ .ServiceName }}ClientStub(final io.v.v23.rpc.Client client, final java.lang.String veyronName) {
         this.client = client;
         this.veyronName = veyronName;
         {{/* Initialize the embeded stubs */}}
@@ -33,7 +33,7 @@
          {{ end }}
     }
 
-    private io.v.v23.ipc.Client getClient(io.v.v23.context.VContext context) {
+    private io.v.v23.rpc.Client getClient(io.v.v23.context.VContext context) {
         return this.client != null ? client : io.v.v23.V.getClient(context);
 
     }
@@ -41,20 +41,20 @@
     // Methods from interface UniversalServiceMethods.
     // TODO(spetrovic): Re-enable once we can import the new Signature classes.
     //@Override
-    //public io.v.v23.ipc.ServiceSignature getSignature(io.v.v23.context.VContext context) throws io.v.v23.verror.VException {
+    //public io.v.v23.rpc.ServiceSignature getSignature(io.v.v23.context.VContext context) throws io.v.v23.verror.VException {
     //    return getSignature(context, null);
     //}
     //@Override
-    //public io.v.v23.ipc.ServiceSignature getSignature(io.v.v23.context.VContext context, io.v.v23.Options veyronOpts) throws io.v.v23.verror.VException {
+    //public io.v.v23.rpc.ServiceSignature getSignature(io.v.v23.context.VContext context, io.v.v23.Options veyronOpts) throws io.v.v23.verror.VException {
     //    // Start the call.
-    //    final io.v.v23.ipc.Client.Call _call = getClient(context).startCall(context, this.veyronName, "signature", new java.lang.Object[0], new java.lang.reflect.Type[0], veyronOpts);
+    //    final io.v.v23.rpc.Client.Call _call = getClient(context).startCall(context, this.veyronName, "signature", new java.lang.Object[0], new java.lang.reflect.Type[0], veyronOpts);
 
     //    // Finish the call.
     //    final java.lang.reflect.Type[] _resultTypes = new java.lang.reflect.Type[]{
-    //        new com.google.common.reflect.TypeToken<io.v.v23.ipc.ServiceSignature>() {}.getType(),
+    //        new com.google.common.reflect.TypeToken<io.v.v23.rpc.ServiceSignature>() {}.getType(),
     //    };
     //    final java.lang.Object[] _results = _call.finish(_resultTypes);
-    //    return (io.v.v23.ipc.ServiceSignature)_results[0];
+    //    return (io.v.v23.rpc.ServiceSignature)_results[0];
     //}
 
     // Methods from interface {{ .ServiceName }}Client.
@@ -72,7 +72,7 @@
         // Start the call.
         final java.lang.Object[] _args = new java.lang.Object[]{ {{ $method.CallingArgs }} };
         final java.lang.reflect.Type[] _argTypes = new java.lang.reflect.Type[]{ {{ $method.CallingArgTypes }} };
-        final io.v.v23.ipc.Client.Call _call = getClient(context).startCall(context, this.veyronName, "{{ $method.Name }}", _args, _argTypes, veyronOpts);
+        final io.v.v23.rpc.Client.Call _call = getClient(context).startCall(context, this.veyronName, "{{ $method.Name }}", _args, _argTypes, veyronOpts);
 
         // Finish the call.
         {{/* Now handle returning from the function. */}}
diff --git a/lib/vdl/codegen/java/file_server_interface.go b/lib/vdl/codegen/java/file_server_interface.go
index 28f9afb..aeec6e0 100644
--- a/lib/vdl/codegen/java/file_server_interface.go
+++ b/lib/vdl/codegen/java/file_server_interface.go
@@ -22,7 +22,7 @@
 {{ range $method := .Methods }}
     {{/* Generate the method signature. */}}
     {{ $method.Doc }}
-    {{ $method.AccessModifier }} {{ $method.RetType }} {{ $method.Name }}(final io.v.v23.ipc.ServerCall call{{ $method.Args }}) throws io.v.v23.verror.VException;
+    {{ $method.AccessModifier }} {{ $method.RetType }} {{ $method.Name }}(final io.v.v23.rpc.ServerCall call{{ $method.Args }}) throws io.v.v23.verror.VException;
 {{ end }}
 }
 `
diff --git a/lib/vdl/codegen/java/file_server_wrapper.go b/lib/vdl/codegen/java/file_server_wrapper.go
index 318e444..cc975b4 100644
--- a/lib/vdl/codegen/java/file_server_wrapper.go
+++ b/lib/vdl/codegen/java/file_server_wrapper.go
@@ -71,7 +71,7 @@
      * by this server.
      */
     @SuppressWarnings("unused")
-    public io.v.v23.vdl.VdlValue[] getMethodTags(final io.v.v23.ipc.StreamServerCall call, final java.lang.String method) throws io.v.v23.verror.VException {
+    public io.v.v23.vdl.VdlValue[] getMethodTags(final io.v.v23.rpc.StreamServerCall call, final java.lang.String method) throws io.v.v23.verror.VException {
         {{ range $methodName, $tags := .MethodTags }}
         if ("{{ $methodName }}".equals(method)) {
             try {
@@ -96,7 +96,7 @@
 
      {{/* Iterate over methods defined directly in the body of this server */}}
     {{ range $method := .Methods }}
-    {{ $method.AccessModifier }} {{ $method.RetType }} {{ $method.Name }}(final io.v.v23.ipc.StreamServerCall call{{ $method.DeclarationArgs }}) throws io.v.v23.verror.VException {
+    {{ $method.AccessModifier }} {{ $method.RetType }} {{ $method.Name }}(final io.v.v23.rpc.StreamServerCall call{{ $method.DeclarationArgs }}) throws io.v.v23.verror.VException {
         {{ if $method.IsStreaming }}
         final io.v.v23.vdl.Stream<{{ $method.SendType }}, {{ $method.RecvType }}> _stream = new io.v.v23.vdl.Stream<{{ $method.SendType }}, {{ $method.RecvType }}>() {
             @Override
@@ -122,7 +122,7 @@
 
 {{/* Iterate over methods from embeded servers and generate code to delegate the work */}}
 {{ range $eMethod := .EmbedMethods }}
-    {{ $eMethod.AccessModifier }} {{ $eMethod.RetType }} {{ $eMethod.Name }}(final io.v.v23.ipc.StreamServerCall call{{ $eMethod.DeclarationArgs }}) throws io.v.v23.verror.VException {
+    {{ $eMethod.AccessModifier }} {{ $eMethod.RetType }} {{ $eMethod.Name }}(final io.v.v23.rpc.StreamServerCall call{{ $eMethod.DeclarationArgs }}) throws io.v.v23.verror.VException {
         {{/* e.g. return this.stubArith.cosine(call, [args], options) */}}
         {{ if $eMethod.Returns }}return{{ end }}  this.{{ $eMethod.LocalWrapperVarName }}.{{ $eMethod.Name }}(call{{ $eMethod.CallingArgs }});
     }
diff --git a/lib/vdl/codegen/java/util_interface.go b/lib/vdl/codegen/java/util_interface.go
index 9735b4d..4ac709b 100644
--- a/lib/vdl/codegen/java/util_interface.go
+++ b/lib/vdl/codegen/java/util_interface.go
@@ -40,7 +40,7 @@
 		buf.WriteString("Client")
 		buf.WriteString(", ")
 	}
-	buf.WriteString("io.v.v23.ipc.UniversalServiceMethods")
+	buf.WriteString("io.v.v23.rpc.UniversalServiceMethods")
 	return buf.String()
 }
 
diff --git a/lib/vdl/codegen/javascript/gen.go b/lib/vdl/codegen/javascript/gen.go
index 3680efc..7e21031 100644
--- a/lib/vdl/codegen/javascript/gen.go
+++ b/lib/vdl/codegen/javascript/gen.go
@@ -439,7 +439,7 @@
   embeds: {{generateEmbeds $iface.Embeds}},
   methods: [
     {{range $method := $iface.AllMethods}}
-      {{/* Each method signature contains the information in ipc.MethodSig. */}}
+      {{/* Each method signature contains the information in rpc.MethodSig. */}}
     {{generateMethodSignature $method $data.TypeNames}},
     {{end}} {{/*end range $iface.AllMethods*/}}
   ]
diff --git a/lib/vdl/testdata/arith/advanced.vdl.go b/lib/vdl/testdata/arith/advanced.vdl.go
index 0490f67..2d5bbf4 100644
--- a/lib/vdl/testdata/arith/advanced.vdl.go
+++ b/lib/vdl/testdata/arith/advanced.vdl.go
@@ -7,7 +7,7 @@
 	// VDL system imports
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 
 	// VDL user imports
 	"v.io/x/ref/lib/vdl/testdata/arith/exp"
@@ -18,21 +18,21 @@
 //
 // Trigonometry is an interface that specifies a couple trigonometric functions.
 type TrigonometryClientMethods interface {
-	Sine(ctx *context.T, angle float64, opts ...ipc.CallOpt) (float64, error)
-	Cosine(ctx *context.T, angle float64, opts ...ipc.CallOpt) (float64, error)
+	Sine(ctx *context.T, angle float64, opts ...rpc.CallOpt) (float64, error)
+	Cosine(ctx *context.T, angle float64, opts ...rpc.CallOpt) (float64, error)
 }
 
 // TrigonometryClientStub adds universal methods to TrigonometryClientMethods.
 type TrigonometryClientStub interface {
 	TrigonometryClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // TrigonometryClient returns a client stub for Trigonometry.
-func TrigonometryClient(name string, opts ...ipc.BindOpt) TrigonometryClientStub {
-	var client ipc.Client
+func TrigonometryClient(name string, opts ...rpc.BindOpt) TrigonometryClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -41,18 +41,18 @@
 
 type implTrigonometryClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implTrigonometryClientStub) c(ctx *context.T) ipc.Client {
+func (c implTrigonometryClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implTrigonometryClientStub) Sine(ctx *context.T, i0 float64, opts ...ipc.CallOpt) (o0 float64, err error) {
-	var call ipc.ClientCall
+func (c implTrigonometryClientStub) Sine(ctx *context.T, i0 float64, opts ...rpc.CallOpt) (o0 float64, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Sine", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -60,8 +60,8 @@
 	return
 }
 
-func (c implTrigonometryClientStub) Cosine(ctx *context.T, i0 float64, opts ...ipc.CallOpt) (o0 float64, err error) {
-	var call ipc.ClientCall
+func (c implTrigonometryClientStub) Cosine(ctx *context.T, i0 float64, opts ...rpc.CallOpt) (o0 float64, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Cosine", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -74,12 +74,12 @@
 //
 // Trigonometry is an interface that specifies a couple trigonometric functions.
 type TrigonometryServerMethods interface {
-	Sine(call ipc.ServerCall, angle float64) (float64, error)
-	Cosine(call ipc.ServerCall, angle float64) (float64, error)
+	Sine(call rpc.ServerCall, angle float64) (float64, error)
+	Cosine(call rpc.ServerCall, angle float64) (float64, error)
 }
 
 // TrigonometryServerStubMethods is the server interface containing
-// Trigonometry methods, as expected by ipc.Server.
+// Trigonometry methods, as expected by rpc.Server.
 // There is no difference between this interface and TrigonometryServerMethods
 // since there are no streaming methods.
 type TrigonometryServerStubMethods TrigonometryServerMethods
@@ -88,21 +88,21 @@
 type TrigonometryServerStub interface {
 	TrigonometryServerStubMethods
 	// Describe the Trigonometry interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // TrigonometryServer returns a server stub for Trigonometry.
 // It converts an implementation of TrigonometryServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func TrigonometryServer(impl TrigonometryServerMethods) TrigonometryServerStub {
 	stub := implTrigonometryServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -110,49 +110,49 @@
 
 type implTrigonometryServerStub struct {
 	impl TrigonometryServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implTrigonometryServerStub) Sine(call ipc.ServerCall, i0 float64) (float64, error) {
+func (s implTrigonometryServerStub) Sine(call rpc.ServerCall, i0 float64) (float64, error) {
 	return s.impl.Sine(call, i0)
 }
 
-func (s implTrigonometryServerStub) Cosine(call ipc.ServerCall, i0 float64) (float64, error) {
+func (s implTrigonometryServerStub) Cosine(call rpc.ServerCall, i0 float64) (float64, error) {
 	return s.impl.Cosine(call, i0)
 }
 
-func (s implTrigonometryServerStub) Globber() *ipc.GlobState {
+func (s implTrigonometryServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implTrigonometryServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{TrigonometryDesc}
+func (s implTrigonometryServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{TrigonometryDesc}
 }
 
 // TrigonometryDesc describes the Trigonometry interface.
-var TrigonometryDesc ipc.InterfaceDesc = descTrigonometry
+var TrigonometryDesc rpc.InterfaceDesc = descTrigonometry
 
 // descTrigonometry hides the desc to keep godoc clean.
-var descTrigonometry = ipc.InterfaceDesc{
+var descTrigonometry = rpc.InterfaceDesc{
 	Name:    "Trigonometry",
 	PkgPath: "v.io/x/ref/lib/vdl/testdata/arith",
 	Doc:     "// Trigonometry is an interface that specifies a couple trigonometric functions.",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Sine",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"angle", ``}, // float64
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // float64
 			},
 		},
 		{
 			Name: "Cosine",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"angle", ``}, // float64
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // float64
 			},
 		},
@@ -175,14 +175,14 @@
 // AdvancedMathClientStub adds universal methods to AdvancedMathClientMethods.
 type AdvancedMathClientStub interface {
 	AdvancedMathClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // AdvancedMathClient returns a client stub for AdvancedMath.
-func AdvancedMathClient(name string, opts ...ipc.BindOpt) AdvancedMathClientStub {
-	var client ipc.Client
+func AdvancedMathClient(name string, opts ...rpc.BindOpt) AdvancedMathClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -191,13 +191,13 @@
 
 type implAdvancedMathClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 
 	TrigonometryClientStub
 	exp.ExpClientStub
 }
 
-func (c implAdvancedMathClientStub) c(ctx *context.T) ipc.Client {
+func (c implAdvancedMathClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
@@ -218,7 +218,7 @@
 }
 
 // AdvancedMathServerStubMethods is the server interface containing
-// AdvancedMath methods, as expected by ipc.Server.
+// AdvancedMath methods, as expected by rpc.Server.
 // There is no difference between this interface and AdvancedMathServerMethods
 // since there are no streaming methods.
 type AdvancedMathServerStubMethods AdvancedMathServerMethods
@@ -227,12 +227,12 @@
 type AdvancedMathServerStub interface {
 	AdvancedMathServerStubMethods
 	// Describe the AdvancedMath interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // AdvancedMathServer returns a server stub for AdvancedMath.
 // It converts an implementation of AdvancedMathServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func AdvancedMathServer(impl AdvancedMathServerMethods) AdvancedMathServerStub {
 	stub := implAdvancedMathServerStub{
 		impl: impl,
@@ -241,9 +241,9 @@
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -253,26 +253,26 @@
 	impl AdvancedMathServerMethods
 	TrigonometryServerStub
 	exp.ExpServerStub
-	gs *ipc.GlobState
+	gs *rpc.GlobState
 }
 
-func (s implAdvancedMathServerStub) Globber() *ipc.GlobState {
+func (s implAdvancedMathServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implAdvancedMathServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{AdvancedMathDesc, TrigonometryDesc, exp.ExpDesc}
+func (s implAdvancedMathServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{AdvancedMathDesc, TrigonometryDesc, exp.ExpDesc}
 }
 
 // AdvancedMathDesc describes the AdvancedMath interface.
-var AdvancedMathDesc ipc.InterfaceDesc = descAdvancedMath
+var AdvancedMathDesc rpc.InterfaceDesc = descAdvancedMath
 
 // descAdvancedMath hides the desc to keep godoc clean.
-var descAdvancedMath = ipc.InterfaceDesc{
+var descAdvancedMath = rpc.InterfaceDesc{
 	Name:    "AdvancedMath",
 	PkgPath: "v.io/x/ref/lib/vdl/testdata/arith",
 	Doc:     "// AdvancedMath is an interface for more advanced math than arith.  It embeds\n// interfaces defined both in the same file and in an external package; and in\n// turn it is embedded by arith.Calculator (which is in the same package but\n// different file) to verify that embedding works in all these scenarios.",
-	Embeds: []ipc.EmbedDesc{
+	Embeds: []rpc.EmbedDesc{
 		{"Trigonometry", "v.io/x/ref/lib/vdl/testdata/arith", "// Trigonometry is an interface that specifies a couple trigonometric functions."},
 		{"Exp", "v.io/x/ref/lib/vdl/testdata/arith/exp", ``},
 	},
diff --git a/lib/vdl/testdata/arith/arith.vdl.go b/lib/vdl/testdata/arith/arith.vdl.go
index a1c1c29..7e3cb39 100644
--- a/lib/vdl/testdata/arith/arith.vdl.go
+++ b/lib/vdl/testdata/arith/arith.vdl.go
@@ -31,7 +31,7 @@
 	"io"
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/vdl"
 
 	// VDL user imports
@@ -68,38 +68,38 @@
 //   * There must be at least 1 out-arg, and the last out-arg must be error.
 type ArithClientMethods interface {
 	// Add is a typical method with multiple input and output arguments.
-	Add(ctx *context.T, a int32, b int32, opts ...ipc.CallOpt) (int32, error)
+	Add(ctx *context.T, a int32, b int32, opts ...rpc.CallOpt) (int32, error)
 	// DivMod shows that runs of args with the same type can use the short form,
 	// just like Go.
-	DivMod(ctx *context.T, a int32, b int32, opts ...ipc.CallOpt) (quot int32, rem int32, err error)
+	DivMod(ctx *context.T, a int32, b int32, opts ...rpc.CallOpt) (quot int32, rem int32, err error)
 	// Sub shows that you can use data types defined in other packages.
-	Sub(ctx *context.T, args base.Args, opts ...ipc.CallOpt) (int32, error)
+	Sub(ctx *context.T, args base.Args, opts ...rpc.CallOpt) (int32, error)
 	// Mul tries another data type defined in another package.
-	Mul(ctx *context.T, nested base.NestedArgs, opts ...ipc.CallOpt) (int32, error)
+	Mul(ctx *context.T, nested base.NestedArgs, opts ...rpc.CallOpt) (int32, error)
 	// GenError shows that it's fine to have no in args, and no out args other
 	// than "error".  In addition GenError shows the usage of tags.  Tags are a
 	// sequence of constants.  There's no requirement on uniqueness of types or
 	// values, and regular const expressions may also be used.
-	GenError(*context.T, ...ipc.CallOpt) error
+	GenError(*context.T, ...rpc.CallOpt) error
 	// Count shows using only an int32 out-stream type, with no in-stream type.
-	Count(ctx *context.T, start int32, opts ...ipc.CallOpt) (ArithCountClientCall, error)
+	Count(ctx *context.T, start int32, opts ...rpc.CallOpt) (ArithCountClientCall, error)
 	// StreamingAdd shows a bidirectional stream.
-	StreamingAdd(*context.T, ...ipc.CallOpt) (ArithStreamingAddClientCall, error)
+	StreamingAdd(*context.T, ...rpc.CallOpt) (ArithStreamingAddClientCall, error)
 	// QuoteAny shows the any built-in type, representing a value of any type.
-	QuoteAny(ctx *context.T, a *vdl.Value, opts ...ipc.CallOpt) (*vdl.Value, error)
+	QuoteAny(ctx *context.T, a *vdl.Value, opts ...rpc.CallOpt) (*vdl.Value, error)
 }
 
 // ArithClientStub adds universal methods to ArithClientMethods.
 type ArithClientStub interface {
 	ArithClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // ArithClient returns a client stub for Arith.
-func ArithClient(name string, opts ...ipc.BindOpt) ArithClientStub {
-	var client ipc.Client
+func ArithClient(name string, opts ...rpc.BindOpt) ArithClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -108,18 +108,18 @@
 
 type implArithClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implArithClientStub) c(ctx *context.T) ipc.Client {
+func (c implArithClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implArithClientStub) Add(ctx *context.T, i0 int32, i1 int32, opts ...ipc.CallOpt) (o0 int32, err error) {
-	var call ipc.ClientCall
+func (c implArithClientStub) Add(ctx *context.T, i0 int32, i1 int32, opts ...rpc.CallOpt) (o0 int32, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Add", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -127,8 +127,8 @@
 	return
 }
 
-func (c implArithClientStub) DivMod(ctx *context.T, i0 int32, i1 int32, opts ...ipc.CallOpt) (o0 int32, o1 int32, err error) {
-	var call ipc.ClientCall
+func (c implArithClientStub) DivMod(ctx *context.T, i0 int32, i1 int32, opts ...rpc.CallOpt) (o0 int32, o1 int32, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "DivMod", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -136,8 +136,8 @@
 	return
 }
 
-func (c implArithClientStub) Sub(ctx *context.T, i0 base.Args, opts ...ipc.CallOpt) (o0 int32, err error) {
-	var call ipc.ClientCall
+func (c implArithClientStub) Sub(ctx *context.T, i0 base.Args, opts ...rpc.CallOpt) (o0 int32, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Sub", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -145,8 +145,8 @@
 	return
 }
 
-func (c implArithClientStub) Mul(ctx *context.T, i0 base.NestedArgs, opts ...ipc.CallOpt) (o0 int32, err error) {
-	var call ipc.ClientCall
+func (c implArithClientStub) Mul(ctx *context.T, i0 base.NestedArgs, opts ...rpc.CallOpt) (o0 int32, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Mul", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -154,8 +154,8 @@
 	return
 }
 
-func (c implArithClientStub) GenError(ctx *context.T, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implArithClientStub) GenError(ctx *context.T, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "GenError", nil, opts...); err != nil {
 		return
 	}
@@ -163,8 +163,8 @@
 	return
 }
 
-func (c implArithClientStub) Count(ctx *context.T, i0 int32, opts ...ipc.CallOpt) (ocall ArithCountClientCall, err error) {
-	var call ipc.ClientCall
+func (c implArithClientStub) Count(ctx *context.T, i0 int32, opts ...rpc.CallOpt) (ocall ArithCountClientCall, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Count", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -172,8 +172,8 @@
 	return
 }
 
-func (c implArithClientStub) StreamingAdd(ctx *context.T, opts ...ipc.CallOpt) (ocall ArithStreamingAddClientCall, err error) {
-	var call ipc.ClientCall
+func (c implArithClientStub) StreamingAdd(ctx *context.T, opts ...rpc.CallOpt) (ocall ArithStreamingAddClientCall, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "StreamingAdd", nil, opts...); err != nil {
 		return
 	}
@@ -181,8 +181,8 @@
 	return
 }
 
-func (c implArithClientStub) QuoteAny(ctx *context.T, i0 *vdl.Value, opts ...ipc.CallOpt) (o0 *vdl.Value, err error) {
-	var call ipc.ClientCall
+func (c implArithClientStub) QuoteAny(ctx *context.T, i0 *vdl.Value, opts ...rpc.CallOpt) (o0 *vdl.Value, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "QuoteAny", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -223,7 +223,7 @@
 }
 
 type implArithCountClientCall struct {
-	ipc.ClientCall
+	rpc.ClientCall
 	valRecv int32
 	errRecv error
 }
@@ -308,7 +308,7 @@
 }
 
 type implArithStreamingAddClientCall struct {
-	ipc.ClientCall
+	rpc.ClientCall
 	valRecv int32
 	errRecv error
 }
@@ -368,73 +368,73 @@
 //   * There must be at least 1 out-arg, and the last out-arg must be error.
 type ArithServerMethods interface {
 	// Add is a typical method with multiple input and output arguments.
-	Add(call ipc.ServerCall, a int32, b int32) (int32, error)
+	Add(call rpc.ServerCall, a int32, b int32) (int32, error)
 	// DivMod shows that runs of args with the same type can use the short form,
 	// just like Go.
-	DivMod(call ipc.ServerCall, a int32, b int32) (quot int32, rem int32, err error)
+	DivMod(call rpc.ServerCall, a int32, b int32) (quot int32, rem int32, err error)
 	// Sub shows that you can use data types defined in other packages.
-	Sub(call ipc.ServerCall, args base.Args) (int32, error)
+	Sub(call rpc.ServerCall, args base.Args) (int32, error)
 	// Mul tries another data type defined in another package.
-	Mul(call ipc.ServerCall, nested base.NestedArgs) (int32, error)
+	Mul(call rpc.ServerCall, nested base.NestedArgs) (int32, error)
 	// GenError shows that it's fine to have no in args, and no out args other
 	// than "error".  In addition GenError shows the usage of tags.  Tags are a
 	// sequence of constants.  There's no requirement on uniqueness of types or
 	// values, and regular const expressions may also be used.
-	GenError(ipc.ServerCall) error
+	GenError(rpc.ServerCall) error
 	// Count shows using only an int32 out-stream type, with no in-stream type.
 	Count(call ArithCountServerCall, start int32) error
 	// StreamingAdd shows a bidirectional stream.
 	StreamingAdd(ArithStreamingAddServerCall) (total int32, err error)
 	// QuoteAny shows the any built-in type, representing a value of any type.
-	QuoteAny(call ipc.ServerCall, a *vdl.Value) (*vdl.Value, error)
+	QuoteAny(call rpc.ServerCall, a *vdl.Value) (*vdl.Value, error)
 }
 
 // ArithServerStubMethods is the server interface containing
-// Arith methods, as expected by ipc.Server.
+// Arith methods, as expected by rpc.Server.
 // The only difference between this interface and ArithServerMethods
 // is the streaming methods.
 type ArithServerStubMethods interface {
 	// Add is a typical method with multiple input and output arguments.
-	Add(call ipc.ServerCall, a int32, b int32) (int32, error)
+	Add(call rpc.ServerCall, a int32, b int32) (int32, error)
 	// DivMod shows that runs of args with the same type can use the short form,
 	// just like Go.
-	DivMod(call ipc.ServerCall, a int32, b int32) (quot int32, rem int32, err error)
+	DivMod(call rpc.ServerCall, a int32, b int32) (quot int32, rem int32, err error)
 	// Sub shows that you can use data types defined in other packages.
-	Sub(call ipc.ServerCall, args base.Args) (int32, error)
+	Sub(call rpc.ServerCall, args base.Args) (int32, error)
 	// Mul tries another data type defined in another package.
-	Mul(call ipc.ServerCall, nested base.NestedArgs) (int32, error)
+	Mul(call rpc.ServerCall, nested base.NestedArgs) (int32, error)
 	// GenError shows that it's fine to have no in args, and no out args other
 	// than "error".  In addition GenError shows the usage of tags.  Tags are a
 	// sequence of constants.  There's no requirement on uniqueness of types or
 	// values, and regular const expressions may also be used.
-	GenError(ipc.ServerCall) error
+	GenError(rpc.ServerCall) error
 	// Count shows using only an int32 out-stream type, with no in-stream type.
 	Count(call *ArithCountServerCallStub, start int32) error
 	// StreamingAdd shows a bidirectional stream.
 	StreamingAdd(*ArithStreamingAddServerCallStub) (total int32, err error)
 	// QuoteAny shows the any built-in type, representing a value of any type.
-	QuoteAny(call ipc.ServerCall, a *vdl.Value) (*vdl.Value, error)
+	QuoteAny(call rpc.ServerCall, a *vdl.Value) (*vdl.Value, error)
 }
 
 // ArithServerStub adds universal methods to ArithServerStubMethods.
 type ArithServerStub interface {
 	ArithServerStubMethods
 	// Describe the Arith interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // ArithServer returns a server stub for Arith.
 // It converts an implementation of ArithServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func ArithServer(impl ArithServerMethods) ArithServerStub {
 	stub := implArithServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -442,26 +442,26 @@
 
 type implArithServerStub struct {
 	impl ArithServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implArithServerStub) Add(call ipc.ServerCall, i0 int32, i1 int32) (int32, error) {
+func (s implArithServerStub) Add(call rpc.ServerCall, i0 int32, i1 int32) (int32, error) {
 	return s.impl.Add(call, i0, i1)
 }
 
-func (s implArithServerStub) DivMod(call ipc.ServerCall, i0 int32, i1 int32) (int32, int32, error) {
+func (s implArithServerStub) DivMod(call rpc.ServerCall, i0 int32, i1 int32) (int32, int32, error) {
 	return s.impl.DivMod(call, i0, i1)
 }
 
-func (s implArithServerStub) Sub(call ipc.ServerCall, i0 base.Args) (int32, error) {
+func (s implArithServerStub) Sub(call rpc.ServerCall, i0 base.Args) (int32, error) {
 	return s.impl.Sub(call, i0)
 }
 
-func (s implArithServerStub) Mul(call ipc.ServerCall, i0 base.NestedArgs) (int32, error) {
+func (s implArithServerStub) Mul(call rpc.ServerCall, i0 base.NestedArgs) (int32, error) {
 	return s.impl.Mul(call, i0)
 }
 
-func (s implArithServerStub) GenError(call ipc.ServerCall) error {
+func (s implArithServerStub) GenError(call rpc.ServerCall) error {
 	return s.impl.GenError(call)
 }
 
@@ -473,46 +473,46 @@
 	return s.impl.StreamingAdd(call)
 }
 
-func (s implArithServerStub) QuoteAny(call ipc.ServerCall, i0 *vdl.Value) (*vdl.Value, error) {
+func (s implArithServerStub) QuoteAny(call rpc.ServerCall, i0 *vdl.Value) (*vdl.Value, error) {
 	return s.impl.QuoteAny(call, i0)
 }
 
-func (s implArithServerStub) Globber() *ipc.GlobState {
+func (s implArithServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implArithServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{ArithDesc}
+func (s implArithServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{ArithDesc}
 }
 
 // ArithDesc describes the Arith interface.
-var ArithDesc ipc.InterfaceDesc = descArith
+var ArithDesc rpc.InterfaceDesc = descArith
 
 // descArith hides the desc to keep godoc clean.
-var descArith = ipc.InterfaceDesc{
+var descArith = rpc.InterfaceDesc{
 	Name:    "Arith",
 	PkgPath: "v.io/x/ref/lib/vdl/testdata/arith",
 	Doc:     "// Arith is an example of an interface definition for an arithmetic service.\n// Things to note:\n//   * There must be at least 1 out-arg, and the last out-arg must be error.",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Add",
 			Doc:  "// Add is a typical method with multiple input and output arguments.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"a", ``}, // int32
 				{"b", ``}, // int32
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // int32
 			},
 		},
 		{
 			Name: "DivMod",
 			Doc:  "// DivMod shows that runs of args with the same type can use the short form,\n// just like Go.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"a", ``}, // int32
 				{"b", ``}, // int32
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"quot", ``}, // int32
 				{"rem", ``},  // int32
 			},
@@ -520,20 +520,20 @@
 		{
 			Name: "Sub",
 			Doc:  "// Sub shows that you can use data types defined in other packages.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"args", ``}, // base.Args
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // int32
 			},
 		},
 		{
 			Name: "Mul",
 			Doc:  "// Mul tries another data type defined in another package.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"nested", ``}, // base.NestedArgs
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // int32
 			},
 		},
@@ -545,24 +545,24 @@
 		{
 			Name: "Count",
 			Doc:  "// Count shows using only an int32 out-stream type, with no in-stream type.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"start", ``}, // int32
 			},
 		},
 		{
 			Name: "StreamingAdd",
 			Doc:  "// StreamingAdd shows a bidirectional stream.",
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"total", ``}, // int32
 			},
 		},
 		{
 			Name: "QuoteAny",
 			Doc:  "// QuoteAny shows the any built-in type, representing a value of any type.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"a", ``}, // *vdl.Value
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // *vdl.Value
 			},
 		},
@@ -582,18 +582,18 @@
 
 // ArithCountServerCall represents the context passed to Arith.Count.
 type ArithCountServerCall interface {
-	ipc.ServerCall
+	rpc.ServerCall
 	ArithCountServerStream
 }
 
-// ArithCountServerCallStub is a wrapper that converts ipc.StreamServerCall into
+// ArithCountServerCallStub is a wrapper that converts rpc.StreamServerCall into
 // a typesafe stub that implements ArithCountServerCall.
 type ArithCountServerCallStub struct {
-	ipc.StreamServerCall
+	rpc.StreamServerCall
 }
 
-// Init initializes ArithCountServerCallStub from ipc.StreamServerCall.
-func (s *ArithCountServerCallStub) Init(call ipc.StreamServerCall) {
+// Init initializes ArithCountServerCallStub from rpc.StreamServerCall.
+func (s *ArithCountServerCallStub) Init(call rpc.StreamServerCall) {
 	s.StreamServerCall = call
 }
 
@@ -637,20 +637,20 @@
 
 // ArithStreamingAddServerCall represents the context passed to Arith.StreamingAdd.
 type ArithStreamingAddServerCall interface {
-	ipc.ServerCall
+	rpc.ServerCall
 	ArithStreamingAddServerStream
 }
 
-// ArithStreamingAddServerCallStub is a wrapper that converts ipc.StreamServerCall into
+// ArithStreamingAddServerCallStub is a wrapper that converts rpc.StreamServerCall into
 // a typesafe stub that implements ArithStreamingAddServerCall.
 type ArithStreamingAddServerCallStub struct {
-	ipc.StreamServerCall
+	rpc.StreamServerCall
 	valRecv int32
 	errRecv error
 }
 
-// Init initializes ArithStreamingAddServerCallStub from ipc.StreamServerCall.
-func (s *ArithStreamingAddServerCallStub) Init(call ipc.StreamServerCall) {
+// Init initializes ArithStreamingAddServerCallStub from rpc.StreamServerCall.
+func (s *ArithStreamingAddServerCallStub) Init(call rpc.StreamServerCall) {
 	s.StreamServerCall = call
 }
 
@@ -708,21 +708,21 @@
 	// turn it is embedded by arith.Calculator (which is in the same package but
 	// different file) to verify that embedding works in all these scenarios.
 	AdvancedMathClientMethods
-	On(*context.T, ...ipc.CallOpt) error  // On turns the calculator on.
-	Off(*context.T, ...ipc.CallOpt) error // Off turns the calculator off.
+	On(*context.T, ...rpc.CallOpt) error  // On turns the calculator on.
+	Off(*context.T, ...rpc.CallOpt) error // Off turns the calculator off.
 }
 
 // CalculatorClientStub adds universal methods to CalculatorClientMethods.
 type CalculatorClientStub interface {
 	CalculatorClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // CalculatorClient returns a client stub for Calculator.
-func CalculatorClient(name string, opts ...ipc.BindOpt) CalculatorClientStub {
-	var client ipc.Client
+func CalculatorClient(name string, opts ...rpc.BindOpt) CalculatorClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -731,21 +731,21 @@
 
 type implCalculatorClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 
 	ArithClientStub
 	AdvancedMathClientStub
 }
 
-func (c implCalculatorClientStub) c(ctx *context.T) ipc.Client {
+func (c implCalculatorClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implCalculatorClientStub) On(ctx *context.T, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implCalculatorClientStub) On(ctx *context.T, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "On", nil, opts...); err != nil {
 		return
 	}
@@ -753,8 +753,8 @@
 	return
 }
 
-func (c implCalculatorClientStub) Off(ctx *context.T, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implCalculatorClientStub) Off(ctx *context.T, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Off", nil, opts...); err != nil {
 		return
 	}
@@ -774,12 +774,12 @@
 	// turn it is embedded by arith.Calculator (which is in the same package but
 	// different file) to verify that embedding works in all these scenarios.
 	AdvancedMathServerMethods
-	On(ipc.ServerCall) error  // On turns the calculator on.
-	Off(ipc.ServerCall) error // Off turns the calculator off.
+	On(rpc.ServerCall) error  // On turns the calculator on.
+	Off(rpc.ServerCall) error // Off turns the calculator off.
 }
 
 // CalculatorServerStubMethods is the server interface containing
-// Calculator methods, as expected by ipc.Server.
+// Calculator methods, as expected by rpc.Server.
 // The only difference between this interface and CalculatorServerMethods
 // is the streaming methods.
 type CalculatorServerStubMethods interface {
@@ -792,20 +792,20 @@
 	// turn it is embedded by arith.Calculator (which is in the same package but
 	// different file) to verify that embedding works in all these scenarios.
 	AdvancedMathServerStubMethods
-	On(ipc.ServerCall) error  // On turns the calculator on.
-	Off(ipc.ServerCall) error // Off turns the calculator off.
+	On(rpc.ServerCall) error  // On turns the calculator on.
+	Off(rpc.ServerCall) error // Off turns the calculator off.
 }
 
 // CalculatorServerStub adds universal methods to CalculatorServerStubMethods.
 type CalculatorServerStub interface {
 	CalculatorServerStubMethods
 	// Describe the Calculator interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // CalculatorServer returns a server stub for Calculator.
 // It converts an implementation of CalculatorServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func CalculatorServer(impl CalculatorServerMethods) CalculatorServerStub {
 	stub := implCalculatorServerStub{
 		impl:                   impl,
@@ -814,9 +814,9 @@
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -826,37 +826,37 @@
 	impl CalculatorServerMethods
 	ArithServerStub
 	AdvancedMathServerStub
-	gs *ipc.GlobState
+	gs *rpc.GlobState
 }
 
-func (s implCalculatorServerStub) On(call ipc.ServerCall) error {
+func (s implCalculatorServerStub) On(call rpc.ServerCall) error {
 	return s.impl.On(call)
 }
 
-func (s implCalculatorServerStub) Off(call ipc.ServerCall) error {
+func (s implCalculatorServerStub) Off(call rpc.ServerCall) error {
 	return s.impl.Off(call)
 }
 
-func (s implCalculatorServerStub) Globber() *ipc.GlobState {
+func (s implCalculatorServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implCalculatorServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{CalculatorDesc, ArithDesc, AdvancedMathDesc, TrigonometryDesc, exp.ExpDesc}
+func (s implCalculatorServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{CalculatorDesc, ArithDesc, AdvancedMathDesc, TrigonometryDesc, exp.ExpDesc}
 }
 
 // CalculatorDesc describes the Calculator interface.
-var CalculatorDesc ipc.InterfaceDesc = descCalculator
+var CalculatorDesc rpc.InterfaceDesc = descCalculator
 
 // descCalculator hides the desc to keep godoc clean.
-var descCalculator = ipc.InterfaceDesc{
+var descCalculator = rpc.InterfaceDesc{
 	Name:    "Calculator",
 	PkgPath: "v.io/x/ref/lib/vdl/testdata/arith",
-	Embeds: []ipc.EmbedDesc{
+	Embeds: []rpc.EmbedDesc{
 		{"Arith", "v.io/x/ref/lib/vdl/testdata/arith", "// Arith is an example of an interface definition for an arithmetic service.\n// Things to note:\n//   * There must be at least 1 out-arg, and the last out-arg must be error."},
 		{"AdvancedMath", "v.io/x/ref/lib/vdl/testdata/arith", "// AdvancedMath is an interface for more advanced math than arith.  It embeds\n// interfaces defined both in the same file and in an external package; and in\n// turn it is embedded by arith.Calculator (which is in the same package but\n// different file) to verify that embedding works in all these scenarios."},
 	},
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "On",
 		},
diff --git a/lib/vdl/testdata/arith/exp/exp.vdl.go b/lib/vdl/testdata/arith/exp/exp.vdl.go
index c0cf092..1d66086 100644
--- a/lib/vdl/testdata/arith/exp/exp.vdl.go
+++ b/lib/vdl/testdata/arith/exp/exp.vdl.go
@@ -9,26 +9,26 @@
 	// VDL system imports
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 )
 
 // ExpClientMethods is the client interface
 // containing Exp methods.
 type ExpClientMethods interface {
-	Exp(ctx *context.T, x float64, opts ...ipc.CallOpt) (float64, error)
+	Exp(ctx *context.T, x float64, opts ...rpc.CallOpt) (float64, error)
 }
 
 // ExpClientStub adds universal methods to ExpClientMethods.
 type ExpClientStub interface {
 	ExpClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // ExpClient returns a client stub for Exp.
-func ExpClient(name string, opts ...ipc.BindOpt) ExpClientStub {
-	var client ipc.Client
+func ExpClient(name string, opts ...rpc.BindOpt) ExpClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -37,18 +37,18 @@
 
 type implExpClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implExpClientStub) c(ctx *context.T) ipc.Client {
+func (c implExpClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implExpClientStub) Exp(ctx *context.T, i0 float64, opts ...ipc.CallOpt) (o0 float64, err error) {
-	var call ipc.ClientCall
+func (c implExpClientStub) Exp(ctx *context.T, i0 float64, opts ...rpc.CallOpt) (o0 float64, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Exp", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -59,11 +59,11 @@
 // ExpServerMethods is the interface a server writer
 // implements for Exp.
 type ExpServerMethods interface {
-	Exp(call ipc.ServerCall, x float64) (float64, error)
+	Exp(call rpc.ServerCall, x float64) (float64, error)
 }
 
 // ExpServerStubMethods is the server interface containing
-// Exp methods, as expected by ipc.Server.
+// Exp methods, as expected by rpc.Server.
 // There is no difference between this interface and ExpServerMethods
 // since there are no streaming methods.
 type ExpServerStubMethods ExpServerMethods
@@ -72,21 +72,21 @@
 type ExpServerStub interface {
 	ExpServerStubMethods
 	// Describe the Exp interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // ExpServer returns a server stub for Exp.
 // It converts an implementation of ExpServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func ExpServer(impl ExpServerMethods) ExpServerStub {
 	stub := implExpServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -94,35 +94,35 @@
 
 type implExpServerStub struct {
 	impl ExpServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implExpServerStub) Exp(call ipc.ServerCall, i0 float64) (float64, error) {
+func (s implExpServerStub) Exp(call rpc.ServerCall, i0 float64) (float64, error) {
 	return s.impl.Exp(call, i0)
 }
 
-func (s implExpServerStub) Globber() *ipc.GlobState {
+func (s implExpServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implExpServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{ExpDesc}
+func (s implExpServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{ExpDesc}
 }
 
 // ExpDesc describes the Exp interface.
-var ExpDesc ipc.InterfaceDesc = descExp
+var ExpDesc rpc.InterfaceDesc = descExp
 
 // descExp hides the desc to keep godoc clean.
-var descExp = ipc.InterfaceDesc{
+var descExp = rpc.InterfaceDesc{
 	Name:    "Exp",
 	PkgPath: "v.io/x/ref/lib/vdl/testdata/arith/exp",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Exp",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"x", ``}, // float64
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // float64
 			},
 		},
diff --git a/lib/vdl/testdata/base/base.vdl.go b/lib/vdl/testdata/base/base.vdl.go
index 62020a4..581b992 100644
--- a/lib/vdl/testdata/base/base.vdl.go
+++ b/lib/vdl/testdata/base/base.vdl.go
@@ -11,7 +11,7 @@
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/i18n"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/vdl"
 	"v.io/v23/verror"
 )
@@ -602,23 +602,23 @@
 // ServiceAClientMethods is the client interface
 // containing ServiceA methods.
 type ServiceAClientMethods interface {
-	MethodA1(*context.T, ...ipc.CallOpt) error
-	MethodA2(ctx *context.T, a int32, b string, opts ...ipc.CallOpt) (s string, err error)
-	MethodA3(ctx *context.T, a int32, opts ...ipc.CallOpt) (ServiceAMethodA3ClientCall, error)
-	MethodA4(ctx *context.T, a int32, opts ...ipc.CallOpt) (ServiceAMethodA4ClientCall, error)
+	MethodA1(*context.T, ...rpc.CallOpt) error
+	MethodA2(ctx *context.T, a int32, b string, opts ...rpc.CallOpt) (s string, err error)
+	MethodA3(ctx *context.T, a int32, opts ...rpc.CallOpt) (ServiceAMethodA3ClientCall, error)
+	MethodA4(ctx *context.T, a int32, opts ...rpc.CallOpt) (ServiceAMethodA4ClientCall, error)
 }
 
 // ServiceAClientStub adds universal methods to ServiceAClientMethods.
 type ServiceAClientStub interface {
 	ServiceAClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // ServiceAClient returns a client stub for ServiceA.
-func ServiceAClient(name string, opts ...ipc.BindOpt) ServiceAClientStub {
-	var client ipc.Client
+func ServiceAClient(name string, opts ...rpc.BindOpt) ServiceAClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -627,18 +627,18 @@
 
 type implServiceAClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implServiceAClientStub) c(ctx *context.T) ipc.Client {
+func (c implServiceAClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implServiceAClientStub) MethodA1(ctx *context.T, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implServiceAClientStub) MethodA1(ctx *context.T, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "MethodA1", nil, opts...); err != nil {
 		return
 	}
@@ -646,8 +646,8 @@
 	return
 }
 
-func (c implServiceAClientStub) MethodA2(ctx *context.T, i0 int32, i1 string, opts ...ipc.CallOpt) (o0 string, err error) {
-	var call ipc.ClientCall
+func (c implServiceAClientStub) MethodA2(ctx *context.T, i0 int32, i1 string, opts ...rpc.CallOpt) (o0 string, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "MethodA2", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -655,8 +655,8 @@
 	return
 }
 
-func (c implServiceAClientStub) MethodA3(ctx *context.T, i0 int32, opts ...ipc.CallOpt) (ocall ServiceAMethodA3ClientCall, err error) {
-	var call ipc.ClientCall
+func (c implServiceAClientStub) MethodA3(ctx *context.T, i0 int32, opts ...rpc.CallOpt) (ocall ServiceAMethodA3ClientCall, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "MethodA3", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -664,8 +664,8 @@
 	return
 }
 
-func (c implServiceAClientStub) MethodA4(ctx *context.T, i0 int32, opts ...ipc.CallOpt) (ocall ServiceAMethodA4ClientCall, err error) {
-	var call ipc.ClientCall
+func (c implServiceAClientStub) MethodA4(ctx *context.T, i0 int32, opts ...rpc.CallOpt) (ocall ServiceAMethodA4ClientCall, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "MethodA4", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -706,7 +706,7 @@
 }
 
 type implServiceAMethodA3ClientCall struct {
-	ipc.ClientCall
+	rpc.ClientCall
 	valRecv Scalars
 	errRecv error
 }
@@ -792,7 +792,7 @@
 }
 
 type implServiceAMethodA4ClientCall struct {
-	ipc.ClientCall
+	rpc.ClientCall
 	valRecv string
 	errRecv error
 }
@@ -847,19 +847,19 @@
 // ServiceAServerMethods is the interface a server writer
 // implements for ServiceA.
 type ServiceAServerMethods interface {
-	MethodA1(ipc.ServerCall) error
-	MethodA2(call ipc.ServerCall, a int32, b string) (s string, err error)
+	MethodA1(rpc.ServerCall) error
+	MethodA2(call rpc.ServerCall, a int32, b string) (s string, err error)
 	MethodA3(call ServiceAMethodA3ServerCall, a int32) (s string, err error)
 	MethodA4(call ServiceAMethodA4ServerCall, a int32) error
 }
 
 // ServiceAServerStubMethods is the server interface containing
-// ServiceA methods, as expected by ipc.Server.
+// ServiceA methods, as expected by rpc.Server.
 // The only difference between this interface and ServiceAServerMethods
 // is the streaming methods.
 type ServiceAServerStubMethods interface {
-	MethodA1(ipc.ServerCall) error
-	MethodA2(call ipc.ServerCall, a int32, b string) (s string, err error)
+	MethodA1(rpc.ServerCall) error
+	MethodA2(call rpc.ServerCall, a int32, b string) (s string, err error)
 	MethodA3(call *ServiceAMethodA3ServerCallStub, a int32) (s string, err error)
 	MethodA4(call *ServiceAMethodA4ServerCallStub, a int32) error
 }
@@ -868,21 +868,21 @@
 type ServiceAServerStub interface {
 	ServiceAServerStubMethods
 	// Describe the ServiceA interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // ServiceAServer returns a server stub for ServiceA.
 // It converts an implementation of ServiceAServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func ServiceAServer(impl ServiceAServerMethods) ServiceAServerStub {
 	stub := implServiceAServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -890,14 +890,14 @@
 
 type implServiceAServerStub struct {
 	impl ServiceAServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implServiceAServerStub) MethodA1(call ipc.ServerCall) error {
+func (s implServiceAServerStub) MethodA1(call rpc.ServerCall) error {
 	return s.impl.MethodA1(call)
 }
 
-func (s implServiceAServerStub) MethodA2(call ipc.ServerCall, i0 int32, i1 string) (string, error) {
+func (s implServiceAServerStub) MethodA2(call rpc.ServerCall, i0 int32, i1 string) (string, error) {
 	return s.impl.MethodA2(call, i0, i1)
 }
 
@@ -909,48 +909,48 @@
 	return s.impl.MethodA4(call, i0)
 }
 
-func (s implServiceAServerStub) Globber() *ipc.GlobState {
+func (s implServiceAServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implServiceAServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{ServiceADesc}
+func (s implServiceAServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{ServiceADesc}
 }
 
 // ServiceADesc describes the ServiceA interface.
-var ServiceADesc ipc.InterfaceDesc = descServiceA
+var ServiceADesc rpc.InterfaceDesc = descServiceA
 
 // descServiceA hides the desc to keep godoc clean.
-var descServiceA = ipc.InterfaceDesc{
+var descServiceA = rpc.InterfaceDesc{
 	Name:    "ServiceA",
 	PkgPath: "v.io/x/ref/lib/vdl/testdata/base",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "MethodA1",
 		},
 		{
 			Name: "MethodA2",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"a", ``}, // int32
 				{"b", ``}, // string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"s", ``}, // string
 			},
 		},
 		{
 			Name: "MethodA3",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"a", ``}, // int32
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"s", ``}, // string
 			},
 			Tags: []*vdl.Value{vdl.ValueOf("tag"), vdl.ValueOf(uint64(6))},
 		},
 		{
 			Name: "MethodA4",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"a", ``}, // int32
 			},
 		},
@@ -970,18 +970,18 @@
 
 // ServiceAMethodA3ServerCall represents the context passed to ServiceA.MethodA3.
 type ServiceAMethodA3ServerCall interface {
-	ipc.ServerCall
+	rpc.ServerCall
 	ServiceAMethodA3ServerStream
 }
 
-// ServiceAMethodA3ServerCallStub is a wrapper that converts ipc.StreamServerCall into
+// ServiceAMethodA3ServerCallStub is a wrapper that converts rpc.StreamServerCall into
 // a typesafe stub that implements ServiceAMethodA3ServerCall.
 type ServiceAMethodA3ServerCallStub struct {
-	ipc.StreamServerCall
+	rpc.StreamServerCall
 }
 
-// Init initializes ServiceAMethodA3ServerCallStub from ipc.StreamServerCall.
-func (s *ServiceAMethodA3ServerCallStub) Init(call ipc.StreamServerCall) {
+// Init initializes ServiceAMethodA3ServerCallStub from rpc.StreamServerCall.
+func (s *ServiceAMethodA3ServerCallStub) Init(call rpc.StreamServerCall) {
 	s.StreamServerCall = call
 }
 
@@ -1025,20 +1025,20 @@
 
 // ServiceAMethodA4ServerCall represents the context passed to ServiceA.MethodA4.
 type ServiceAMethodA4ServerCall interface {
-	ipc.ServerCall
+	rpc.ServerCall
 	ServiceAMethodA4ServerStream
 }
 
-// ServiceAMethodA4ServerCallStub is a wrapper that converts ipc.StreamServerCall into
+// ServiceAMethodA4ServerCallStub is a wrapper that converts rpc.StreamServerCall into
 // a typesafe stub that implements ServiceAMethodA4ServerCall.
 type ServiceAMethodA4ServerCallStub struct {
-	ipc.StreamServerCall
+	rpc.StreamServerCall
 	valRecv int32
 	errRecv error
 }
 
-// Init initializes ServiceAMethodA4ServerCallStub from ipc.StreamServerCall.
-func (s *ServiceAMethodA4ServerCallStub) Init(call ipc.StreamServerCall) {
+// Init initializes ServiceAMethodA4ServerCallStub from rpc.StreamServerCall.
+func (s *ServiceAMethodA4ServerCallStub) Init(call rpc.StreamServerCall) {
 	s.StreamServerCall = call
 }
 
@@ -1088,20 +1088,20 @@
 // containing ServiceB methods.
 type ServiceBClientMethods interface {
 	ServiceAClientMethods
-	MethodB1(ctx *context.T, a Scalars, b Composites, opts ...ipc.CallOpt) (c CompComp, err error)
+	MethodB1(ctx *context.T, a Scalars, b Composites, opts ...rpc.CallOpt) (c CompComp, err error)
 }
 
 // ServiceBClientStub adds universal methods to ServiceBClientMethods.
 type ServiceBClientStub interface {
 	ServiceBClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // ServiceBClient returns a client stub for ServiceB.
-func ServiceBClient(name string, opts ...ipc.BindOpt) ServiceBClientStub {
-	var client ipc.Client
+func ServiceBClient(name string, opts ...rpc.BindOpt) ServiceBClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -1110,20 +1110,20 @@
 
 type implServiceBClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 
 	ServiceAClientStub
 }
 
-func (c implServiceBClientStub) c(ctx *context.T) ipc.Client {
+func (c implServiceBClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implServiceBClientStub) MethodB1(ctx *context.T, i0 Scalars, i1 Composites, opts ...ipc.CallOpt) (o0 CompComp, err error) {
-	var call ipc.ClientCall
+func (c implServiceBClientStub) MethodB1(ctx *context.T, i0 Scalars, i1 Composites, opts ...rpc.CallOpt) (o0 CompComp, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "MethodB1", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -1135,28 +1135,28 @@
 // implements for ServiceB.
 type ServiceBServerMethods interface {
 	ServiceAServerMethods
-	MethodB1(call ipc.ServerCall, a Scalars, b Composites) (c CompComp, err error)
+	MethodB1(call rpc.ServerCall, a Scalars, b Composites) (c CompComp, err error)
 }
 
 // ServiceBServerStubMethods is the server interface containing
-// ServiceB methods, as expected by ipc.Server.
+// ServiceB methods, as expected by rpc.Server.
 // The only difference between this interface and ServiceBServerMethods
 // is the streaming methods.
 type ServiceBServerStubMethods interface {
 	ServiceAServerStubMethods
-	MethodB1(call ipc.ServerCall, a Scalars, b Composites) (c CompComp, err error)
+	MethodB1(call rpc.ServerCall, a Scalars, b Composites) (c CompComp, err error)
 }
 
 // ServiceBServerStub adds universal methods to ServiceBServerStubMethods.
 type ServiceBServerStub interface {
 	ServiceBServerStubMethods
 	// Describe the ServiceB interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // ServiceBServer returns a server stub for ServiceB.
 // It converts an implementation of ServiceBServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func ServiceBServer(impl ServiceBServerMethods) ServiceBServerStub {
 	stub := implServiceBServerStub{
 		impl:               impl,
@@ -1164,9 +1164,9 @@
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -1175,39 +1175,39 @@
 type implServiceBServerStub struct {
 	impl ServiceBServerMethods
 	ServiceAServerStub
-	gs *ipc.GlobState
+	gs *rpc.GlobState
 }
 
-func (s implServiceBServerStub) MethodB1(call ipc.ServerCall, i0 Scalars, i1 Composites) (CompComp, error) {
+func (s implServiceBServerStub) MethodB1(call rpc.ServerCall, i0 Scalars, i1 Composites) (CompComp, error) {
 	return s.impl.MethodB1(call, i0, i1)
 }
 
-func (s implServiceBServerStub) Globber() *ipc.GlobState {
+func (s implServiceBServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implServiceBServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{ServiceBDesc, ServiceADesc}
+func (s implServiceBServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{ServiceBDesc, ServiceADesc}
 }
 
 // ServiceBDesc describes the ServiceB interface.
-var ServiceBDesc ipc.InterfaceDesc = descServiceB
+var ServiceBDesc rpc.InterfaceDesc = descServiceB
 
 // descServiceB hides the desc to keep godoc clean.
-var descServiceB = ipc.InterfaceDesc{
+var descServiceB = rpc.InterfaceDesc{
 	Name:    "ServiceB",
 	PkgPath: "v.io/x/ref/lib/vdl/testdata/base",
-	Embeds: []ipc.EmbedDesc{
+	Embeds: []rpc.EmbedDesc{
 		{"ServiceA", "v.io/x/ref/lib/vdl/testdata/base", ``},
 	},
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "MethodB1",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"a", ``}, // Scalars
 				{"b", ``}, // Composites
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"c", ``}, // CompComp
 			},
 		},
diff --git a/profiles/chrome/chromeinit.go b/profiles/chrome/chromeinit.go
index 51c87a5..0246b1e 100644
--- a/profiles/chrome/chromeinit.go
+++ b/profiles/chrome/chromeinit.go
@@ -7,14 +7,14 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 
 	"v.io/x/ref/lib/flags"
 	"v.io/x/ref/profiles/internal"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/ws"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/wsh_nacl"
 	"v.io/x/ref/profiles/internal/lib/websocket"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/ws"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/wsh_nacl"
 	grt "v.io/x/ref/profiles/internal/rt"
 )
 
@@ -22,7 +22,7 @@
 
 func init() {
 	v23.RegisterProfileInit(Init)
-	ipc.RegisterUnknownProtocol("wsh", websocket.Dial, websocket.Listener)
+	rpc.RegisterUnknownProtocol("wsh", websocket.Dial, websocket.Listener)
 	commonFlags = flags.CreateAndRegister(flag.CommandLine, flags.Runtime)
 }
 
@@ -32,7 +32,7 @@
 	}
 
 	protocols := []string{"wsh", "ws"}
-	listenSpec := ipc.ListenSpec{Addrs: ipc.ListenAddrs{{Protocol: "ws", Address: ""}}}
+	listenSpec := rpc.ListenSpec{Addrs: rpc.ListenAddrs{{Protocol: "ws", Address: ""}}}
 	runtime, ctx, shutdown, err := grt.Init(ctx, nil, protocols, &listenSpec, commonFlags.RuntimeFlags(), nil)
 	if err != nil {
 		return nil, nil, shutdown, err
diff --git a/profiles/fake/fake.go b/profiles/fake/fake.go
index 68b2572..93aa777 100644
--- a/profiles/fake/fake.go
+++ b/profiles/fake/fake.go
@@ -5,12 +5,12 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/tcp"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/ws"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/wsh"
 	"v.io/x/ref/profiles/internal/lib/websocket"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/tcp"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/ws"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/wsh"
 )
 
 var (
@@ -24,7 +24,7 @@
 
 func init() {
 	v23.RegisterProfileInit(Init)
-	ipc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener)
+	rpc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener)
 }
 
 func Init(ctx *context.T) (v23.Runtime, *context.T, v23.Shutdown, error) {
diff --git a/profiles/fake/ipc.go b/profiles/fake/ipc.go
deleted file mode 100644
index d6902eb..0000000
--- a/profiles/fake/ipc.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package fake
-
-import (
-	"v.io/v23/context"
-	"v.io/v23/ipc"
-)
-
-// SetClient can be used to inject a mock client implementation into the context.
-func SetClient(ctx *context.T, client ipc.Client) *context.T {
-	return context.WithValue(ctx, clientKey, client)
-}
-func (r *Runtime) SetNewClient(ctx *context.T, opts ...ipc.ClientOpt) (*context.T, ipc.Client, error) {
-	panic("unimplemented")
-}
-func (r *Runtime) GetClient(ctx *context.T) ipc.Client {
-	c, _ := ctx.Value(clientKey).(ipc.Client)
-	return c
-}
-
-func (r *Runtime) NewServer(ctx *context.T, opts ...ipc.ServerOpt) (ipc.Server, error) {
-	panic("unimplemented")
-}
-func (r *Runtime) SetNewStreamManager(ctx *context.T) (*context.T, error) {
-	panic("unimplemented")
-}
-
-func (r *Runtime) GetListenSpec(ctx *context.T) ipc.ListenSpec {
-	return ipc.ListenSpec{}
-}
diff --git a/profiles/fake/rpc.go b/profiles/fake/rpc.go
new file mode 100644
index 0000000..754ef79
--- /dev/null
+++ b/profiles/fake/rpc.go
@@ -0,0 +1,29 @@
+package fake
+
+import (
+	"v.io/v23/context"
+	"v.io/v23/rpc"
+)
+
+// SetClient can be used to inject a mock client implementation into the context.
+func SetClient(ctx *context.T, client rpc.Client) *context.T {
+	return context.WithValue(ctx, clientKey, client)
+}
+func (r *Runtime) SetNewClient(ctx *context.T, opts ...rpc.ClientOpt) (*context.T, rpc.Client, error) {
+	panic("unimplemented")
+}
+func (r *Runtime) GetClient(ctx *context.T) rpc.Client {
+	c, _ := ctx.Value(clientKey).(rpc.Client)
+	return c
+}
+
+func (r *Runtime) NewServer(ctx *context.T, opts ...rpc.ServerOpt) (rpc.Server, error) {
+	panic("unimplemented")
+}
+func (r *Runtime) SetNewStreamManager(ctx *context.T) (*context.T, error) {
+	panic("unimplemented")
+}
+
+func (r *Runtime) GetListenSpec(ctx *context.T) rpc.ListenSpec {
+	return rpc.ListenSpec{}
+}
diff --git a/profiles/gce/init.go b/profiles/gce/init.go
index cf52683..ece228d 100644
--- a/profiles/gce/init.go
+++ b/profiles/gce/init.go
@@ -11,18 +11,18 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 
 	"v.io/x/lib/netstate"
 	"v.io/x/ref/lib/flags"
 	"v.io/x/ref/profiles/internal"
 	"v.io/x/ref/profiles/internal/gce"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/tcp"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/ws"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/wsh"
 	"v.io/x/ref/profiles/internal/lib/appcycle"
 	"v.io/x/ref/profiles/internal/lib/websocket"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/tcp"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/ws"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/wsh"
 	grt "v.io/x/ref/profiles/internal/rt"
 )
 
@@ -30,7 +30,7 @@
 
 func init() {
 	v23.RegisterProfileInit(Init)
-	ipc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener)
+	rpc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener)
 	commonFlags = flags.CreateAndRegister(flag.CommandLine, flags.Runtime, flags.Listen)
 }
 
@@ -46,16 +46,16 @@
 	ac := appcycle.New()
 
 	lf := commonFlags.ListenFlags()
-	listenSpec := ipc.ListenSpec{
-		Addrs: ipc.ListenAddrs(lf.Addrs),
+	listenSpec := rpc.ListenSpec{
+		Addrs: rpc.ListenAddrs(lf.Addrs),
 		Proxy: lf.ListenProxy,
 	}
 
 	if ip, err := gce.ExternalIPAddress(); err != nil {
 		return nil, nil, nil, err
 	} else {
-		listenSpec.AddressChooser = func(network string, addrs []ipc.Address) ([]ipc.Address, error) {
-			return []ipc.Address{&netstate.AddrIfc{&net.IPAddr{IP: ip}, "gce-nat", nil}}, nil
+		listenSpec.AddressChooser = func(network string, addrs []rpc.Address) ([]rpc.Address, error) {
+			return []rpc.Address{&netstate.AddrIfc{&net.IPAddr{IP: ip}, "gce-nat", nil}}, nil
 		}
 	}
 
diff --git a/profiles/genericinit.go b/profiles/genericinit.go
index d6398f6..5b0fb1f 100644
--- a/profiles/genericinit.go
+++ b/profiles/genericinit.go
@@ -5,16 +5,16 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 
 	"v.io/x/ref/lib/flags"
 	"v.io/x/ref/profiles/internal"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/tcp"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/ws"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/wsh"
 	"v.io/x/ref/profiles/internal/lib/appcycle"
 	"v.io/x/ref/profiles/internal/lib/websocket"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/tcp"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/ws"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/wsh"
 	grt "v.io/x/ref/profiles/internal/rt"
 )
 
@@ -22,7 +22,7 @@
 
 func init() {
 	v23.RegisterProfileInit(Init)
-	ipc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener)
+	rpc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener)
 	flags.SetDefaultProtocol("tcp")
 	flags.SetDefaultHostPort("127.0.0.1:0")
 	commonFlags = flags.CreateAndRegister(flag.CommandLine, flags.Runtime, flags.Listen)
@@ -36,8 +36,8 @@
 	ac := appcycle.New()
 
 	lf := commonFlags.ListenFlags()
-	listenSpec := ipc.ListenSpec{
-		Addrs:          ipc.ListenAddrs(lf.Addrs),
+	listenSpec := rpc.ListenSpec{
+		Addrs:          rpc.ListenAddrs(lf.Addrs),
 		AddressChooser: internal.IPAddressChooser,
 		Proxy:          lf.ListenProxy,
 	}
diff --git a/profiles/internal/ipc/protocols/ws/init.go b/profiles/internal/ipc/protocols/ws/init.go
deleted file mode 100644
index 5b72412..0000000
--- a/profiles/internal/ipc/protocols/ws/init.go
+++ /dev/null
@@ -1,14 +0,0 @@
-package websocket
-
-import (
-	"v.io/v23/ipc"
-
-	"v.io/x/ref/profiles/internal/lib/websocket"
-)
-
-func init() {
-	// ws, ws4, ws6 represent websocket protocol instances.
-	ipc.RegisterProtocol("ws", websocket.Dial, websocket.Listener, "ws4", "ws6")
-	ipc.RegisterProtocol("ws4", websocket.Dial, websocket.Listener)
-	ipc.RegisterProtocol("ws6", websocket.Dial, websocket.Listener)
-}
diff --git a/profiles/internal/ipc/resolve_internal_test.go b/profiles/internal/ipc/resolve_internal_test.go
deleted file mode 100644
index 637e4c6..0000000
--- a/profiles/internal/ipc/resolve_internal_test.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package ipc
-
-import (
-	"v.io/v23/ipc"
-)
-
-func InternalServerResolveToEndpoint(s ipc.Server, name string) (string, error) {
-	return s.(*server).resolveToEndpoint(name)
-}
diff --git a/profiles/internal/ipc/stream/benchmark/doc.go b/profiles/internal/ipc/stream/benchmark/doc.go
deleted file mode 100644
index b7f2bd4..0000000
--- a/profiles/internal/ipc/stream/benchmark/doc.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// Package benchmark implements some benchmarks for comparing the
-// veyron/profiles/internal/ipc/stream implementation with raw TCP connections and/or
-// pipes.
-//
-// Sample usage:
-//	go test veyron/profiles/internal/ipc/stream/benchmark -bench=.
-package benchmark
diff --git a/profiles/internal/ipc/test/doc.go b/profiles/internal/ipc/test/doc.go
deleted file mode 100644
index 0580f89..0000000
--- a/profiles/internal/ipc/test/doc.go
+++ /dev/null
@@ -1,2 +0,0 @@
-// package test contains test for ipc code that do not rely on unexposed ipc declarations.
-package test
diff --git a/profiles/internal/lib/appcycle/appcycle.go b/profiles/internal/lib/appcycle/appcycle.go
index e442179..0a683d4 100644
--- a/profiles/internal/lib/appcycle/appcycle.go
+++ b/profiles/internal/lib/appcycle/appcycle.go
@@ -6,7 +6,7 @@
 	"sync"
 
 	"v.io/v23"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
 
@@ -144,7 +144,7 @@
 	return nil
 }
 
-func (d *invoker) ForceStop(ipc.ServerCall) error {
+func (d *invoker) ForceStop(rpc.ServerCall) error {
 	d.ac.ForceStop()
 	return fmt.Errorf("ForceStop should not reply as the process should be dead")
 }
diff --git a/profiles/internal/lib/publisher/publisher.go b/profiles/internal/lib/publisher/publisher.go
index ed6ab64..25c9419 100644
--- a/profiles/internal/lib/publisher/publisher.go
+++ b/profiles/internal/lib/publisher/publisher.go
@@ -10,9 +10,9 @@
 	"time"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/naming/ns"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 )
 
@@ -27,7 +27,7 @@
 	// RemoveName removes a name.
 	RemoveName(name string)
 	// Status returns a snapshot of the publisher's current state.
-	Status() ipc.MountState
+	Status() rpc.MountState
 	// DebugString returns a string representation of the publisher
 	// meant solely for debugging.
 	DebugString() string
@@ -75,7 +75,7 @@
 
 type debugCmd chan string // debug string is sent when the cmd is done
 
-type statusCmd chan ipc.MountState // status info is sent when cmd is done
+type statusCmd chan rpc.MountState // status info is sent when cmd is done
 
 type stopCmd struct{} // sent to the runloop when we want it to exit.
 
@@ -126,12 +126,12 @@
 	}
 }
 
-func (p *publisher) Status() ipc.MountState {
+func (p *publisher) Status() rpc.MountState {
 	status := make(statusCmd)
 	if p.sendCmd(status) {
 		return <-status
 	}
-	return ipc.MountState{}
+	return rpc.MountState{}
 }
 
 func (p *publisher) DebugString() (dbg string) {
@@ -162,7 +162,7 @@
 }
 
 func runLoop(ctx *context.T, cmdchan chan interface{}, donechan chan struct{}, ns ns.Namespace, period time.Duration) {
-	vlog.VI(2).Info("ipc pub: start runLoop")
+	vlog.VI(2).Info("rpc pub: start runLoop")
 	state := newPubState(ctx, ns, period)
 
 	for {
@@ -172,7 +172,7 @@
 			case stopCmd:
 				state.unmountAll()
 				close(donechan)
-				vlog.VI(2).Info("ipc pub: exit runLoop")
+				vlog.VI(2).Info("rpc pub: exit runLoop")
 				return
 			case addServerCmd:
 				state.addServer(tcmd.server, tcmd.mt)
@@ -214,7 +214,7 @@
 	names    map[string]bool // names that have been added
 	servers  map[string]bool // servers that have been added, true
 	// map each (name,server) to its status.
-	mounts map[mountKey]*ipc.MountStatus
+	mounts map[mountKey]*rpc.MountStatus
 }
 
 func newPubState(ctx *context.T, ns ns.Namespace, period time.Duration) *pubState {
@@ -225,7 +225,7 @@
 		deadline: time.Now().Add(period),
 		names:    make(map[string]bool),
 		servers:  make(map[string]bool),
-		mounts:   make(map[mountKey]*ipc.MountStatus),
+		mounts:   make(map[mountKey]*rpc.MountStatus),
 	}
 }
 
@@ -241,7 +241,7 @@
 	}
 	ps.names[name] = true
 	for server, servesMT := range ps.servers {
-		status := new(ipc.MountStatus)
+		status := new(rpc.MountStatus)
 		ps.mounts[mountKey{name, server}] = status
 		ps.mount(name, server, status, servesMT)
 	}
@@ -265,7 +265,7 @@
 	if !ps.servers[server] {
 		ps.servers[server] = servesMT
 		for name, _ := range ps.names {
-			status := new(ipc.MountStatus)
+			status := new(rpc.MountStatus)
 			ps.mounts[mountKey{name, server}] = status
 			ps.mount(name, server, status, servesMT)
 		}
@@ -284,7 +284,7 @@
 	}
 }
 
-func (ps *pubState) mount(name, server string, status *ipc.MountStatus, servesMT bool) {
+func (ps *pubState) mount(name, server string, status *rpc.MountStatus, servesMT bool) {
 	// Always mount with ttl = period + slack, regardless of whether this is
 	// triggered by a newly added server or name, or by sync.  The next call
 	// to sync will occur within the next period, and refresh all mounts.
@@ -293,9 +293,9 @@
 	status.LastMountErr = ps.ns.Mount(ps.ctx, name, server, ttl, naming.ServesMountTableOpt(servesMT))
 	status.TTL = ttl
 	if status.LastMountErr != nil {
-		vlog.Errorf("ipc pub: couldn't mount(%v, %v, %v): %v", name, server, ttl, status.LastMountErr)
+		vlog.Errorf("rpc pub: couldn't mount(%v, %v, %v): %v", name, server, ttl, status.LastMountErr)
 	} else {
-		vlog.VI(2).Infof("ipc pub: mount(%v, %v, %v)", name, server, ttl)
+		vlog.VI(2).Infof("rpc pub: mount(%v, %v, %v)", name, server, ttl)
 	}
 }
 
@@ -311,13 +311,13 @@
 	}
 }
 
-func (ps *pubState) unmount(name, server string, status *ipc.MountStatus) {
+func (ps *pubState) unmount(name, server string, status *rpc.MountStatus) {
 	status.LastUnmount = time.Now()
 	status.LastUnmountErr = ps.ns.Unmount(ps.ctx, name, server)
 	if status.LastUnmountErr != nil {
-		vlog.Errorf("ipc pub: couldn't unmount(%v, %v): %v", name, server, status.LastUnmountErr)
+		vlog.Errorf("rpc pub: couldn't unmount(%v, %v): %v", name, server, status.LastUnmountErr)
 	} else {
-		vlog.VI(2).Infof("ipc pub: unmount(%v, %v)", name, server)
+		vlog.VI(2).Infof("rpc pub: unmount(%v, %v)", name, server)
 		delete(ps.mounts, mountKey{name, server})
 	}
 }
@@ -339,8 +339,8 @@
 	return ret
 }
 
-func (ps *pubState) getStatus() ipc.MountState {
-	st := make([]ipc.MountStatus, 0, len(ps.mounts))
+func (ps *pubState) getStatus() rpc.MountState {
+	st := make([]rpc.MountStatus, 0, len(ps.mounts))
 	names := copyToSlice(ps.names)
 	servers := copyToSlice(ps.servers)
 	sort.Strings(names)
diff --git a/profiles/internal/lib/websocket/util_test.go b/profiles/internal/lib/websocket/util_test.go
index e94c9bf..cd7a046 100644
--- a/profiles/internal/lib/websocket/util_test.go
+++ b/profiles/internal/lib/websocket/util_test.go
@@ -11,7 +11,7 @@
 	"testing"
 	"time"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 )
 
 //go:generate v23 test generate
@@ -22,7 +22,7 @@
 	crcTable = crc64.MakeTable(crc64.ISO)
 }
 
-func newSender(t *testing.T, dialer ipc.DialerFunc, protocol, address string) net.Conn {
+func newSender(t *testing.T, dialer rpc.DialerFunc, protocol, address string) net.Conn {
 	conn, err := dialer(protocol, address, time.Minute)
 	if err != nil {
 		t.Fatalf("unexpected error: %s", err)
@@ -175,7 +175,7 @@
 	}
 }
 
-func packetRunner(t *testing.T, ln net.Listener, dialer ipc.DialerFunc, protocol, address string) {
+func packetRunner(t *testing.T, ln net.Listener, dialer rpc.DialerFunc, protocol, address string) {
 	nPackets := 100
 	go packetReceiver(t, ln, &backChannel{
 		crcChan: make(chan uint64, nPackets),
@@ -270,7 +270,7 @@
 	}
 }
 
-func byteRunner(t *testing.T, ln net.Listener, dialer ipc.DialerFunc, protocol, address string) {
+func byteRunner(t *testing.T, ln net.Listener, dialer rpc.DialerFunc, protocol, address string) {
 	nIterations := 10
 	go byteReceiver(t, ln, &backChannel{
 		byteChan: make(chan []byte, nIterations),
diff --git a/profiles/internal/lib/websocket/ws_test.go b/profiles/internal/lib/websocket/ws_test.go
index f592d10..acf2c52 100644
--- a/profiles/internal/lib/websocket/ws_test.go
+++ b/profiles/internal/lib/websocket/ws_test.go
@@ -5,12 +5,12 @@
 	"sync"
 	"testing"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 
 	"v.io/x/ref/profiles/internal/lib/websocket"
 )
 
-func packetTester(t *testing.T, dialer ipc.DialerFunc, listener ipc.ListenerFunc, txProtocol, rxProtocol string) {
+func packetTester(t *testing.T, dialer rpc.DialerFunc, listener rpc.ListenerFunc, txProtocol, rxProtocol string) {
 	ln, err := listener(rxProtocol, "127.0.0.1:0")
 	if err != nil {
 		t.Fatalf("unexpected error: %s", err)
@@ -24,7 +24,7 @@
 	packetRunner(t, ln, dialer, txProtocol, ln.Addr().String())
 }
 
-func byteTester(t *testing.T, dialer ipc.DialerFunc, listener ipc.ListenerFunc, txProtocol, rxProtocol string) {
+func byteTester(t *testing.T, dialer rpc.DialerFunc, listener rpc.ListenerFunc, txProtocol, rxProtocol string) {
 	ln, err := listener(rxProtocol, "127.0.0.1:0")
 	if err != nil {
 		t.Fatalf("unexpected error: %s", err)
@@ -67,7 +67,7 @@
 	defer ln.Close()
 
 	var pwg sync.WaitGroup
-	packetTest := func(dialer ipc.DialerFunc, protocol string) {
+	packetTest := func(dialer rpc.DialerFunc, protocol string) {
 		packetRunner(t, ln, dialer, protocol, ln.Addr().String())
 		pwg.Done()
 	}
@@ -80,7 +80,7 @@
 	pwg.Wait()
 
 	var bwg sync.WaitGroup
-	byteTest := func(dialer ipc.DialerFunc, protocol string) {
+	byteTest := func(dialer rpc.DialerFunc, protocol string) {
 		byteRunner(t, ln, dialer, protocol, ln.Addr().String())
 		bwg.Done()
 	}
diff --git a/profiles/internal/naming/endpoint.go b/profiles/internal/naming/endpoint.go
index 684c1fb..f1cbb66 100644
--- a/profiles/internal/naming/endpoint.go
+++ b/profiles/internal/naming/endpoint.go
@@ -8,8 +8,8 @@
 	"strconv"
 	"strings"
 
-	"v.io/v23/ipc/version"
 	"v.io/v23/naming"
+	"v.io/v23/rpc/version"
 )
 
 const (
@@ -32,8 +32,8 @@
 	Protocol      string
 	Address       string
 	RID           naming.RoutingID
-	MinIPCVersion version.IPCVersion
-	MaxIPCVersion version.IPCVersion
+	MinRPCVersion version.RPCVersion
+	MaxRPCVersion version.RPCVersion
 	Blessings     []string
 	IsMountTable  bool
 }
@@ -114,19 +114,19 @@
 	return nil
 }
 
-func parseIPCVersion(input string) (version.IPCVersion, error) {
+func parseRPCVersion(input string) (version.RPCVersion, error) {
 	if input == "" {
-		return version.UnknownIPCVersion, nil
+		return version.UnknownRPCVersion, nil
 	}
 	v, err := strconv.ParseUint(input, 10, 32)
 	if err != nil {
-		err = fmt.Errorf("invalid IPC version: %s, %v", err)
+		err = fmt.Errorf("invalid RPC version: %s, %v", err)
 	}
-	return version.IPCVersion(v), err
+	return version.RPCVersion(v), err
 }
 
-func printIPCVersion(v version.IPCVersion) string {
-	if v == version.UnknownIPCVersion {
+func printRPCVersion(v version.RPCVersion) string {
+	if v == version.UnknownRPCVersion {
 		return ""
 	}
 	return strconv.FormatUint(uint64(v), 10)
@@ -157,11 +157,11 @@
 	if err = ep.parseV1(parts[:4]); err != nil {
 		return err
 	}
-	if ep.MinIPCVersion, err = parseIPCVersion(parts[4]); err != nil {
-		return fmt.Errorf("invalid IPC version: %v", err)
+	if ep.MinRPCVersion, err = parseRPCVersion(parts[4]); err != nil {
+		return fmt.Errorf("invalid RPC version: %v", err)
 	}
-	if ep.MaxIPCVersion, err = parseIPCVersion(parts[5]); err != nil {
-		return fmt.Errorf("invalid IPC version: %v", err)
+	if ep.MaxRPCVersion, err = parseRPCVersion(parts[5]); err != nil {
+		return fmt.Errorf("invalid RPC version: %v", err)
 	}
 	return nil
 }
@@ -214,7 +214,7 @@
 	case 2:
 		return fmt.Sprintf("@2@%s@%s@%s@%s@%s@@",
 			ep.Protocol, ep.Address, ep.RID,
-			printIPCVersion(ep.MinIPCVersion), printIPCVersion(ep.MaxIPCVersion))
+			printRPCVersion(ep.MinRPCVersion), printRPCVersion(ep.MaxRPCVersion))
 	case 3:
 		mt := "s"
 		if ep.IsMountTable {
@@ -222,7 +222,7 @@
 		}
 		return fmt.Sprintf("@3@%s@%s@%s@%s@%s@%s@@",
 			ep.Protocol, ep.Address, ep.RID,
-			printIPCVersion(ep.MinIPCVersion), printIPCVersion(ep.MaxIPCVersion),
+			printRPCVersion(ep.MinRPCVersion), printRPCVersion(ep.MaxRPCVersion),
 			mt)
 	case 4:
 		mt := "s"
@@ -232,7 +232,7 @@
 		}
 		return fmt.Sprintf("@4@%s@%s@%s@%s@%s@%s@%s@@",
 			ep.Protocol, ep.Address, ep.RID,
-			printIPCVersion(ep.MinIPCVersion), printIPCVersion(ep.MaxIPCVersion),
+			printRPCVersion(ep.MinRPCVersion), printRPCVersion(ep.MaxRPCVersion),
 			mt, blessings)
 	}
 }
@@ -267,9 +267,9 @@
 	return ep.Blessings
 }
 
-func (ep *Endpoint) IPCVersionRange() version.IPCVersionRange {
+func (ep *Endpoint) RPCVersionRange() version.RPCVersionRange {
 	//nologcall
-	return version.IPCVersionRange{Min: ep.MinIPCVersion, Max: ep.MaxIPCVersion}
+	return version.RPCVersionRange{Min: ep.MinRPCVersion, Max: ep.MaxRPCVersion}
 }
 
 type addr struct {
diff --git a/profiles/internal/naming/endpoint_test.go b/profiles/internal/naming/endpoint_test.go
index 5ece8ed..06f3563 100644
--- a/profiles/internal/naming/endpoint_test.go
+++ b/profiles/internal/naming/endpoint_test.go
@@ -5,8 +5,8 @@
 	"reflect"
 	"testing"
 
-	"v.io/v23/ipc/version"
 	"v.io/v23/naming"
+	"v.io/v23/rpc/version"
 )
 
 func TestEndpoint(t *testing.T) {
@@ -24,56 +24,56 @@
 		Protocol:      naming.UnknownProtocol,
 		Address:       "batman.com:2345",
 		RID:           naming.FixedRoutingID(0xdabbad00),
-		MinIPCVersion: 1,
-		MaxIPCVersion: 10,
+		MinRPCVersion: 1,
+		MaxRPCVersion: 10,
 		IsMountTable:  true,
 	}
 	v2hp := &Endpoint{
 		Protocol:      naming.UnknownProtocol,
 		Address:       "batman.com:2345",
 		RID:           naming.FixedRoutingID(0x0),
-		MinIPCVersion: 2,
-		MaxIPCVersion: 3,
+		MinRPCVersion: 2,
+		MaxRPCVersion: 3,
 		IsMountTable:  true,
 	}
 	v3s := &Endpoint{
 		Protocol:      naming.UnknownProtocol,
 		Address:       "batman.com:2345",
 		RID:           naming.FixedRoutingID(0x0),
-		MinIPCVersion: 2,
-		MaxIPCVersion: 3,
+		MinRPCVersion: 2,
+		MaxRPCVersion: 3,
 		IsMountTable:  false,
 	}
 	v3m := &Endpoint{
 		Protocol:      naming.UnknownProtocol,
 		Address:       "batman.com:2345",
 		RID:           naming.FixedRoutingID(0xdabbad00),
-		MinIPCVersion: 2,
-		MaxIPCVersion: 3,
+		MinRPCVersion: 2,
+		MaxRPCVersion: 3,
 		IsMountTable:  true,
 	}
 	v3tcp := &Endpoint{
 		Protocol:      "tcp",
 		Address:       "batman.com:2345",
 		RID:           naming.FixedRoutingID(0x0),
-		MinIPCVersion: 2,
-		MaxIPCVersion: 3,
+		MinRPCVersion: 2,
+		MaxRPCVersion: 3,
 		IsMountTable:  false,
 	}
 	v3ws6 := &Endpoint{
 		Protocol:      "ws6",
 		Address:       "batman.com:2345",
 		RID:           naming.FixedRoutingID(0x0),
-		MinIPCVersion: 2,
-		MaxIPCVersion: 3,
+		MinRPCVersion: 2,
+		MaxRPCVersion: 3,
 		IsMountTable:  false,
 	}
 	v4 := &Endpoint{
 		Protocol:      "tcp",
 		Address:       "batman.com:2345",
 		RID:           naming.FixedRoutingID(0xba77),
-		MinIPCVersion: 4,
-		MaxIPCVersion: 5,
+		MinRPCVersion: 4,
+		MaxRPCVersion: 5,
 		IsMountTable:  true,
 		Blessings:     []string{"dev.v.io/foo@bar.com", "dev.v.io/bar@bar.com/delegate"},
 	}
@@ -81,8 +81,8 @@
 		Protocol:      "tcp",
 		Address:       "batman.com:2345",
 		RID:           naming.FixedRoutingID(0xba77),
-		MinIPCVersion: 4,
-		MaxIPCVersion: 5,
+		MinRPCVersion: 4,
+		MaxRPCVersion: 5,
 		IsMountTable:  true,
 		// Blessings that look similar to other parts of the endpoint.
 		Blessings: []string{"@@", "@s", "@m"},
@@ -138,10 +138,10 @@
 		Endpoint naming.Endpoint
 		String   string
 		Input    string
-		min, max version.IPCVersion
+		min, max version.RPCVersion
 		servesMT bool
 	}{
-		{v1, "@2@@batman.com:1234@000000000000000000000000dabbad00@@@@", "", version.UnknownIPCVersion, version.UnknownIPCVersion, true},
+		{v1, "@2@@batman.com:1234@000000000000000000000000dabbad00@@@@", "", version.UnknownRPCVersion, version.UnknownRPCVersion, true},
 		{v2, "@2@@batman.com:2345@000000000000000000000000dabbad00@1@10@@", "", 1, 10, true},
 		{v2hp, "@2@@batman.com:2345@00000000000000000000000000000000@2@3@@", "batman.com:2345", 2, 3, true},
 	}
@@ -158,7 +158,7 @@
 			ep, err = NewEndpoint(str)
 		} else {
 			ep, err = NewEndpoint(naming.FormatEndpoint(naming.UnknownProtocol, str,
-				version.IPCVersionRange{test.min, test.max},
+				version.RPCVersionRange{test.min, test.max},
 				naming.ServesMountTableOpt(test.servesMT)))
 		}
 		if err != nil {
@@ -230,26 +230,26 @@
 }
 
 func TestParseHostPort(t *testing.T) {
-	var min, max version.IPCVersion = 1, 2
+	var min, max version.RPCVersion = 1, 2
 	dns := &Endpoint{
 		Protocol:      "tcp",
 		Address:       "batman.com:4444",
-		MinIPCVersion: min,
-		MaxIPCVersion: max,
+		MinRPCVersion: min,
+		MaxRPCVersion: max,
 		IsMountTable:  true,
 	}
 	ipv4 := &Endpoint{
 		Protocol:      "tcp",
 		Address:       "192.168.1.1:4444",
-		MinIPCVersion: min,
-		MaxIPCVersion: max,
+		MinRPCVersion: min,
+		MaxRPCVersion: max,
 		IsMountTable:  true,
 	}
 	ipv6 := &Endpoint{
 		Protocol:      "tcp",
 		Address:       "[01:02::]:4444",
-		MinIPCVersion: min,
-		MaxIPCVersion: max,
+		MinRPCVersion: min,
+		MaxRPCVersion: max,
 		IsMountTable:  true,
 	}
 	testcases := []struct {
@@ -263,7 +263,7 @@
 
 	for _, test := range testcases {
 		addr := net.JoinHostPort(test.Host, test.Port)
-		epString := naming.FormatEndpoint("tcp", addr, version.IPCVersionRange{min, max})
+		epString := naming.FormatEndpoint("tcp", addr, version.RPCVersionRange{min, max})
 		if ep, err := NewEndpoint(epString); err != nil {
 			t.Errorf("NewEndpoint(%q) failed with %v", addr, err)
 		} else {
diff --git a/profiles/internal/naming/namespace/acl.go b/profiles/internal/naming/namespace/acl.go
index f6c297a..ded2059 100644
--- a/profiles/internal/naming/namespace/acl.go
+++ b/profiles/internal/naming/namespace/acl.go
@@ -3,14 +3,14 @@
 import (
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/services/security/access"
 	"v.io/x/lib/vlog"
 )
 
 // setAccessListInMountTable sets the AccessList in a single server.
-func setAccessListInMountTable(ctx *context.T, client ipc.Client, name string, acl access.Permissions, etag, id string) (s status) {
+func setAccessListInMountTable(ctx *context.T, client rpc.Client, name string, acl access.Permissions, etag, id string) (s status) {
 	s.id = id
 	ctx, _ = context.WithTimeout(ctx, callTimeout)
 	call, err := client.StartCall(ctx, name, "SetPermissions", []interface{}{acl, etag}, options.NoResolve{})
diff --git a/profiles/internal/naming/namespace/acl_test.go b/profiles/internal/naming/namespace/acl_test.go
index 7e7b0a7..c376e03 100644
--- a/profiles/internal/naming/namespace/acl_test.go
+++ b/profiles/internal/naming/namespace/acl_test.go
@@ -7,8 +7,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/security/access"
 
@@ -62,7 +62,7 @@
 
 type nopServer struct{ x int }
 
-func (s *nopServer) NOP(call ipc.ServerCall) error {
+func (s *nopServer) NOP(call rpc.ServerCall) error {
 	return nil
 }
 
diff --git a/profiles/internal/naming/namespace/all_test.go b/profiles/internal/naming/namespace/all_test.go
index 05f6e9f..d10ece6 100644
--- a/profiles/internal/naming/namespace/all_test.go
+++ b/profiles/internal/naming/namespace/all_test.go
@@ -10,10 +10,10 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/naming/ns"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
@@ -101,13 +101,13 @@
 	suffix string
 }
 
-func (testServer) KnockKnock(call ipc.ServerCall) (string, error) {
+func (testServer) KnockKnock(call rpc.ServerCall) (string, error) {
 	return "Who's there?", nil
 }
 
 // testServer has the following namespace:
 // "" -> {level1} -> {level2}
-func (t *testServer) GlobChildren__(ipc.ServerCall) (<-chan string, error) {
+func (t *testServer) GlobChildren__(rpc.ServerCall) (<-chan string, error) {
 	ch := make(chan string, 1)
 	switch t.suffix {
 	case "":
@@ -172,12 +172,12 @@
 
 type serverEntry struct {
 	mountPoint string
-	server     ipc.Server
+	server     rpc.Server
 	endpoint   naming.Endpoint
 	name       string
 }
 
-func runServer(t *testing.T, ctx *context.T, disp ipc.Dispatcher, mountPoint string) *serverEntry {
+func runServer(t *testing.T, ctx *context.T, disp rpc.Dispatcher, mountPoint string) *serverEntry {
 	return run(t, ctx, disp, mountPoint, false)
 }
 
@@ -189,7 +189,7 @@
 	return run(t, ctx, mtd, mountPoint, true)
 }
 
-func run(t *testing.T, ctx *context.T, disp ipc.Dispatcher, mountPoint string, mt bool) *serverEntry {
+func run(t *testing.T, ctx *context.T, disp rpc.Dispatcher, mountPoint string, mt bool) *serverEntry {
 	s, err := v23.NewServer(ctx, options.ServesMountTable(mt))
 	if err != nil {
 		boom(t, "r.NewServer: %s", err)
@@ -470,7 +470,7 @@
 	mu        sync.Mutex
 }
 
-func (g *GlobbableServer) Glob__(ipc.ServerCall, string) (<-chan naming.GlobReply, error) {
+func (g *GlobbableServer) Glob__(rpc.ServerCall, string) (<-chan naming.GlobReply, error) {
 	g.mu.Lock()
 	defer g.mu.Unlock()
 	g.callCount++
diff --git a/profiles/internal/naming/namespace/glob.go b/profiles/internal/naming/namespace/glob.go
index 82cc8bd..7373f04 100644
--- a/profiles/internal/naming/namespace/glob.go
+++ b/profiles/internal/naming/namespace/glob.go
@@ -8,8 +8,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
 )
@@ -49,7 +49,7 @@
 		t.error = nil
 		return
 	}
-	call, err := ns.parallelStartCall(ctx, client, servers, ipc.GlobMethod, []interface{}{pstr})
+	call, err := ns.parallelStartCall(ctx, client, servers, rpc.GlobMethod, []interface{}{pstr})
 	if err != nil {
 		t.error = err
 		return
diff --git a/profiles/internal/naming/namespace/mount.go b/profiles/internal/naming/namespace/mount.go
index 85d05c6..b39697f 100644
--- a/profiles/internal/naming/namespace/mount.go
+++ b/profiles/internal/naming/namespace/mount.go
@@ -6,15 +6,15 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
 )
 
 // mountIntoMountTable mounts a single server into a single mount table.
-func mountIntoMountTable(ctx *context.T, client ipc.Client, name, server string, patterns []security.BlessingPattern, ttl time.Duration, flags naming.MountFlag, id string) (s status) {
+func mountIntoMountTable(ctx *context.T, client rpc.Client, name, server string, patterns []security.BlessingPattern, ttl time.Duration, flags naming.MountFlag, id string) (s status) {
 	s.id = id
 	ctx, _ = context.WithTimeout(ctx, callTimeout)
 	call, err := client.StartCall(ctx, name, "MountX", []interface{}{server, patterns, uint32(ttl.Seconds()), flags}, options.NoResolve{})
@@ -69,7 +69,7 @@
 }
 
 // unmountFromMountTable removes a single mounted server from a single mount table.
-func unmountFromMountTable(ctx *context.T, client ipc.Client, name, server string, id string) (s status) {
+func unmountFromMountTable(ctx *context.T, client rpc.Client, name, server string, id string) (s status) {
 	s.id = id
 	ctx, _ = context.WithTimeout(ctx, callTimeout)
 	call, err := client.StartCall(ctx, name, "Unmount", []interface{}{server}, options.NoResolve{})
@@ -96,7 +96,7 @@
 
 // deleteFromMountTable deletes a name from a single mount table.  If there are any children
 // and deleteSubtree isn't true, nothing is deleted.
-func deleteFromMountTable(ctx *context.T, client ipc.Client, name string, deleteSubtree bool, id string) (s status) {
+func deleteFromMountTable(ctx *context.T, client rpc.Client, name string, deleteSubtree bool, id string) (s status) {
 	s.id = id
 	ctx, _ = context.WithTimeout(ctx, callTimeout)
 	call, err := client.StartCall(ctx, name, "Delete", []interface{}{deleteSubtree}, options.NoResolve{})
diff --git a/profiles/internal/naming/namespace/namespace.go b/profiles/internal/naming/namespace/namespace.go
index d2cc167..5862908 100644
--- a/profiles/internal/naming/namespace/namespace.go
+++ b/profiles/internal/naming/namespace/namespace.go
@@ -164,14 +164,14 @@
 func notAnMT(err error) bool {
 	switch verror.ErrorID(err) {
 	case verror.ErrBadArg.ID:
-		// This should cover "ipc: wrong number of in-args".
+		// This should cover "rpc: wrong number of in-args".
 		return true
 	case verror.ErrNoExist.ID:
-		// This should cover "ipc: unknown method", "ipc: dispatcher not
+		// This should cover "rpc: unknown method", "rpc: dispatcher not
 		// found", and dispatcher Lookup not found errors.
 		return true
 	case verror.ErrBadProtocol.ID:
-		// This covers "ipc: response decoding failed: EOF".
+		// This covers "rpc: response decoding failed: EOF".
 		return true
 	}
 	return false
diff --git a/profiles/internal/naming/namespace/parallelstartcall.go b/profiles/internal/naming/namespace/parallelstartcall.go
index 115a028..0a94012 100644
--- a/profiles/internal/naming/namespace/parallelstartcall.go
+++ b/profiles/internal/naming/namespace/parallelstartcall.go
@@ -2,9 +2,9 @@
 
 import (
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/verror"
 	inaming "v.io/x/ref/profiles/internal/naming"
 )
@@ -12,16 +12,16 @@
 type startStatus struct {
 	index int
 	err   error
-	call  ipc.ClientCall
+	call  rpc.ClientCall
 }
 
-func tryStartCall(ctx *context.T, client ipc.Client, target, method string, args []interface{}, c chan startStatus, index int) {
+func tryStartCall(ctx *context.T, client rpc.Client, target, method string, args []interface{}, c chan startStatus, index int) {
 	call, err := client.StartCall(ctx, target, method, args, options.NoResolve{})
 	c <- startStatus{index: index, err: err, call: call}
 }
 
 // parallelStartCall returns the first succeeding StartCall.
-func (ns *namespace) parallelStartCall(ctx *context.T, client ipc.Client, servers []string, method string, args []interface{}) (ipc.ClientCall, error) {
+func (ns *namespace) parallelStartCall(ctx *context.T, client rpc.Client, servers []string, method string, args []interface{}) (rpc.ClientCall, error) {
 	if len(servers) == 0 {
 		return nil, verror.New(verror.ErrNoExist, ctx, "no servers to resolve query")
 	}
diff --git a/profiles/internal/naming/namespace/resolve.go b/profiles/internal/naming/namespace/resolve.go
index 981f08f..3bd0360 100644
--- a/profiles/internal/naming/namespace/resolve.go
+++ b/profiles/internal/naming/namespace/resolve.go
@@ -6,15 +6,15 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
 )
 
-func (ns *namespace) resolveAgainstMountTable(ctx *context.T, client ipc.Client, e *naming.MountEntry, opts ...ipc.CallOpt) (*naming.MountEntry, error) {
+func (ns *namespace) resolveAgainstMountTable(ctx *context.T, client rpc.Client, e *naming.MountEntry, opts ...rpc.CallOpt) (*naming.MountEntry, error) {
 	// Try each server till one answers.
 	finalErr := errors.New("no servers to resolve query")
 	skipServerAuth := skipServerAuthorization(opts)
@@ -190,10 +190,10 @@
 	return false
 }
 
-func getCallOpts(opts []naming.ResolveOpt) []ipc.CallOpt {
-	var out []ipc.CallOpt
+func getCallOpts(opts []naming.ResolveOpt) []rpc.CallOpt {
+	var out []rpc.CallOpt
 	for _, o := range opts {
-		if co, ok := o.(ipc.CallOpt); ok {
+		if co, ok := o.(rpc.CallOpt); ok {
 			out = append(out, co)
 		}
 	}
@@ -214,7 +214,7 @@
 	}
 }
 
-func setAllowedServers(opts []ipc.CallOpt, patterns []string) []ipc.CallOpt {
+func setAllowedServers(opts []rpc.CallOpt, patterns []string) []rpc.CallOpt {
 	if len(patterns) == 0 {
 		return opts
 	}
@@ -225,7 +225,7 @@
 	return append(opts, p)
 }
 
-func skipServerAuthorization(opts []ipc.CallOpt) bool {
+func skipServerAuthorization(opts []rpc.CallOpt) bool {
 	for _, o := range opts {
 		if _, ok := o.(options.SkipResolveAuthorization); ok {
 			return true
diff --git a/profiles/internal/ipc/benchmark/README.txt b/profiles/internal/rpc/benchmark/README.txt
similarity index 100%
rename from profiles/internal/ipc/benchmark/README.txt
rename to profiles/internal/rpc/benchmark/README.txt
diff --git a/profiles/internal/ipc/benchmark/RESULTS.txt b/profiles/internal/rpc/benchmark/RESULTS.txt
similarity index 100%
rename from profiles/internal/ipc/benchmark/RESULTS.txt
rename to profiles/internal/rpc/benchmark/RESULTS.txt
diff --git a/profiles/internal/ipc/benchmark/benchmark.vdl b/profiles/internal/rpc/benchmark/benchmark.vdl
similarity index 100%
rename from profiles/internal/ipc/benchmark/benchmark.vdl
rename to profiles/internal/rpc/benchmark/benchmark.vdl
diff --git a/profiles/internal/ipc/benchmark/benchmark.vdl.go b/profiles/internal/rpc/benchmark/benchmark.vdl.go
similarity index 85%
rename from profiles/internal/ipc/benchmark/benchmark.vdl.go
rename to profiles/internal/rpc/benchmark/benchmark.vdl.go
index 2a94df3..187673d 100644
--- a/profiles/internal/ipc/benchmark/benchmark.vdl.go
+++ b/profiles/internal/rpc/benchmark/benchmark.vdl.go
@@ -10,7 +10,7 @@
 	"io"
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/vdl"
 
 	// VDL user imports
@@ -21,22 +21,22 @@
 // containing Benchmark methods.
 type BenchmarkClientMethods interface {
 	// Echo returns the payload that it receives.
-	Echo(ctx *context.T, Payload []byte, opts ...ipc.CallOpt) ([]byte, error)
+	Echo(ctx *context.T, Payload []byte, opts ...rpc.CallOpt) ([]byte, error)
 	// EchoStream returns the payload that it receives via the stream.
-	EchoStream(*context.T, ...ipc.CallOpt) (BenchmarkEchoStreamClientCall, error)
+	EchoStream(*context.T, ...rpc.CallOpt) (BenchmarkEchoStreamClientCall, error)
 }
 
 // BenchmarkClientStub adds universal methods to BenchmarkClientMethods.
 type BenchmarkClientStub interface {
 	BenchmarkClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // BenchmarkClient returns a client stub for Benchmark.
-func BenchmarkClient(name string, opts ...ipc.BindOpt) BenchmarkClientStub {
-	var client ipc.Client
+func BenchmarkClient(name string, opts ...rpc.BindOpt) BenchmarkClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -45,18 +45,18 @@
 
 type implBenchmarkClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implBenchmarkClientStub) c(ctx *context.T) ipc.Client {
+func (c implBenchmarkClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implBenchmarkClientStub) Echo(ctx *context.T, i0 []byte, opts ...ipc.CallOpt) (o0 []byte, err error) {
-	var call ipc.ClientCall
+func (c implBenchmarkClientStub) Echo(ctx *context.T, i0 []byte, opts ...rpc.CallOpt) (o0 []byte, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Echo", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -64,8 +64,8 @@
 	return
 }
 
-func (c implBenchmarkClientStub) EchoStream(ctx *context.T, opts ...ipc.CallOpt) (ocall BenchmarkEchoStreamClientCall, err error) {
-	var call ipc.ClientCall
+func (c implBenchmarkClientStub) EchoStream(ctx *context.T, opts ...rpc.CallOpt) (ocall BenchmarkEchoStreamClientCall, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "EchoStream", nil, opts...); err != nil {
 		return
 	}
@@ -123,7 +123,7 @@
 }
 
 type implBenchmarkEchoStreamClientCall struct {
-	ipc.ClientCall
+	rpc.ClientCall
 	valRecv []byte
 	errRecv error
 }
@@ -179,18 +179,18 @@
 // implements for Benchmark.
 type BenchmarkServerMethods interface {
 	// Echo returns the payload that it receives.
-	Echo(call ipc.ServerCall, Payload []byte) ([]byte, error)
+	Echo(call rpc.ServerCall, Payload []byte) ([]byte, error)
 	// EchoStream returns the payload that it receives via the stream.
 	EchoStream(BenchmarkEchoStreamServerCall) error
 }
 
 // BenchmarkServerStubMethods is the server interface containing
-// Benchmark methods, as expected by ipc.Server.
+// Benchmark methods, as expected by rpc.Server.
 // The only difference between this interface and BenchmarkServerMethods
 // is the streaming methods.
 type BenchmarkServerStubMethods interface {
 	// Echo returns the payload that it receives.
-	Echo(call ipc.ServerCall, Payload []byte) ([]byte, error)
+	Echo(call rpc.ServerCall, Payload []byte) ([]byte, error)
 	// EchoStream returns the payload that it receives via the stream.
 	EchoStream(*BenchmarkEchoStreamServerCallStub) error
 }
@@ -199,21 +199,21 @@
 type BenchmarkServerStub interface {
 	BenchmarkServerStubMethods
 	// Describe the Benchmark interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // BenchmarkServer returns a server stub for Benchmark.
 // It converts an implementation of BenchmarkServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func BenchmarkServer(impl BenchmarkServerMethods) BenchmarkServerStub {
 	stub := implBenchmarkServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -221,10 +221,10 @@
 
 type implBenchmarkServerStub struct {
 	impl BenchmarkServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implBenchmarkServerStub) Echo(call ipc.ServerCall, i0 []byte) ([]byte, error) {
+func (s implBenchmarkServerStub) Echo(call rpc.ServerCall, i0 []byte) ([]byte, error) {
 	return s.impl.Echo(call, i0)
 }
 
@@ -232,29 +232,29 @@
 	return s.impl.EchoStream(call)
 }
 
-func (s implBenchmarkServerStub) Globber() *ipc.GlobState {
+func (s implBenchmarkServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implBenchmarkServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{BenchmarkDesc}
+func (s implBenchmarkServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{BenchmarkDesc}
 }
 
 // BenchmarkDesc describes the Benchmark interface.
-var BenchmarkDesc ipc.InterfaceDesc = descBenchmark
+var BenchmarkDesc rpc.InterfaceDesc = descBenchmark
 
 // descBenchmark hides the desc to keep godoc clean.
-var descBenchmark = ipc.InterfaceDesc{
+var descBenchmark = rpc.InterfaceDesc{
 	Name:    "Benchmark",
-	PkgPath: "v.io/x/ref/profiles/internal/ipc/benchmark",
-	Methods: []ipc.MethodDesc{
+	PkgPath: "v.io/x/ref/profiles/internal/rpc/benchmark",
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Echo",
 			Doc:  "// Echo returns the payload that it receives.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"Payload", ``}, // []byte
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // []byte
 			},
 			Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Read"))},
@@ -292,20 +292,20 @@
 
 // BenchmarkEchoStreamServerCall represents the context passed to Benchmark.EchoStream.
 type BenchmarkEchoStreamServerCall interface {
-	ipc.ServerCall
+	rpc.ServerCall
 	BenchmarkEchoStreamServerStream
 }
 
-// BenchmarkEchoStreamServerCallStub is a wrapper that converts ipc.StreamServerCall into
+// BenchmarkEchoStreamServerCallStub is a wrapper that converts rpc.StreamServerCall into
 // a typesafe stub that implements BenchmarkEchoStreamServerCall.
 type BenchmarkEchoStreamServerCallStub struct {
-	ipc.StreamServerCall
+	rpc.StreamServerCall
 	valRecv []byte
 	errRecv error
 }
 
-// Init initializes BenchmarkEchoStreamServerCallStub from ipc.StreamServerCall.
-func (s *BenchmarkEchoStreamServerCallStub) Init(call ipc.StreamServerCall) {
+// Init initializes BenchmarkEchoStreamServerCallStub from rpc.StreamServerCall.
+func (s *BenchmarkEchoStreamServerCallStub) Init(call rpc.StreamServerCall) {
 	s.StreamServerCall = call
 }
 
diff --git a/profiles/internal/ipc/benchmark/benchmark/main.go b/profiles/internal/rpc/benchmark/benchmark/main.go
similarity index 96%
rename from profiles/internal/ipc/benchmark/benchmark/main.go
rename to profiles/internal/rpc/benchmark/benchmark/main.go
index 118005e..2f94869 100644
--- a/profiles/internal/ipc/benchmark/benchmark/main.go
+++ b/profiles/internal/rpc/benchmark/benchmark/main.go
@@ -9,7 +9,7 @@
 	"time"
 
 	_ "v.io/x/ref/profiles"
-	"v.io/x/ref/profiles/internal/ipc/benchmark/internal"
+	"v.io/x/ref/profiles/internal/rpc/benchmark/internal"
 	tbm "v.io/x/ref/test/benchmark"
 
 	"v.io/v23"
diff --git a/profiles/internal/ipc/benchmark/benchmark_test.go b/profiles/internal/rpc/benchmark/benchmark_test.go
similarity index 98%
rename from profiles/internal/ipc/benchmark/benchmark_test.go
rename to profiles/internal/rpc/benchmark/benchmark_test.go
index ce11b2c..4b4024c 100644
--- a/profiles/internal/ipc/benchmark/benchmark_test.go
+++ b/profiles/internal/rpc/benchmark/benchmark_test.go
@@ -7,7 +7,7 @@
 	"v.io/v23"
 	"v.io/v23/context"
 
-	"v.io/x/ref/profiles/internal/ipc/benchmark/internal"
+	"v.io/x/ref/profiles/internal/rpc/benchmark/internal"
 	_ "v.io/x/ref/profiles/static"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/benchmark"
diff --git a/profiles/internal/ipc/benchmark/benchmarkd/main.go b/profiles/internal/rpc/benchmark/benchmarkd/main.go
similarity index 87%
rename from profiles/internal/ipc/benchmark/benchmarkd/main.go
rename to profiles/internal/rpc/benchmark/benchmarkd/main.go
index b68e17b..e58a590 100644
--- a/profiles/internal/ipc/benchmark/benchmarkd/main.go
+++ b/profiles/internal/rpc/benchmark/benchmarkd/main.go
@@ -6,7 +6,7 @@
 	"v.io/x/lib/vlog"
 
 	"v.io/x/ref/lib/signals"
-	"v.io/x/ref/profiles/internal/ipc/benchmark/internal"
+	"v.io/x/ref/profiles/internal/rpc/benchmark/internal"
 	_ "v.io/x/ref/profiles/roaming"
 )
 
diff --git a/profiles/internal/ipc/benchmark/glob/README.txt b/profiles/internal/rpc/benchmark/glob/README.txt
similarity index 100%
rename from profiles/internal/ipc/benchmark/glob/README.txt
rename to profiles/internal/rpc/benchmark/glob/README.txt
diff --git a/profiles/internal/ipc/benchmark/glob/doc.go b/profiles/internal/rpc/benchmark/glob/doc.go
similarity index 100%
rename from profiles/internal/ipc/benchmark/glob/doc.go
rename to profiles/internal/rpc/benchmark/glob/doc.go
diff --git a/profiles/internal/ipc/benchmark/glob/glob_test.go b/profiles/internal/rpc/benchmark/glob/glob_test.go
similarity index 95%
rename from profiles/internal/ipc/benchmark/glob/glob_test.go
rename to profiles/internal/rpc/benchmark/glob/glob_test.go
index 6a7ee80..964f500 100644
--- a/profiles/internal/ipc/benchmark/glob/glob_test.go
+++ b/profiles/internal/rpc/benchmark/glob/glob_test.go
@@ -6,8 +6,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 
 	_ "v.io/x/ref/profiles"
@@ -98,7 +98,7 @@
 	bufferSize int
 }
 
-func (o *globObject) Glob__(call ipc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
+func (o *globObject) Glob__(call rpc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
 	if pattern != "*" {
 		panic("this benchmark only works with pattern='*'")
 	}
@@ -118,7 +118,7 @@
 	bufferSize int
 }
 
-func (o *globChildrenObject) GlobChildren__(call ipc.ServerCall) (<-chan string, error) {
+func (o *globChildrenObject) GlobChildren__(call rpc.ServerCall) (<-chan string, error) {
 	if call.Suffix() != "" {
 		return nil, nil
 	}
@@ -134,7 +134,7 @@
 
 func globClient(b *testing.B, ctx *context.T, name string) (int, error) {
 	client := v23.GetClient(ctx)
-	call, err := client.StartCall(ctx, name, ipc.GlobMethod, []interface{}{"*"})
+	call, err := client.StartCall(ctx, name, rpc.GlobMethod, []interface{}{"*"})
 	if err != nil {
 		return 0, err
 	}
diff --git a/profiles/internal/ipc/benchmark/internal/client.go b/profiles/internal/rpc/benchmark/internal/client.go
similarity index 98%
rename from profiles/internal/ipc/benchmark/internal/client.go
rename to profiles/internal/rpc/benchmark/internal/client.go
index 54fbfc6..622ca63 100644
--- a/profiles/internal/ipc/benchmark/internal/client.go
+++ b/profiles/internal/rpc/benchmark/internal/client.go
@@ -9,7 +9,7 @@
 	"v.io/v23/context"
 	"v.io/x/lib/vlog"
 
-	"v.io/x/ref/profiles/internal/ipc/benchmark"
+	"v.io/x/ref/profiles/internal/rpc/benchmark"
 	tbm "v.io/x/ref/test/benchmark"
 )
 
diff --git a/profiles/internal/ipc/benchmark/internal/server.go b/profiles/internal/rpc/benchmark/internal/server.go
similarity index 85%
rename from profiles/internal/ipc/benchmark/internal/server.go
rename to profiles/internal/rpc/benchmark/internal/server.go
index 5228f5b..5345f08 100644
--- a/profiles/internal/ipc/benchmark/internal/server.go
+++ b/profiles/internal/rpc/benchmark/internal/server.go
@@ -5,16 +5,16 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 
-	"v.io/x/ref/profiles/internal/ipc/benchmark"
+	"v.io/x/ref/profiles/internal/rpc/benchmark"
 )
 
 type impl struct {
 }
 
-func (i *impl) Echo(call ipc.ServerCall, payload []byte) ([]byte, error) {
+func (i *impl) Echo(call rpc.ServerCall, payload []byte) ([]byte, error) {
 	return payload, nil
 }
 
@@ -33,7 +33,7 @@
 // StartServer starts a server that implements the Benchmark service. The
 // server listens to the given protocol and address, and returns the veyron
 // address of the server and a callback function to stop the server.
-func StartServer(ctx *context.T, listenSpec ipc.ListenSpec) (string, func()) {
+func StartServer(ctx *context.T, listenSpec rpc.ListenSpec) (string, func()) {
 	server, err := v23.NewServer(ctx)
 	if err != nil {
 		vlog.Fatalf("NewServer failed: %v", err)
diff --git a/profiles/internal/ipc/blessings_cache.go b/profiles/internal/rpc/blessings_cache.go
similarity index 89%
rename from profiles/internal/ipc/blessings_cache.go
rename to profiles/internal/rpc/blessings_cache.go
index f0baa06..4d41476 100644
--- a/profiles/internal/ipc/blessings_cache.go
+++ b/profiles/internal/rpc/blessings_cache.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"crypto/sha256"
@@ -6,13 +6,13 @@
 	"reflect"
 	"sync"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
-	"v.io/x/ref/profiles/internal/ipc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream"
 )
 
 // clientEncodeBlessings gets or inserts the blessings into the cache.
-func clientEncodeBlessings(cache stream.VCDataCache, blessings security.Blessings) ipc.BlessingsRequest {
+func clientEncodeBlessings(cache stream.VCDataCache, blessings security.Blessings) rpc.BlessingsRequest {
 	blessingsCacheAny := cache.GetOrInsert(clientBlessingsCacheKey{}, newClientBlessingsCache)
 	blessingsCache := blessingsCacheAny.(*clientBlessingsCache)
 	return blessingsCache.getOrInsert(blessings)
@@ -28,7 +28,7 @@
 
 // serverDecodeBlessings insert the key and blessings into the cache or get the blessings if only
 // key is provided in req.
-func serverDecodeBlessings(cache stream.VCDataCache, req ipc.BlessingsRequest, stats *ipcStats) (security.Blessings, error) {
+func serverDecodeBlessings(cache stream.VCDataCache, req rpc.BlessingsRequest, stats *rpcStats) (security.Blessings, error) {
 	blessingsCacheAny := cache.GetOrInsert(serverBlessingsCacheKey{}, newServerBlessingsCache)
 	blessingsCache := blessingsCacheAny.(*serverBlessingsCache)
 	return blessingsCache.getOrInsert(req, stats)
@@ -74,7 +74,7 @@
 	return
 }
 
-func (c *clientBlessingsCache) getOrInsert(blessings security.Blessings) ipc.BlessingsRequest {
+func (c *clientBlessingsCache) getOrInsert(blessings security.Blessings) rpc.BlessingsRequest {
 	key := getBlessingsHashKey(blessings)
 	c.RLock()
 	val, exists := c.m[key]
@@ -103,13 +103,13 @@
 	c.Unlock()
 }
 
-func (c *clientBlessingsCache) makeBlessingsRequest(val clientCacheValue, blessings security.Blessings) ipc.BlessingsRequest {
+func (c *clientBlessingsCache) makeBlessingsRequest(val clientCacheValue, blessings security.Blessings) rpc.BlessingsRequest {
 	if val.ack {
 		// when the value is acknowledged, only send the key, since the server has confirmed that it knows the key.
-		return ipc.BlessingsRequest{Key: val.id}
+		return rpc.BlessingsRequest{Key: val.id}
 	}
 	// otherwise we still need to send both key and blessings, but we must ensure that we send the same key.
-	return ipc.BlessingsRequest{val.id, &blessings}
+	return rpc.BlessingsRequest{val.id, &blessings}
 }
 
 // nextIdLocked creates a new id for inserting blessings. It must be called after acquiring a writer lock.
@@ -131,7 +131,7 @@
 	return &serverBlessingsCache{m: make(map[uint64]security.Blessings)}
 }
 
-func (c *serverBlessingsCache) getOrInsert(req ipc.BlessingsRequest, stats *ipcStats) (security.Blessings, error) {
+func (c *serverBlessingsCache) getOrInsert(req rpc.BlessingsRequest, stats *rpcStats) (security.Blessings, error) {
 	// In the case that the key sent is 0, we are running in VCSecurityNone
 	// and should return the zero value.
 	if req.Key == 0 {
@@ -143,7 +143,7 @@
 		cached, exists := c.m[req.Key]
 		c.RUnlock()
 		if !exists {
-			return security.Blessings{}, fmt.Errorf("ipc: key was not in the cache")
+			return security.Blessings{}, fmt.Errorf("rpc: key was not in the cache")
 		}
 		stats.recordBlessingCache(true)
 		return cached, nil
diff --git a/profiles/internal/ipc/cancel_test.go b/profiles/internal/rpc/cancel_test.go
similarity index 92%
rename from profiles/internal/ipc/cancel_test.go
rename to profiles/internal/rpc/cancel_test.go
index a8da7e7..3f4a5b7 100644
--- a/profiles/internal/ipc/cancel_test.go
+++ b/profiles/internal/rpc/cancel_test.go
@@ -1,17 +1,17 @@
-package ipc
+package rpc
 
 import (
 	"testing"
 
-	"v.io/x/ref/profiles/internal/ipc/stream"
-	"v.io/x/ref/profiles/internal/ipc/stream/manager"
+	"v.io/x/ref/profiles/internal/rpc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream/manager"
 	tnaming "v.io/x/ref/profiles/internal/testing/mocks/naming"
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/naming/ns"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 )
 
@@ -31,7 +31,7 @@
 	stop     func() error
 }
 
-func (c *canceld) Run(call ipc.StreamServerCall) error {
+func (c *canceld) Run(call rpc.StreamServerCall) error {
 	close(c.started)
 
 	client, err := InternalNewClient(c.sm, c.ns)
diff --git a/profiles/internal/ipc/client.go b/profiles/internal/rpc/client.go
similarity index 94%
rename from profiles/internal/ipc/client.go
rename to profiles/internal/rpc/client.go
index 9f32184..d107af1 100644
--- a/profiles/internal/ipc/client.go
+++ b/profiles/internal/rpc/client.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"fmt"
@@ -14,9 +14,9 @@
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/i18n"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/naming/ns"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vdl"
 	vtime "v.io/v23/vdlroot/time"
@@ -24,14 +24,14 @@
 	"v.io/v23/vom"
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/profiles/internal/ipc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/vc"
-	"v.io/x/ref/profiles/internal/ipc/version"
 	inaming "v.io/x/ref/profiles/internal/naming"
+	"v.io/x/ref/profiles/internal/rpc/stream/vc"
+	"v.io/x/ref/profiles/internal/rpc/version"
 )
 
-const pkgPath = "v.io/x/ref/profiles/internal/ipc"
+const pkgPath = "v.io/x/ref/profiles/internal/rpc"
 
 // TODO(cnicolaou): for local errors, automatically assign a new 'id',
 // don't use pkgPath etc. Can then move them into being defined on each line
@@ -39,9 +39,9 @@
 var (
 	// Local errs that are used to provide details to the public ones.
 	errClientCloseAlreadyCalled = verror.Register(pkgPath+".closeAlreadyCalled", verror.NoRetry,
-		"ipc.Client.Close has already been called")
+		"rpc.Client.Close has already been called")
 
-	errClientFinishAlreadyCalled = verror.Register(pkgPath+".finishAlreadyCalled", verror.NoRetry, "ipc.ClientCall.Finish has already been called")
+	errClientFinishAlreadyCalled = verror.Register(pkgPath+".finishAlreadyCalled", verror.NoRetry, "rpc.ClientCall.Finish has already been called")
 
 	errNonRootedName = verror.Register(pkgPath+".nonRootedName", verror.NoRetry, "{3} does not appear to contain an address")
 
@@ -105,7 +105,7 @@
 	dc vc.DischargeClient
 }
 
-var _ ipc.Client = (*client)(nil)
+var _ rpc.Client = (*client)(nil)
 
 type vcInfo struct {
 	vc       stream.VC
@@ -117,7 +117,7 @@
 	clientPublicKey string // clientPublicKey = "" means we are running unencrypted (i.e. VCSecurityNone)
 }
 
-func InternalNewClient(streamMgr stream.Manager, ns ns.Namespace, opts ...ipc.ClientOpt) (ipc.Client, error) {
+func InternalNewClient(streamMgr stream.Manager, ns ns.Namespace, opts ...rpc.ClientOpt) (rpc.Client, error) {
 	c := &client{
 		streamMgr: streamMgr,
 		ns:        ns,
@@ -196,7 +196,7 @@
 }
 
 // A randomized exponential backoff.  The randomness deters error convoys from forming.
-// TODO(cnicolaou): rationalize this and the backoff in ipc.Server. Note
+// TODO(cnicolaou): rationalize this and the backoff in rpc.Server. Note
 // that rand is not thread safe and may crash.
 func backoff(n int, deadline time.Time) bool {
 	b := time.Duration(math.Pow(1.5+(rand.Float64()/2.0), float64(n)) * float64(time.Second))
@@ -217,7 +217,7 @@
 	return true
 }
 
-func (c *client) StartCall(ctx *context.T, name, method string, args []interface{}, opts ...ipc.CallOpt) (ipc.ClientCall, error) {
+func (c *client) StartCall(ctx *context.T, name, method string, args []interface{}, opts ...rpc.CallOpt) (rpc.ClientCall, error) {
 	defer vlog.LogCall()()
 	return c.startCall(ctx, name, method, args, opts)
 }
@@ -245,15 +245,15 @@
 }
 
 // startCall ensures StartCall always returns verror.E.
-func (c *client) startCall(ctx *context.T, name, method string, args []interface{}, opts []ipc.CallOpt) (ipc.ClientCall, error) {
+func (c *client) startCall(ctx *context.T, name, method string, args []interface{}, opts []rpc.CallOpt) (rpc.ClientCall, error) {
 	if !ctx.Initialized() {
-		return nil, verror.ExplicitNew(verror.ErrBadArg, i18n.NoLangID, "ipc.Client", "StartCall")
+		return nil, verror.ExplicitNew(verror.ErrBadArg, i18n.NoLangID, "rpc.Client", "StartCall")
 	}
 	if err := canCreateServerAuthorizer(opts); err != nil {
 		return nil, verror.New(errNewServerAuthorizer, ctx, err)
 	}
 	ctx, span := vtrace.SetNewSpan(ctx, fmt.Sprintf("<client>%q.%s", name, method))
-	ctx = verror.ContextWithComponentName(ctx, "ipc.Client")
+	ctx = verror.ContextWithComponentName(ctx, "rpc.Client")
 
 	// Context specified deadline.
 	deadline, hasDeadline := ctx.Deadline()
@@ -344,7 +344,7 @@
 		return
 	}
 	if status.flow, status.err = c.createFlow(ctx, ep, append(vcOpts, &vc.ServerAuthorizer{Suffix: status.suffix, Method: method, Policy: auth})); status.err != nil {
-		vlog.VI(2).Infof("ipc: Failed to create Flow with %v: %v", server, status.err)
+		vlog.VI(2).Infof("rpc: Failed to create Flow with %v: %v", server, status.err)
 		return
 	}
 
@@ -371,7 +371,7 @@
 	ctx = security.SetCall(ctx, seccall)
 	if err := auth.Authorize(ctx); err != nil {
 		status.err = verror.New(verror.ErrNotTrusted, ctx, name, status.flow.RemoteBlessings(), err)
-		vlog.VI(2).Infof("ipc: Failed to authorize Flow created with server %v: %s", server, status.err)
+		vlog.VI(2).Infof("rpc: Failed to authorize Flow created with server %v: %s", server, status.err)
 		status.flow.Close()
 		status.flow = nil
 		return
@@ -384,7 +384,7 @@
 // (all that serve "name"), but will invoke the method on at most one of them
 // (the server running on the most preferred protcol and network amongst all
 // the servers that were successfully connected to and authorized).
-func (c *client) tryCall(ctx *context.T, name, method string, args []interface{}, opts []ipc.CallOpt) (ipc.ClientCall, verror.ActionCode, error) {
+func (c *client) tryCall(ctx *context.T, name, method string, args []interface{}, opts []rpc.CallOpt) (rpc.ClientCall, verror.ActionCode, error) {
 	var resolved *naming.MountEntry
 	var err error
 	if resolved, err = c.ns.Resolve(ctx, name, getResolveOpts(opts)...); err != nil {
@@ -447,7 +447,7 @@
 				}
 			}
 		case <-timeoutChan:
-			vlog.VI(2).Infof("ipc: timeout on connection to server %v ", name)
+			vlog.VI(2).Infof("rpc: timeout on connection to server %v ", name)
 			_, _, err := c.failedTryCall(ctx, name, method, responses, ch)
 			if !verror.Is(err, verror.ErrTimeout.ID) {
 				return nil, verror.NoRetry, verror.New(verror.ErrTimeout, ctx, err)
@@ -479,7 +479,7 @@
 
 			if err := fc.prepareBlessingsAndDischarges(method, args, r.rejectedBlessings, opts); err != nil {
 				r.err = verror.New(verror.ErrNotTrusted, ctx, name, r.flow.RemoteBlessings(), err)
-				vlog.VI(2).Infof("ipc: err: %s", r.err)
+				vlog.VI(2).Infof("rpc: err: %s", r.err)
 				r.flow.Close()
 				r.flow = nil
 				continue
@@ -553,7 +553,7 @@
 // failedTryCall performs asynchronous cleanup for tryCall, and returns an
 // appropriate error from the responses we've already received.  All parallel
 // calls in tryCall failed or we timed out if we get here.
-func (c *client) failedTryCall(ctx *context.T, name, method string, responses []*serverStatus, ch chan *serverStatus) (ipc.ClientCall, verror.ActionCode, error) {
+func (c *client) failedTryCall(ctx *context.T, name, method string, responses []*serverStatus, ch chan *serverStatus) (rpc.ClientCall, verror.ActionCode, error) {
 	go cleanupTryCall(nil, responses, ch)
 	c.ns.FlushCacheEntry(name)
 	noconn, untrusted := []string{}, []string{}
@@ -592,7 +592,7 @@
 // server, (2) preparing blessings that the client authenticates with,
 // and, (3) preparing any discharges for third-party caveats on the client's
 // blessings.
-func (fc *flowClient) prepareBlessingsAndDischarges(method string, args []interface{}, rejectedServerBlessings []security.RejectedBlessing, opts []ipc.CallOpt) error {
+func (fc *flowClient) prepareBlessingsAndDischarges(method string, args []interface{}, rejectedServerBlessings []security.RejectedBlessing, opts []rpc.CallOpt) error {
 	// LocalPrincipal is nil which means we are operating under
 	// VCSecurityNone.
 	if fc.flow.LocalPrincipal() == nil {
@@ -600,7 +600,7 @@
 	}
 
 	// Prepare blessings that must be granted to the server (using any
-	// ipc.Granter implementation in 'opts').
+	// rpc.Granter implementation in 'opts').
 	if err := fc.prepareGrantedBlessings(opts); err != nil {
 		return err
 	}
@@ -625,10 +625,10 @@
 	return nil
 }
 
-func (fc *flowClient) prepareGrantedBlessings(opts []ipc.CallOpt) error {
+func (fc *flowClient) prepareGrantedBlessings(opts []rpc.CallOpt) error {
 	for _, o := range opts {
 		switch v := o.(type) {
-		case ipc.Granter:
+		case rpc.Granter:
 			if b, err := v.Grant(fc.flow.RemoteBlessings()); err != nil {
 				return verror.New(errBlessingGrant, fc.ctx, fc.server, err)
 			} else if fc.grantedBlessings, err = security.UnionOfBlessings(fc.grantedBlessings, b); err != nil {
@@ -655,9 +655,9 @@
 	ctx      *context.T   // context to annotate with call details
 	dec      *vom.Decoder // to decode responses and results from the server
 	enc      *vom.Encoder // to encode requests and args to the server
-	server   []string     // Blessings bound to the server that authorize it to receive the IPC request from the client.
+	server   []string     // Blessings bound to the server that authorize it to receive the RPC request from the client.
 	flow     stream.Flow  // the underlying flow
-	response ipc.Response // each decoded response message is kept here
+	response rpc.Response // each decoded response message is kept here
 
 	discharges []security.Discharge // discharges used for this request
 	dc         vc.DischargeClient   // client-global discharge-client
@@ -670,8 +670,8 @@
 	finished     bool // has Finish() already been called?
 }
 
-var _ ipc.ClientCall = (*flowClient)(nil)
-var _ ipc.Stream = (*flowClient)(nil)
+var _ rpc.ClientCall = (*flowClient)(nil)
+var _ rpc.Stream = (*flowClient)(nil)
 
 func newFlowClient(ctx *context.T, flow stream.Flow, server []string, dc vc.DischargeClient) (*flowClient, error) {
 	fc := &flowClient{
@@ -720,11 +720,11 @@
 
 func (fc *flowClient) start(suffix, method string, args []interface{}, deadline time.Time) error {
 	// Encode the Blessings information for the client to authorize the flow.
-	var blessingsRequest ipc.BlessingsRequest
+	var blessingsRequest rpc.BlessingsRequest
 	if fc.flow.LocalPrincipal() != nil {
 		blessingsRequest = clientEncodeBlessings(fc.flow.VCDataCache(), fc.blessings)
 	}
-	req := ipc.Request{
+	req := rpc.Request{
 		Suffix:           suffix,
 		Method:           method,
 		NumPosArgs:       uint64(len(args)),
@@ -755,8 +755,8 @@
 	}
 
 	// The empty request header indicates what follows is a streaming arg.
-	if err := fc.enc.Encode(ipc.Request{}); err != nil {
-		berr := verror.New(verror.ErrBadProtocol, fc.ctx, verror.New(errRequestEncoding, fc.ctx, ipc.Request{}, err))
+	if err := fc.enc.Encode(rpc.Request{}); err != nil {
+		berr := verror.New(verror.ErrBadProtocol, fc.ctx, verror.New(errRequestEncoding, fc.ctx, rpc.Request{}, err))
 		return fc.close(berr)
 	}
 	if err := fc.enc.Encode(item); err != nil {
@@ -829,7 +829,7 @@
 	if fc.sendClosed {
 		return nil
 	}
-	if err := fc.enc.Encode(ipc.Request{EndStreamArgs: true}); err != nil {
+	if err := fc.enc.Encode(rpc.Request{EndStreamArgs: true}); err != nil {
 		// TODO(caprita): Indiscriminately closing the flow below causes
 		// a race as described in:
 		// https://docs.google.com/a/google.com/document/d/1C0kxfYhuOcStdV7tnLZELZpUhfQCZj47B0JrzbE29h8/edit
@@ -843,7 +843,7 @@
 		// from our existing unit tests, but this needs to be revisited
 		// and fixed correctly.
 		//
-		//   return fc.close(verror.ErrBadProtocolf("ipc: end stream args encoding failed: %v", err))
+		//   return fc.close(verror.ErrBadProtocolf("rpc: end stream args encoding failed: %v", err))
 	}
 	fc.sendClosed = true
 	return nil
@@ -898,7 +898,7 @@
 	vtrace.GetStore(fc.ctx).Merge(fc.response.TraceResponse)
 	if fc.response.Error != nil {
 		// TODO(cnicolaou): remove verror.ErrNoAccess with verror version
-		// when ipc.Server is converted.
+		// when rpc.Server is converted.
 		if verror.Is(fc.response.Error, verror.ErrNoAccess.ID) && fc.dc != nil {
 			// In case the error was caused by a bad discharge, we do not want to get stuck
 			// with retrying again and again with this discharge. As there is no direct way
diff --git a/profiles/internal/ipc/consts.go b/profiles/internal/rpc/consts.go
similarity index 97%
rename from profiles/internal/ipc/consts.go
rename to profiles/internal/rpc/consts.go
index 279ca52..2a0acae 100644
--- a/profiles/internal/ipc/consts.go
+++ b/profiles/internal/rpc/consts.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import "time"
 
diff --git a/profiles/internal/ipc/debug_test.go b/profiles/internal/rpc/debug_test.go
similarity index 94%
rename from profiles/internal/ipc/debug_test.go
rename to profiles/internal/rpc/debug_test.go
index ea0bea4..47a2930 100644
--- a/profiles/internal/ipc/debug_test.go
+++ b/profiles/internal/rpc/debug_test.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"io"
@@ -7,13 +7,13 @@
 	"testing"
 
 	"v.io/v23"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 
 	"v.io/x/ref/lib/stats"
-	"v.io/x/ref/profiles/internal/ipc/stream/manager"
+	"v.io/x/ref/profiles/internal/rpc/stream/manager"
 	tnaming "v.io/x/ref/profiles/internal/testing/mocks/naming"
 	"v.io/x/ref/services/mgmt/debug"
 	tsecurity "v.io/x/ref/test/security"
@@ -100,7 +100,7 @@
 	}
 	for _, tc := range testcases {
 		addr := naming.JoinAddressName(ep.String(), tc.name)
-		call, err := client.StartCall(ctx, addr, ipc.GlobMethod, []interface{}{tc.pattern}, options.NoResolve{})
+		call, err := client.StartCall(ctx, addr, rpc.GlobMethod, []interface{}{tc.pattern}, options.NoResolve{})
 		if err != nil {
 			t.Fatalf("client.StartCall failed for %q: %v", tc.name, err)
 		}
@@ -131,6 +131,6 @@
 type testObject struct {
 }
 
-func (o testObject) Foo(ipc.ServerCall) (string, error) {
+func (o testObject) Foo(rpc.ServerCall) (string, error) {
 	return "BAR", nil
 }
diff --git a/profiles/internal/ipc/default_authorizer.go b/profiles/internal/rpc/default_authorizer.go
similarity index 98%
rename from profiles/internal/ipc/default_authorizer.go
rename to profiles/internal/rpc/default_authorizer.go
index 0d27425..5ba24c9 100644
--- a/profiles/internal/ipc/default_authorizer.go
+++ b/profiles/internal/rpc/default_authorizer.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"v.io/v23/context"
diff --git a/profiles/internal/ipc/default_authorizer_test.go b/profiles/internal/rpc/default_authorizer_test.go
similarity index 99%
rename from profiles/internal/ipc/default_authorizer_test.go
rename to profiles/internal/rpc/default_authorizer_test.go
index 9c27210..baf741c 100644
--- a/profiles/internal/ipc/default_authorizer_test.go
+++ b/profiles/internal/rpc/default_authorizer_test.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"testing"
diff --git a/profiles/internal/ipc/discharges.go b/profiles/internal/rpc/discharges.go
similarity index 95%
rename from profiles/internal/ipc/discharges.go
rename to profiles/internal/rpc/discharges.go
index 49a0996..851e79b 100644
--- a/profiles/internal/ipc/discharges.go
+++ b/profiles/internal/rpc/discharges.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"reflect"
@@ -7,10 +7,10 @@
 	"sync"
 	"time"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/vc"
+	"v.io/x/ref/profiles/internal/rpc/stream/vc"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vdl"
 	"v.io/v23/vtrace"
@@ -20,12 +20,12 @@
 // NoDischarges specifies that the RPC call should not fetch discharges.
 type NoDischarges struct{}
 
-func (NoDischarges) IPCCallOpt()   {}
+func (NoDischarges) RPCCallOpt()   {}
 func (NoDischarges) NSResolveOpt() {}
 
 // discharger implements vc.DischargeClient.
 type dischargeClient struct {
-	c                     ipc.Client
+	c                     rpc.Client
 	defaultCtx            *context.T
 	cache                 dischargeCache
 	dischargeExpiryBuffer time.Duration
@@ -41,7 +41,7 @@
 // dischargeExpiryBuffer specifies how much before discharge expiration we should
 // refresh discharges.
 // Attempts will be made to refresh a discharge DischargeExpiryBuffer before they expire.
-func InternalNewDischargeClient(defaultCtx *context.T, client ipc.Client, dischargeExpiryBuffer time.Duration) vc.DischargeClient {
+func InternalNewDischargeClient(defaultCtx *context.T, client rpc.Client, dischargeExpiryBuffer time.Duration) vc.DischargeClient {
 	return &dischargeClient{
 		c:          client,
 		defaultCtx: defaultCtx,
@@ -53,13 +53,13 @@
 	}
 }
 
-func (*dischargeClient) IPCStreamListenerOpt() {}
-func (*dischargeClient) IPCStreamVCOpt()       {}
+func (*dischargeClient) RPCStreamListenerOpt() {}
+func (*dischargeClient) RPCStreamVCOpt()       {}
 
 // PrepareDischarges retrieves the caveat discharges required for using blessings
 // at server. The discharges are either found in the dischargeCache, in the call
 // options, or requested from the discharge issuer indicated on the caveat.
-// Note that requesting a discharge is an ipc call, so one copy of this
+// Note that requesting a discharge is an rpc call, so one copy of this
 // function must be able to successfully terminate while another is blocked.
 func (d *dischargeClient) PrepareDischarges(ctx *context.T, forcaveats []security.Caveat, impetus security.DischargeImpetus) (ret []security.Discharge) {
 	if len(forcaveats) == 0 {
diff --git a/profiles/internal/ipc/discharges_test.go b/profiles/internal/rpc/discharges_test.go
similarity index 99%
rename from profiles/internal/ipc/discharges_test.go
rename to profiles/internal/rpc/discharges_test.go
index 4250605..3674711 100644
--- a/profiles/internal/ipc/discharges_test.go
+++ b/profiles/internal/rpc/discharges_test.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"testing"
diff --git a/profiles/internal/ipc/errors.vdl b/profiles/internal/rpc/errors.vdl
similarity index 98%
rename from profiles/internal/ipc/errors.vdl
rename to profiles/internal/rpc/errors.vdl
index e3b55e3..ec143be 100644
--- a/profiles/internal/ipc/errors.vdl
+++ b/profiles/internal/rpc/errors.vdl
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import "v.io/v23/security"
 
diff --git a/profiles/internal/ipc/errors.vdl.go b/profiles/internal/rpc/errors.vdl.go
similarity index 88%
rename from profiles/internal/ipc/errors.vdl.go
rename to profiles/internal/rpc/errors.vdl.go
index bcaa59e..12fd184 100644
--- a/profiles/internal/ipc/errors.vdl.go
+++ b/profiles/internal/rpc/errors.vdl.go
@@ -1,7 +1,7 @@
 // This file was auto-generated by the vanadium vdl tool.
 // Source: errors.vdl
 
-package ipc
+package rpc
 
 import (
 	// VDL system imports
@@ -14,15 +14,15 @@
 )
 
 var (
-	ErrInvalidBlessings = verror.Register("v.io/x/ref/profiles/internal/ipc.InvalidBlessings", verror.NoRetry, "{1:}{2:} All valid blessings for this request: {3} (rejected {4}) are disallowed by the policy {5} (rejected {6})")
+	ErrInvalidBlessings = verror.Register("v.io/x/ref/profiles/internal/rpc.InvalidBlessings", verror.NoRetry, "{1:}{2:} All valid blessings for this request: {3} (rejected {4}) are disallowed by the policy {5} (rejected {6})")
 	// Internal errors.
-	errBadRequest        = verror.Register("v.io/x/ref/profiles/internal/ipc.badRequest", verror.NoRetry, "{1:}{2:} failed to decode request: {3}")
-	errBadNumInputArgs   = verror.Register("v.io/x/ref/profiles/internal/ipc.badNumInputArgs", verror.NoRetry, "{1:}{2:} wrong number of input arguments for {3}.{4} (called with {5} args, want {6})")
-	errBadInputArg       = verror.Register("v.io/x/ref/profiles/internal/ipc.badInputArg", verror.NoRetry, "{1:}{2:} failed to decode request {3}.{4} arg #{5}: {6}")
-	errBadBlessings      = verror.Register("v.io/x/ref/profiles/internal/ipc.badBlessings", verror.NoRetry, "{1:}{2:} failed to decode blessings: {3}")
-	errBadBlessingsCache = verror.Register("v.io/x/ref/profiles/internal/ipc.badBlessingsCache", verror.NoRetry, "{1:}{2:} failed to find blessings in cache: {3}")
-	errBadDischarge      = verror.Register("v.io/x/ref/profiles/internal/ipc.badDischarge", verror.NoRetry, "{1:}{2:} failed to decode discharge #{3}: {4}")
-	errBadAuth           = verror.Register("v.io/x/ref/profiles/internal/ipc.badAuth", verror.NoRetry, "{1:}{2:} not authorized to call {3}.{4}: {5}")
+	errBadRequest        = verror.Register("v.io/x/ref/profiles/internal/rpc.badRequest", verror.NoRetry, "{1:}{2:} failed to decode request: {3}")
+	errBadNumInputArgs   = verror.Register("v.io/x/ref/profiles/internal/rpc.badNumInputArgs", verror.NoRetry, "{1:}{2:} wrong number of input arguments for {3}.{4} (called with {5} args, want {6})")
+	errBadInputArg       = verror.Register("v.io/x/ref/profiles/internal/rpc.badInputArg", verror.NoRetry, "{1:}{2:} failed to decode request {3}.{4} arg #{5}: {6}")
+	errBadBlessings      = verror.Register("v.io/x/ref/profiles/internal/rpc.badBlessings", verror.NoRetry, "{1:}{2:} failed to decode blessings: {3}")
+	errBadBlessingsCache = verror.Register("v.io/x/ref/profiles/internal/rpc.badBlessingsCache", verror.NoRetry, "{1:}{2:} failed to find blessings in cache: {3}")
+	errBadDischarge      = verror.Register("v.io/x/ref/profiles/internal/rpc.badDischarge", verror.NoRetry, "{1:}{2:} failed to decode discharge #{3}: {4}")
+	errBadAuth           = verror.Register("v.io/x/ref/profiles/internal/rpc.badAuth", verror.NoRetry, "{1:}{2:} not authorized to call {3}.{4}: {5}")
 )
 
 func init() {
diff --git a/profiles/internal/ipc/full_test.go b/profiles/internal/rpc/full_test.go
similarity index 96%
rename from profiles/internal/ipc/full_test.go
rename to profiles/internal/rpc/full_test.go
index c2a64cf..605249f 100644
--- a/profiles/internal/ipc/full_test.go
+++ b/profiles/internal/rpc/full_test.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"encoding/hex"
@@ -17,10 +17,10 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/naming/ns"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/security/access"
 	"v.io/v23/uniqueid"
@@ -28,18 +28,18 @@
 	"v.io/v23/verror"
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/profiles/internal/ipc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream"
 
 	"v.io/x/lib/netstate"
 	"v.io/x/ref/lib/stats"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/tcp"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/ws"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/wsh"
-	imanager "v.io/x/ref/profiles/internal/ipc/stream/manager"
-	"v.io/x/ref/profiles/internal/ipc/stream/vc"
 	"v.io/x/ref/profiles/internal/lib/publisher"
 	"v.io/x/ref/profiles/internal/lib/websocket"
 	inaming "v.io/x/ref/profiles/internal/naming"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/tcp"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/ws"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/wsh"
+	imanager "v.io/x/ref/profiles/internal/rpc/stream/manager"
+	"v.io/x/ref/profiles/internal/rpc/stream/vc"
 	tnaming "v.io/x/ref/profiles/internal/testing/mocks/naming"
 	tsecurity "v.io/x/ref/test/security"
 	"v.io/x/ref/test/testutil"
@@ -50,10 +50,10 @@
 var (
 	errMethod     = verror.New(verror.ErrAborted, nil)
 	clock         = new(fakeClock)
-	listenAddrs   = ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}
-	listenWSAddrs = ipc.ListenAddrs{{"ws", "127.0.0.1:0"}, {"tcp", "127.0.0.1:0"}}
-	listenSpec    = ipc.ListenSpec{Addrs: listenAddrs}
-	listenWSSpec  = ipc.ListenSpec{Addrs: listenWSAddrs}
+	listenAddrs   = rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}
+	listenWSAddrs = rpc.ListenAddrs{{"ws", "127.0.0.1:0"}, {"tcp", "127.0.0.1:0"}}
+	listenSpec    = rpc.ListenSpec{Addrs: listenAddrs}
+	listenWSSpec  = rpc.ListenSpec{Addrs: listenWSAddrs}
 )
 
 type fakeClock struct {
@@ -73,7 +73,7 @@
 	c.Unlock()
 }
 
-func testInternalNewServer(ctx *context.T, streamMgr stream.Manager, ns ns.Namespace, principal security.Principal, opts ...ipc.ServerOpt) (ipc.Server, error) {
+func testInternalNewServer(ctx *context.T, streamMgr stream.Manager, ns ns.Namespace, principal security.Principal, opts ...rpc.ServerOpt) (rpc.Server, error) {
 	client, err := InternalNewClient(streamMgr, ns)
 	if err != nil {
 		return nil, err
@@ -85,33 +85,33 @@
 
 type testServer struct{}
 
-func (*testServer) Closure(call ipc.ServerCall) error {
+func (*testServer) Closure(call rpc.ServerCall) error {
 	return nil
 }
 
-func (*testServer) Error(call ipc.ServerCall) error {
+func (*testServer) Error(call rpc.ServerCall) error {
 	return errMethod
 }
 
-func (*testServer) Echo(call ipc.ServerCall, arg string) (string, error) {
+func (*testServer) Echo(call rpc.ServerCall, arg string) (string, error) {
 	return fmt.Sprintf("method:%q,suffix:%q,arg:%q", call.Method(), call.Suffix(), arg), nil
 }
 
-func (*testServer) EchoUser(call ipc.ServerCall, arg string, u userType) (string, userType, error) {
+func (*testServer) EchoUser(call rpc.ServerCall, arg string, u userType) (string, userType, error) {
 	return fmt.Sprintf("method:%q,suffix:%q,arg:%q", call.Method(), call.Suffix(), arg), u, nil
 }
 
-func (*testServer) EchoBlessings(call ipc.ServerCall) (server, client string, _ error) {
+func (*testServer) EchoBlessings(call rpc.ServerCall) (server, client string, _ error) {
 	local, _ := security.BlessingNames(call.Context(), security.CallSideLocal)
 	remote, _ := security.BlessingNames(call.Context(), security.CallSideRemote)
 	return fmt.Sprintf("%v", local), fmt.Sprintf("%v", remote), nil
 }
 
-func (*testServer) EchoGrantedBlessings(call ipc.ServerCall, arg string) (result, blessing string, _ error) {
+func (*testServer) EchoGrantedBlessings(call rpc.ServerCall, arg string) (result, blessing string, _ error) {
 	return arg, fmt.Sprintf("%v", call.GrantedBlessings()), nil
 }
 
-func (*testServer) EchoAndError(call ipc.ServerCall, arg string) (string, error) {
+func (*testServer) EchoAndError(call rpc.ServerCall, arg string) (string, error) {
 	result := fmt.Sprintf("method:%q,suffix:%q,arg:%q", call.Method(), call.Suffix(), arg)
 	if arg == "error" {
 		return result, errMethod
@@ -119,7 +119,7 @@
 	return result, nil
 }
 
-func (*testServer) Stream(call ipc.StreamServerCall, arg string) (string, error) {
+func (*testServer) Stream(call rpc.StreamServerCall, arg string) (string, error) {
 	result := fmt.Sprintf("method:%q,suffix:%q,arg:%q", call.Method(), call.Suffix(), arg)
 	var u userType
 	var err error
@@ -135,7 +135,7 @@
 	return result, err
 }
 
-func (*testServer) Unauthorized(ipc.StreamServerCall) (string, error) {
+func (*testServer) Unauthorized(rpc.StreamServerCall) (string, error) {
 	return "UnauthorizedResult", nil
 }
 
@@ -199,7 +199,7 @@
 	called bool
 }
 
-func (ds *dischargeServer) Discharge(call ipc.StreamServerCall, cav security.Caveat, _ security.DischargeImpetus) (security.Discharge, error) {
+func (ds *dischargeServer) Discharge(call rpc.StreamServerCall, cav security.Caveat, _ security.DischargeImpetus) (security.Discharge, error) {
 	ds.mu.Lock()
 	ds.called = true
 	ds.mu.Unlock()
@@ -218,7 +218,7 @@
 	return call.LocalPrincipal().MintDischarge(cav, expiry)
 }
 
-func startServer(t *testing.T, ctx *context.T, principal security.Principal, sm stream.Manager, ns ns.Namespace, name string, disp ipc.Dispatcher, opts ...ipc.ServerOpt) (naming.Endpoint, ipc.Server) {
+func startServer(t *testing.T, ctx *context.T, principal security.Principal, sm stream.Manager, ns ns.Namespace, name string, disp rpc.Dispatcher, opts ...rpc.ServerOpt) (naming.Endpoint, rpc.Server) {
 	return startServerWS(t, ctx, principal, sm, ns, name, disp, noWebsocket, opts...)
 }
 
@@ -231,7 +231,7 @@
 	return r
 }
 
-func startServerWS(t *testing.T, ctx *context.T, principal security.Principal, sm stream.Manager, ns ns.Namespace, name string, disp ipc.Dispatcher, shouldUseWebsocket websocketMode, opts ...ipc.ServerOpt) (naming.Endpoint, ipc.Server) {
+func startServerWS(t *testing.T, ctx *context.T, principal security.Principal, sm stream.Manager, ns ns.Namespace, name string, disp rpc.Dispatcher, shouldUseWebsocket websocketMode, opts ...rpc.ServerOpt) (naming.Endpoint, rpc.Server) {
 	vlog.VI(1).Info("InternalNewServer")
 	server, err := testInternalNewServer(ctx, sm, ns, principal, opts...)
 	if err != nil {
@@ -283,7 +283,7 @@
 	}
 }
 
-func stopServer(t *testing.T, ctx *context.T, server ipc.Server, ns ns.Namespace, name string) {
+func stopServer(t *testing.T, ctx *context.T, server rpc.Server, ns ns.Namespace, name string) {
 	vlog.VI(1).Info("server.Stop")
 	new_name := "should_appear_in_mt/server"
 	verifyMount(t, ctx, ns, name)
@@ -329,8 +329,8 @@
 }
 
 type bundle struct {
-	client ipc.Client
-	server ipc.Server
+	client rpc.Client
+	server rpc.Server
 	ep     naming.Endpoint
 	ns     ns.Namespace
 	sm     stream.Manager
@@ -374,7 +374,7 @@
 	return verror.Is(err, id.ID)
 }
 
-func runServer(t *testing.T, ctx *context.T, ns ns.Namespace, principal security.Principal, name string, obj interface{}, opts ...ipc.ServerOpt) stream.Manager {
+func runServer(t *testing.T, ctx *context.T, ns ns.Namespace, principal security.Principal, name string, obj interface{}, opts ...rpc.ServerOpt) stream.Manager {
 	rid, err := naming.NewRoutingID()
 	if err != nil {
 		t.Fatal(err)
@@ -485,7 +485,7 @@
 		tests = []struct {
 			server security.Blessings // blessings presented by the server to the client.
 			name   string             // name provided by the client to StartCall
-			opt    ipc.CallOpt        // option provided to StartCall.
+			opt    rpc.CallOpt        // option provided to StartCall.
 			errID  verror.IDAction
 			err    string
 		}{
@@ -797,9 +797,9 @@
 	}
 }
 
-// granter implements ipc.Granter, returning a fixed (security.Blessings, error) pair.
+// granter implements rpc.Granter, returning a fixed (security.Blessings, error) pair.
 type granter struct {
-	ipc.CallOpt
+	rpc.CallOpt
 	b   security.Blessings
 	err error
 }
@@ -819,7 +819,7 @@
 	ctx, _ = v23.SetPrincipal(ctx, pclient)
 
 	tests := []struct {
-		granter                       ipc.Granter
+		granter                       rpc.Granter
 		startErrID, finishErrID       verror.IDAction
 		blessing, starterr, finisherr string
 	}{
@@ -857,7 +857,7 @@
 	traceid []uniqueid.Id
 }
 
-func (s *dischargeTestServer) Discharge(call ipc.ServerCall, cav security.Caveat, impetus security.DischargeImpetus) (security.Discharge, error) {
+func (s *dischargeTestServer) Discharge(call rpc.ServerCall, cav security.Caveat, impetus security.DischargeImpetus) (security.Discharge, error) {
 	s.impetus = append(s.impetus, impetus)
 	s.traceid = append(s.traceid, vtrace.GetSpan(call.Context()).Trace())
 	return security.Discharge{}, fmt.Errorf("discharges not issued")
@@ -1371,7 +1371,7 @@
 	}
 }
 
-func (s *cancelTestServer) CancelStreamReader(call ipc.StreamServerCall) error {
+func (s *cancelTestServer) CancelStreamReader(call rpc.StreamServerCall) error {
 	close(s.started)
 	var b []byte
 	if err := call.Recv(&b); err != io.EOF {
@@ -1385,7 +1385,7 @@
 // CancelStreamIgnorer doesn't read from it's input stream so all it's
 // buffers fill.  The intention is to show that call.Done() is closed
 // even when the stream is stalled.
-func (s *cancelTestServer) CancelStreamIgnorer(call ipc.StreamServerCall) error {
+func (s *cancelTestServer) CancelStreamIgnorer(call rpc.StreamServerCall) error {
 	close(s.started)
 	<-call.Context().Done()
 	close(s.cancelled)
@@ -1440,7 +1440,7 @@
 
 type streamRecvInGoroutineServer struct{ c chan error }
 
-func (s *streamRecvInGoroutineServer) RecvInGoroutine(call ipc.StreamServerCall) error {
+func (s *streamRecvInGoroutineServer) RecvInGoroutine(call rpc.StreamServerCall) error {
 	// Spawn a goroutine to read streaming data from the client.
 	go func() {
 		var i interface{}
@@ -1537,10 +1537,10 @@
 	sm := imanager.InternalNew(naming.FixedRoutingID(0x555555555))
 	defer sm.Shutdown()
 	ns := tnaming.NewSimpleNamespace()
-	pa := func(string, []ipc.Address) ([]ipc.Address, error) {
+	pa := func(string, []rpc.Address) ([]rpc.Address, error) {
 		a := &net.IPAddr{}
 		a.IP = net.ParseIP("1.1.1.1")
-		return []ipc.Address{&netstate.AddrIfc{Addr: a}}, nil
+		return []rpc.Address{&netstate.AddrIfc{Addr: a}}, nil
 	}
 	server, err := testInternalNewServer(ctx, sm, ns, tsecurity.NewPrincipal("server"))
 	if err != nil {
@@ -1548,8 +1548,8 @@
 	}
 	defer server.Stop()
 
-	spec := ipc.ListenSpec{
-		Addrs:          ipc.ListenAddrs{{"tcp", ":0"}},
+	spec := rpc.ListenSpec{
+		Addrs:          rpc.ListenAddrs{{"tcp", ":0"}},
 		AddressChooser: pa,
 	}
 	eps, err := server.Listen(spec)
@@ -1582,7 +1582,7 @@
 	sm := imanager.InternalNew(naming.FixedRoutingID(0x555555555))
 	defer sm.Shutdown()
 	ns := tnaming.NewSimpleNamespace()
-	paerr := func(_ string, a []ipc.Address) ([]ipc.Address, error) {
+	paerr := func(_ string, a []rpc.Address) ([]rpc.Address, error) {
 		return nil, fmt.Errorf("oops")
 	}
 	server, err := testInternalNewServer(ctx, sm, ns, tsecurity.NewPrincipal("server"))
@@ -1590,8 +1590,8 @@
 		t.Errorf("InternalNewServer failed: %v", err)
 	}
 	defer server.Stop()
-	spec := ipc.ListenSpec{
-		Addrs:          ipc.ListenAddrs{{"tcp", ":0"}},
+	spec := rpc.ListenSpec{
+		Addrs:          rpc.ListenAddrs{{"tcp", ":0"}},
 		AddressChooser: paerr,
 	}
 	eps, err := server.Listen(spec)
@@ -1761,7 +1761,7 @@
 			t.Fatalf("failed to create client: %v", err)
 		}
 		defer client.Close()
-		var opts []ipc.CallOpt
+		var opts []rpc.CallOpt
 		if noDischarges {
 			opts = append(opts, NoDischarges{})
 		}
@@ -1858,7 +1858,7 @@
 
 	ctx, _ = v23.SetPrincipal(ctx, pclient)
 
-	newClient := func() ipc.Client {
+	newClient := func() rpc.Client {
 		rid, err := naming.NewRoutingID()
 		if err != nil {
 			t.Fatal(err)
@@ -1872,7 +1872,7 @@
 		return client
 	}
 
-	runClient := func(client ipc.Client) {
+	runClient := func(client rpc.Client) {
 		if call, err := client.StartCall(ctx, "mountpoint/testServer", "Closure", nil); err != nil {
 			t.Fatalf("failed to StartCall: %v", err)
 		} else if err := call.Finish(); err != nil {
@@ -1880,7 +1880,7 @@
 		}
 	}
 
-	cachePrefix := naming.Join("ipc", "server", "routing-id", rid.String(), "security", "blessings", "cache")
+	cachePrefix := naming.Join("rpc", "server", "routing-id", rid.String(), "security", "blessings", "cache")
 	cacheHits, err := stats.GetStatsObject(naming.Join(cachePrefix, "hits"))
 	if err != nil {
 		t.Fatal(err)
@@ -1965,7 +1965,7 @@
 	called bool
 }
 
-func (ed *expiryDischarger) Discharge(call ipc.StreamServerCall, cav security.Caveat, _ security.DischargeImpetus) (security.Discharge, error) {
+func (ed *expiryDischarger) Discharge(call rpc.StreamServerCall, cav security.Caveat, _ security.DischargeImpetus) (security.Discharge, error) {
 	tp := cav.ThirdPartyDetails()
 	if tp == nil {
 		return security.Discharge{}, fmt.Errorf("discharger: %v does not represent a third-party caveat", cav)
@@ -2039,7 +2039,7 @@
 }
 
 func init() {
-	ipc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener)
+	rpc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener)
 	security.RegisterCaveatValidator(fakeTimeCaveat, func(_ security.Call, _ security.CallSide, t int64) error {
 		if now := clock.Now(); now > t {
 			return fmt.Errorf("fakeTimeCaveat expired: now=%d > then=%d", now, t)
diff --git a/profiles/internal/ipc/options.go b/profiles/internal/rpc/options.go
similarity index 72%
rename from profiles/internal/ipc/options.go
rename to profiles/internal/rpc/options.go
index 197fc17..148dbfb 100644
--- a/profiles/internal/ipc/options.go
+++ b/profiles/internal/rpc/options.go
@@ -1,13 +1,13 @@
-package ipc
+package rpc
 
 import (
 	"time"
 
-	"v.io/x/ref/profiles/internal/ipc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream"
 
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 )
 
 // PreferredProtocols instructs the Runtime implementation to select
@@ -15,23 +15,23 @@
 // and to order them in the specified order.
 type PreferredProtocols []string
 
-func (PreferredProtocols) IPCClientOpt() {}
+func (PreferredProtocols) RPCClientOpt() {}
 
 // This option is used to sort and filter the endpoints when resolving the
 // proxy name from a mounttable.
 type PreferredServerResolveProtocols []string
 
-func (PreferredServerResolveProtocols) IPCServerOpt() {}
+func (PreferredServerResolveProtocols) RPCServerOpt() {}
 
 // ReservedNameDispatcher specifies the dispatcher that controls access
 // to framework managed portion of the namespace.
 type ReservedNameDispatcher struct {
-	Dispatcher ipc.Dispatcher
+	Dispatcher rpc.Dispatcher
 }
 
-func (ReservedNameDispatcher) IPCServerOpt() {}
+func (ReservedNameDispatcher) RPCServerOpt() {}
 
-func getRetryTimeoutOpt(opts []ipc.CallOpt) (time.Duration, bool) {
+func getRetryTimeoutOpt(opts []rpc.CallOpt) (time.Duration, bool) {
 	for _, o := range opts {
 		if r, ok := o.(options.RetryTimeout); ok {
 			return time.Duration(r), true
@@ -40,7 +40,7 @@
 	return 0, false
 }
 
-func getNoResolveOpt(opts []ipc.CallOpt) bool {
+func getNoResolveOpt(opts []rpc.CallOpt) bool {
 	for _, o := range opts {
 		if _, ok := o.(options.NoResolve); ok {
 			return true
@@ -49,7 +49,7 @@
 	return false
 }
 
-func shouldNotFetchDischarges(opts []ipc.CallOpt) bool {
+func shouldNotFetchDischarges(opts []rpc.CallOpt) bool {
 	for _, o := range opts {
 		if _, ok := o.(NoDischarges); ok {
 			return true
@@ -58,7 +58,7 @@
 	return false
 }
 
-func getNoRetryOpt(opts []ipc.CallOpt) bool {
+func getNoRetryOpt(opts []rpc.CallOpt) bool {
 	for _, o := range opts {
 		if _, ok := o.(options.NoRetry); ok {
 			return true
@@ -67,7 +67,7 @@
 	return false
 }
 
-func getVCOpts(opts []ipc.CallOpt) (vcOpts []stream.VCOpt) {
+func getVCOpts(opts []rpc.CallOpt) (vcOpts []stream.VCOpt) {
 	for _, o := range opts {
 		if v, ok := o.(stream.VCOpt); ok {
 			vcOpts = append(vcOpts, v)
@@ -76,7 +76,7 @@
 	return
 }
 
-func getResolveOpts(opts []ipc.CallOpt) (resolveOpts []naming.ResolveOpt) {
+func getResolveOpts(opts []rpc.CallOpt) (resolveOpts []naming.ResolveOpt) {
 	for _, o := range opts {
 		if r, ok := o.(naming.ResolveOpt); ok {
 			resolveOpts = append(resolveOpts, r)
diff --git a/profiles/internal/ipc/protocols/tcp/init.go b/profiles/internal/rpc/protocols/tcp/init.go
similarity index 85%
rename from profiles/internal/ipc/protocols/tcp/init.go
rename to profiles/internal/rpc/protocols/tcp/init.go
index 70348f3..b0169c1 100644
--- a/profiles/internal/ipc/protocols/tcp/init.go
+++ b/profiles/internal/rpc/protocols/tcp/init.go
@@ -6,14 +6,14 @@
 
 	"v.io/x/ref/profiles/internal/lib/tcputil"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 )
 
 func init() {
-	ipc.RegisterProtocol("tcp", net.DialTimeout, net.Listen, "tcp4", "tcp6")
-	ipc.RegisterProtocol("tcp4", net.DialTimeout, net.Listen)
-	ipc.RegisterProtocol("tcp6", net.DialTimeout, net.Listen)
+	rpc.RegisterProtocol("tcp", net.DialTimeout, net.Listen, "tcp4", "tcp6")
+	rpc.RegisterProtocol("tcp4", net.DialTimeout, net.Listen)
+	rpc.RegisterProtocol("tcp6", net.DialTimeout, net.Listen)
 }
 
 func tcpDial(network, address string, timeout time.Duration) (net.Conn, error) {
diff --git a/profiles/internal/rpc/protocols/ws/init.go b/profiles/internal/rpc/protocols/ws/init.go
new file mode 100644
index 0000000..01ed334
--- /dev/null
+++ b/profiles/internal/rpc/protocols/ws/init.go
@@ -0,0 +1,14 @@
+package websocket
+
+import (
+	"v.io/v23/rpc"
+
+	"v.io/x/ref/profiles/internal/lib/websocket"
+)
+
+func init() {
+	// ws, ws4, ws6 represent websocket protocol instances.
+	rpc.RegisterProtocol("ws", websocket.Dial, websocket.Listener, "ws4", "ws6")
+	rpc.RegisterProtocol("ws4", websocket.Dial, websocket.Listener)
+	rpc.RegisterProtocol("ws6", websocket.Dial, websocket.Listener)
+}
diff --git a/profiles/internal/ipc/protocols/wsh/init.go b/profiles/internal/rpc/protocols/wsh/init.go
similarity index 61%
rename from profiles/internal/ipc/protocols/wsh/init.go
rename to profiles/internal/rpc/protocols/wsh/init.go
index dcbc57f..4116d33 100644
--- a/profiles/internal/ipc/protocols/wsh/init.go
+++ b/profiles/internal/rpc/protocols/wsh/init.go
@@ -3,13 +3,13 @@
 package wsh
 
 import (
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 
 	"v.io/x/ref/profiles/internal/lib/websocket"
 )
 
 func init() {
-	ipc.RegisterProtocol("wsh", websocket.HybridDial, websocket.HybridListener, "tcp4", "tcp6", "ws4", "ws6")
-	ipc.RegisterProtocol("wsh4", websocket.HybridDial, websocket.HybridListener, "tcp4", "ws4")
-	ipc.RegisterProtocol("wsh6", websocket.HybridDial, websocket.HybridListener, "tcp6", "ws6")
+	rpc.RegisterProtocol("wsh", websocket.HybridDial, websocket.HybridListener, "tcp4", "tcp6", "ws4", "ws6")
+	rpc.RegisterProtocol("wsh4", websocket.HybridDial, websocket.HybridListener, "tcp4", "ws4")
+	rpc.RegisterProtocol("wsh6", websocket.HybridDial, websocket.HybridListener, "tcp6", "ws6")
 }
diff --git a/profiles/internal/ipc/protocols/wsh_nacl/init.go b/profiles/internal/rpc/protocols/wsh_nacl/init.go
similarity index 60%
rename from profiles/internal/ipc/protocols/wsh_nacl/init.go
rename to profiles/internal/rpc/protocols/wsh_nacl/init.go
index 1ebe44f..546e720 100644
--- a/profiles/internal/ipc/protocols/wsh_nacl/init.go
+++ b/profiles/internal/rpc/protocols/wsh_nacl/init.go
@@ -3,7 +3,7 @@
 package wsh_nacl
 
 import (
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 
 	"v.io/x/ref/profiles/internal/lib/websocket"
 )
@@ -11,7 +11,7 @@
 func init() {
 	// We limit wsh to ws since in general nacl does not allow direct access
 	// to TCP/UDP networking.
-	ipc.RegisterProtocol("wsh", websocket.Dial, websocket.Listener, "ws4", "ws6")
-	ipc.RegisterProtocol("wsh4", websocket.Dial, websocket.Listener, "ws4")
-	ipc.RegisterProtocol("wsh6", websocket.Dial, websocket.Listener, "ws6")
+	rpc.RegisterProtocol("wsh", websocket.Dial, websocket.Listener, "ws4", "ws6")
+	rpc.RegisterProtocol("wsh4", websocket.Dial, websocket.Listener, "ws4")
+	rpc.RegisterProtocol("wsh6", websocket.Dial, websocket.Listener, "ws6")
 }
diff --git a/profiles/internal/ipc/reserved.go b/profiles/internal/rpc/reserved.go
similarity index 85%
rename from profiles/internal/ipc/reserved.go
rename to profiles/internal/rpc/reserved.go
index 737f750..2e6ba34 100644
--- a/profiles/internal/ipc/reserved.go
+++ b/profiles/internal/rpc/reserved.go
@@ -1,13 +1,13 @@
-package ipc
+package rpc
 
 import (
 	"strings"
 	"time"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc"
-	"v.io/v23/ipc/reserved"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
+	"v.io/v23/rpc/reserved"
 	"v.io/v23/security"
 	"v.io/v23/services/security/access"
 	"v.io/v23/vdl"
@@ -21,9 +21,9 @@
 // reservedInvoker returns a special invoker for reserved methods.  This invoker
 // has access to the internal dispatchers, which allows it to perform special
 // handling for methods like Glob and Signature.
-func reservedInvoker(dispNormal, dispReserved ipc.Dispatcher) ipc.Invoker {
+func reservedInvoker(dispNormal, dispReserved rpc.Dispatcher) rpc.Invoker {
 	methods := &reservedMethods{dispNormal: dispNormal, dispReserved: dispReserved}
-	invoker := ipc.ReflectInvokerOrDie(methods)
+	invoker := rpc.ReflectInvokerOrDie(methods)
 	methods.selfInvoker = invoker
 	return invoker
 }
@@ -35,37 +35,37 @@
 // To add a new reserved method, simply add a method below, along with a
 // description of the method.
 type reservedMethods struct {
-	dispNormal   ipc.Dispatcher
-	dispReserved ipc.Dispatcher
-	selfInvoker  ipc.Invoker
+	dispNormal   rpc.Dispatcher
+	dispReserved rpc.Dispatcher
+	selfInvoker  rpc.Invoker
 }
 
-func (r *reservedMethods) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{{
+func (r *reservedMethods) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{{
 		Name: "__Reserved",
-		Doc:  `Reserved methods implemented by the IPC framework.  Each method name is prefixed with a double underscore "__".`,
-		Methods: []ipc.MethodDesc{
+		Doc:  `Reserved methods implemented by the RPC framework.  Each method name is prefixed with a double underscore "__".`,
+		Methods: []rpc.MethodDesc{
 			{
 				Name:      "Glob",
 				Doc:       "Glob returns all entries matching the pattern.",
-				InArgs:    []ipc.ArgDesc{{Name: "pattern", Doc: ""}},
-				OutStream: ipc.ArgDesc{Doc: "Streams matching entries back to the client."},
+				InArgs:    []rpc.ArgDesc{{Name: "pattern", Doc: ""}},
+				OutStream: rpc.ArgDesc{Doc: "Streams matching entries back to the client."},
 			},
 			{
 				Name: "MethodSignature",
 				Doc:  "MethodSignature returns the signature for the given method.",
-				InArgs: []ipc.ArgDesc{{
+				InArgs: []rpc.ArgDesc{{
 					Name: "method",
 					Doc:  "Method name whose signature will be returned.",
 				}},
-				OutArgs: []ipc.ArgDesc{{
+				OutArgs: []rpc.ArgDesc{{
 					Doc: "Method signature for the given method.",
 				}},
 			},
 			{
 				Name: "Signature",
 				Doc:  "Signature returns all interface signatures implemented by the object.",
-				OutArgs: []ipc.ArgDesc{{
+				OutArgs: []rpc.ArgDesc{{
 					Doc: "All interface signatures implemented by the object.",
 				}},
 			},
@@ -73,7 +73,7 @@
 	}}
 }
 
-func (r *reservedMethods) Signature(callOrig ipc.ServerCall) ([]signature.Interface, error) {
+func (r *reservedMethods) Signature(callOrig rpc.ServerCall) ([]signature.Interface, error) {
 	// Copy the original context to shield ourselves from changes the flowServer makes.
 	call := copyMutableServerCall(callOrig)
 	call.M.Method = "__Signature"
@@ -82,14 +82,14 @@
 		disp = r.dispReserved
 	}
 	if disp == nil {
-		return nil, ipc.NewErrUnknownSuffix(call.Context(), call.Suffix())
+		return nil, rpc.NewErrUnknownSuffix(call.Context(), call.Suffix())
 	}
 	obj, _, err := disp.Lookup(call.Suffix())
 	switch {
 	case err != nil:
 		return nil, err
 	case obj == nil:
-		return nil, ipc.NewErrUnknownSuffix(call.Context(), call.Suffix())
+		return nil, rpc.NewErrUnknownSuffix(call.Context(), call.Suffix())
 	}
 	invoker, err := objectToInvoker(obj)
 	if err != nil {
@@ -113,7 +113,7 @@
 	return signature.CleanInterfaces(append(sig, rsig...)), nil
 }
 
-func (r *reservedMethods) MethodSignature(callOrig ipc.ServerCall, method string) (signature.Method, error) {
+func (r *reservedMethods) MethodSignature(callOrig rpc.ServerCall, method string) (signature.Method, error) {
 	// Copy the original context to shield ourselves from changes the flowServer makes.
 	call := copyMutableServerCall(callOrig)
 	call.M.Method = method
@@ -127,14 +127,14 @@
 		disp = r.dispReserved
 	}
 	if disp == nil {
-		return signature.Method{}, ipc.NewErrUnknownMethod(call.Context(), call.Method())
+		return signature.Method{}, rpc.NewErrUnknownMethod(call.Context(), call.Method())
 	}
 	obj, _, err := disp.Lookup(call.Suffix())
 	switch {
 	case err != nil:
 		return signature.Method{}, err
 	case obj == nil:
-		return signature.Method{}, ipc.NewErrUnknownMethod(call.Context(), call.Method())
+		return signature.Method{}, rpc.NewErrUnknownMethod(call.Context(), call.Method())
 	}
 	invoker, err := objectToInvoker(obj)
 	if err != nil {
@@ -145,7 +145,7 @@
 	return invoker.MethodSignature(call, call.Method())
 }
 
-func (r *reservedMethods) Glob(call ipc.StreamServerCall, pattern string) error {
+func (r *reservedMethods) Glob(call rpc.StreamServerCall, pattern string) error {
 	// Copy the original call to shield ourselves from changes the flowServer makes.
 	glob := globInternal{r.dispNormal, r.dispReserved, call.Suffix()}
 	return glob.Glob(copyMutableStreamServerCall(call), pattern)
@@ -178,8 +178,8 @@
 // authorized to access it. Internal objects require access.Debug. Service
 // objects require access.Resolve.
 type globInternal struct {
-	dispNormal   ipc.Dispatcher
-	dispReserved ipc.Dispatcher
+	dispNormal   rpc.Dispatcher
+	dispReserved rpc.Dispatcher
 	receiver     string
 }
 
@@ -190,13 +190,13 @@
 const maxRecursiveGlobDepth = 10
 
 func (i *globInternal) Glob(call *mutableStreamServerCall, pattern string) error {
-	vlog.VI(3).Infof("ipc Glob: Incoming request: %q.Glob(%q)", i.receiver, pattern)
+	vlog.VI(3).Infof("rpc Glob: Incoming request: %q.Glob(%q)", i.receiver, pattern)
 	g, err := glob.Parse(pattern)
 	if err != nil {
 		return err
 	}
 	disp := i.dispNormal
-	call.M.Method = ipc.GlobMethod
+	call.M.Method = rpc.GlobMethod
 	call.M.MethodTags = []*vdl.Value{vdl.ValueOf(access.Resolve)}
 	if naming.IsReserved(i.receiver) || (i.receiver == "" && naming.IsReserved(pattern)) {
 		disp = i.dispReserved
@@ -226,7 +226,7 @@
 
 		call.M.Suffix = naming.Join(i.receiver, state.name)
 		if state.depth > maxRecursiveGlobDepth {
-			vlog.Errorf("ipc Glob: exceeded recursion limit (%d): %q", maxRecursiveGlobDepth, call.Suffix())
+			vlog.Errorf("rpc Glob: exceeded recursion limit (%d): %q", maxRecursiveGlobDepth, call.Suffix())
 			call.Send(naming.GlobReplyError{
 				naming.GlobError{Name: state.name, Error: reserved.NewErrGlobMaxRecursionReached(call.Context())},
 			})
@@ -234,14 +234,14 @@
 		}
 		obj, auth, err := disp.Lookup(call.Suffix())
 		if err != nil {
-			vlog.VI(3).Infof("ipc Glob: Lookup failed for %q: %v", call.Suffix(), err)
+			vlog.VI(3).Infof("rpc Glob: Lookup failed for %q: %v", call.Suffix(), err)
 			call.Send(naming.GlobReplyError{
 				naming.GlobError{Name: state.name, Error: verror.Convert(verror.ErrNoExist, call.Context(), err)},
 			})
 			continue
 		}
 		if obj == nil {
-			vlog.VI(3).Infof("ipc Glob: object not found for %q", call.Suffix())
+			vlog.VI(3).Infof("rpc Glob: object not found for %q", call.Suffix())
 			call.Send(naming.GlobReplyError{
 				naming.GlobError{Name: state.name, Error: verror.New(verror.ErrNoExist, call.Context(), "nil object")},
 			})
@@ -251,7 +251,7 @@
 		// Verify that that requester is authorized for the current object.
 		if err := authorize(call, auth); err != nil {
 			someMatchesOmitted = true
-			vlog.VI(3).Infof("ipc Glob: client is not authorized for %q: %v", call.Suffix(), err)
+			vlog.VI(3).Infof("rpc Glob: client is not authorized for %q: %v", call.Suffix(), err)
 			continue
 		}
 
@@ -259,7 +259,7 @@
 		// use AllGlobber.
 		invoker, err := objectToInvoker(obj)
 		if err != nil {
-			vlog.VI(3).Infof("ipc Glob: object for %q cannot be converted to invoker: %v", call.Suffix(), err)
+			vlog.VI(3).Infof("rpc Glob: object for %q cannot be converted to invoker: %v", call.Suffix(), err)
 			call.Send(naming.GlobReplyError{
 				naming.GlobError{Name: state.name, Error: verror.Convert(verror.ErrInternal, call.Context(), err)},
 			})
@@ -277,10 +277,10 @@
 			continue
 		}
 		if gs.AllGlobber != nil {
-			vlog.VI(3).Infof("ipc Glob: %q implements AllGlobber", call.Suffix())
+			vlog.VI(3).Infof("rpc Glob: %q implements AllGlobber", call.Suffix())
 			ch, err := gs.AllGlobber.Glob__(call, state.glob.String())
 			if err != nil {
-				vlog.VI(3).Infof("ipc Glob: %q.Glob(%q) failed: %v", call.Suffix(), state.glob, err)
+				vlog.VI(3).Infof("rpc Glob: %q.Glob(%q) failed: %v", call.Suffix(), state.glob, err)
 				call.Send(naming.GlobReplyError{naming.GlobError{Name: state.name, Error: verror.Convert(verror.ErrInternal, call.Context(), err)}})
 				continue
 			}
@@ -299,7 +299,7 @@
 			}
 			continue
 		}
-		vlog.VI(3).Infof("ipc Glob: %q implements ChildrenGlobber", call.Suffix())
+		vlog.VI(3).Infof("rpc Glob: %q implements ChildrenGlobber", call.Suffix())
 		children, err := gs.ChildrenGlobber.GlobChildren__(call)
 		// The requested object doesn't exist.
 		if err != nil {
@@ -321,7 +321,7 @@
 		}
 		for child := range children {
 			if len(child) == 0 || strings.Contains(child, "/") {
-				vlog.Errorf("ipc Glob: %q.GlobChildren__() sent an invalid child name: %q", call.Suffix(), child)
+				vlog.Errorf("rpc Glob: %q.GlobChildren__() sent an invalid child name: %q", call.Suffix(), child)
 				continue
 			}
 			if ok, _, left := state.glob.MatchInitialSegment(child); ok {
@@ -338,13 +338,13 @@
 
 // copyMutableStreamServerCall returns a new mutableStreamServerCall copied from call.
 // Changes to the original call don't affect the mutable fields in the returned object.
-func copyMutableStreamServerCall(call ipc.StreamServerCall) *mutableStreamServerCall {
+func copyMutableStreamServerCall(call rpc.StreamServerCall) *mutableStreamServerCall {
 	return &mutableStreamServerCall{Stream: call, mutableServerCall: copyMutableServerCall(call)}
 }
 
 // copyMutableServerCall returns a new mutableServerCall copied from call. Changes to
 // the original call don't affect the mutable fields in the returned object.
-func copyMutableServerCall(call ipc.ServerCall) *mutableServerCall {
+func copyMutableServerCall(call rpc.ServerCall) *mutableServerCall {
 	c := &mutableServerCall{}
 	c.T = security.SetCall(call.Context(), c)
 	c.M.CallParams.Copy(call)
@@ -353,10 +353,10 @@
 	return c
 }
 
-// mutableStreamServerCall provides a mutable implementation of ipc.StreamServerCall,
+// mutableStreamServerCall provides a mutable implementation of rpc.StreamServerCall,
 // useful for our various special-cased reserved methods.
 type mutableStreamServerCall struct {
-	ipc.Stream
+	rpc.Stream
 	*mutableServerCall
 }
 
@@ -366,7 +366,7 @@
 	M struct {
 		security.CallParams
 		GrantedBlessings security.Blessings
-		Server           ipc.Server
+		Server           rpc.Server
 	}
 }
 
@@ -388,5 +388,5 @@
 	return c.M.RemoteDischarges
 }
 func (c *mutableServerCall) GrantedBlessings() security.Blessings { return c.M.GrantedBlessings }
-func (c *mutableServerCall) Server() ipc.Server                   { return c.M.Server }
+func (c *mutableServerCall) Server() rpc.Server                   { return c.M.Server }
 func (c *mutableServerCall) VanadiumContext() *context.T          { return c.T }
diff --git a/profiles/internal/rpc/resolve_internal_test.go b/profiles/internal/rpc/resolve_internal_test.go
new file mode 100644
index 0000000..14b4ac2
--- /dev/null
+++ b/profiles/internal/rpc/resolve_internal_test.go
@@ -0,0 +1,9 @@
+package rpc
+
+import (
+	"v.io/v23/rpc"
+)
+
+func InternalServerResolveToEndpoint(s rpc.Server, name string) (string, error) {
+	return s.(*server).resolveToEndpoint(name)
+}
diff --git a/profiles/internal/ipc/resolve_test.go b/profiles/internal/rpc/resolve_test.go
similarity index 94%
rename from profiles/internal/ipc/resolve_test.go
rename to profiles/internal/rpc/resolve_test.go
index b415220..40f9c23 100644
--- a/profiles/internal/ipc/resolve_test.go
+++ b/profiles/internal/rpc/resolve_test.go
@@ -1,4 +1,4 @@
-package ipc_test
+package rpc_test
 
 import (
 	"flag"
@@ -10,16 +10,16 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 
 	"v.io/x/ref/lib/flags"
 	"v.io/x/ref/profiles/fake"
 	"v.io/x/ref/profiles/internal"
-	iipc "v.io/x/ref/profiles/internal/ipc"
 	"v.io/x/ref/profiles/internal/lib/appcycle"
 	inaming "v.io/x/ref/profiles/internal/naming"
+	irpc "v.io/x/ref/profiles/internal/rpc"
 	grt "v.io/x/ref/profiles/internal/rt"
 	mounttable "v.io/x/ref/services/mounttable/lib"
 	"v.io/x/ref/test"
@@ -39,7 +39,7 @@
 func setupRuntime() {
 	ac := appcycle.New()
 
-	listenSpec := ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
+	listenSpec := rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
 
 	rootctx, rootcancel := context.RootContext()
 	ctx, cancel := context.WithCancel(rootctx)
@@ -143,7 +143,7 @@
 		{"unknown", "", notfound},
 	}
 	for _, tc := range testcases {
-		result, err := iipc.InternalServerResolveToEndpoint(server, tc.address)
+		result, err := irpc.InternalServerResolveToEndpoint(server, tc.address)
 		if (err == nil) != (tc.err == nil) {
 			t.Errorf("Unexpected err for %q. Got %v, expected %v", tc.address, err, tc.err)
 		}
diff --git a/profiles/internal/ipc/results_store.go b/profiles/internal/rpc/results_store.go
similarity index 99%
rename from profiles/internal/ipc/results_store.go
rename to profiles/internal/rpc/results_store.go
index d029306..4405b67 100644
--- a/profiles/internal/ipc/results_store.go
+++ b/profiles/internal/rpc/results_store.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"container/heap"
diff --git a/profiles/internal/ipc/results_store_test.go b/profiles/internal/rpc/results_store_test.go
similarity index 99%
rename from profiles/internal/ipc/results_store_test.go
rename to profiles/internal/rpc/results_store_test.go
index 108f025..ad1402f 100644
--- a/profiles/internal/ipc/results_store_test.go
+++ b/profiles/internal/rpc/results_store_test.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"sort"
diff --git a/profiles/internal/ipc/server.go b/profiles/internal/rpc/server.go
similarity index 90%
rename from profiles/internal/ipc/server.go
rename to profiles/internal/rpc/server.go
index be74414..8c8da5c 100644
--- a/profiles/internal/ipc/server.go
+++ b/profiles/internal/rpc/server.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"errors"
@@ -12,10 +12,10 @@
 
 	"v.io/v23/config"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/naming/ns"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/security/access"
 	"v.io/v23/vdl"
@@ -23,13 +23,13 @@
 	"v.io/v23/vom"
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/profiles/internal/ipc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream"
 
 	"v.io/x/lib/netstate"
 	"v.io/x/ref/lib/stats"
-	"v.io/x/ref/profiles/internal/ipc/stream/vc"
 	"v.io/x/ref/profiles/internal/lib/publisher"
 	inaming "v.io/x/ref/profiles/internal/naming"
+	"v.io/x/ref/profiles/internal/rpc/stream/vc"
 
 	// TODO(cnicolaou): finish verror2 -> verror transition, in particular
 	// for communicating from server to client.
@@ -61,7 +61,7 @@
 	stream    *config.Stream
 	ch        chan config.Setting // channel to receive dhcp settings over
 	err       error               // error status.
-	watchers  map[chan<- ipc.NetworkChange]struct{}
+	watchers  map[chan<- rpc.NetworkChange]struct{}
 }
 
 type server struct {
@@ -86,8 +86,8 @@
 	// all endpoints generated and returned by this server
 	endpoints []naming.Endpoint
 
-	disp               ipc.Dispatcher // dispatcher to serve RPCs
-	dispReserved       ipc.Dispatcher // dispatcher for reserved methods
+	disp               rpc.Dispatcher // dispatcher to serve RPCs
+	dispReserved       rpc.Dispatcher // dispatcher for reserved methods
 	active             sync.WaitGroup // active goroutines we've spawned.
 	stoppedChan        chan struct{}  // closed when the server has been stopped.
 	preferredProtocols []string       // protocols to use when resolving proxy name to endpoint.
@@ -98,8 +98,8 @@
 	ns               ns.Namespace
 	servesMountTable bool
 
-	// TODO(cnicolaou): add roaming stats to ipcStats
-	stats *ipcStats // stats for this server.
+	// TODO(cnicolaou): add roaming stats to rpcStats
+	stats *rpcStats // stats for this server.
 }
 
 type serverState int
@@ -127,13 +127,13 @@
 		stopped:     next{},
 	}
 
-	externalStates = map[serverState]ipc.ServerState{
-		initialized: ipc.ServerInit,
-		listening:   ipc.ServerActive,
-		serving:     ipc.ServerActive,
-		publishing:  ipc.ServerActive,
-		stopping:    ipc.ServerStopping,
-		stopped:     ipc.ServerStopped,
+	externalStates = map[serverState]rpc.ServerState{
+		initialized: rpc.ServerInit,
+		listening:   rpc.ServerActive,
+		serving:     rpc.ServerActive,
+		publishing:  rpc.ServerActive,
+		stopping:    rpc.ServerStopping,
+		stopped:     rpc.ServerStopped,
 	}
 )
 
@@ -149,12 +149,12 @@
 	return s.state == stopping || s.state == stopped
 }
 
-var _ ipc.Server = (*server)(nil)
+var _ rpc.Server = (*server)(nil)
 
-func InternalNewServer(ctx *context.T, streamMgr stream.Manager, ns ns.Namespace, client ipc.Client, principal security.Principal, opts ...ipc.ServerOpt) (ipc.Server, error) {
+func InternalNewServer(ctx *context.T, streamMgr stream.Manager, ns ns.Namespace, client rpc.Client, principal security.Principal, opts ...rpc.ServerOpt) (rpc.Server, error) {
 	ctx, cancel := context.WithRootCancel(ctx)
 	ctx, _ = vtrace.SetNewSpan(ctx, "NewServer")
-	statsPrefix := naming.Join("ipc", "server", "routing-id", streamMgr.RoutingID().String())
+	statsPrefix := naming.Join("rpc", "server", "routing-id", streamMgr.RoutingID().String())
 	s := &server{
 		ctx:         ctx,
 		cancel:      cancel,
@@ -167,7 +167,7 @@
 		stoppedChan: make(chan struct{}),
 		ipNets:      ipNetworks(),
 		ns:          ns,
-		stats:       newIPCStats(statsPrefix),
+		stats:       newRPCStats(statsPrefix),
 	}
 	var (
 		blessings             security.Blessings
@@ -209,8 +209,8 @@
 	return s, nil
 }
 
-func (s *server) Status() ipc.ServerStatus {
-	status := ipc.ServerStatus{}
+func (s *server) Status() rpc.ServerStatus {
+	status := rpc.ServerStatus{}
 	defer vlog.LogCall()()
 	s.Lock()
 	defer s.Unlock()
@@ -229,14 +229,14 @@
 			status.Endpoints = append(status.Endpoints, iep)
 		}
 	}
-	status.Proxies = make([]ipc.ProxyStatus, 0, len(s.proxies))
+	status.Proxies = make([]rpc.ProxyStatus, 0, len(s.proxies))
 	for k, v := range s.proxies {
-		status.Proxies = append(status.Proxies, ipc.ProxyStatus{k, v.endpoint, v.err})
+		status.Proxies = append(status.Proxies, rpc.ProxyStatus{k, v.endpoint, v.err})
 	}
 	return status
 }
 
-func (s *server) WatchNetwork(ch chan<- ipc.NetworkChange) {
+func (s *server) WatchNetwork(ch chan<- rpc.NetworkChange) {
 	defer vlog.LogCall()()
 	s.Lock()
 	defer s.Unlock()
@@ -245,7 +245,7 @@
 	}
 }
 
-func (s *server) UnwatchNetwork(ch chan<- ipc.NetworkChange) {
+func (s *server) UnwatchNetwork(ch chan<- rpc.NetworkChange) {
 	defer vlog.LogCall()()
 	s.Lock()
 	defer s.Unlock()
@@ -289,14 +289,14 @@
 // chooser function. It returns an indication of whether the supplied address
 // was fully specified or not, returning false if the address was fully
 // specified, and true if it was not.
-func getPossibleAddrs(protocol, host, port string, chooser ipc.AddressChooser) ([]ipc.Address, bool, error) {
+func getPossibleAddrs(protocol, host, port string, chooser rpc.AddressChooser) ([]rpc.Address, bool, error) {
 
 	ip := net.ParseIP(host)
 	if ip == nil {
 		return nil, false, fmt.Errorf("failed to parse %q as an IP host", host)
 	}
 
-	addrFromIP := func(ip net.IP) ipc.Address {
+	addrFromIP := func(ip net.IP) rpc.Address {
 		return &netstate.AddrIfc{
 			Addr: &net.IPAddr{IP: ip},
 		}
@@ -315,15 +315,15 @@
 		}
 		// We don't have a chooser, so we just return the address the
 		// underlying system has chosen.
-		return []ipc.Address{addrFromIP(ip)}, true, nil
+		return []rpc.Address{addrFromIP(ip)}, true, nil
 	}
-	return []ipc.Address{addrFromIP(ip)}, false, nil
+	return []rpc.Address{addrFromIP(ip)}, false, nil
 }
 
 // createEndpoints creates appropriate inaming.Endpoint instances for
 // all of the externally accessible network addresses that can be used
 // to reach this server.
-func (s *server) createEndpoints(lep naming.Endpoint, chooser ipc.AddressChooser) ([]*inaming.Endpoint, string, bool, error) {
+func (s *server) createEndpoints(lep naming.Endpoint, chooser rpc.AddressChooser) ([]*inaming.Endpoint, string, bool, error) {
 	iep, ok := lep.(*inaming.Endpoint)
 	if !ok {
 		return nil, "", false, fmt.Errorf("internal type conversion error for %T", lep)
@@ -355,7 +355,7 @@
 	return ieps, port, unspecified, nil
 }
 
-func (s *server) Listen(listenSpec ipc.ListenSpec) ([]naming.Endpoint, error) {
+func (s *server) Listen(listenSpec rpc.ListenSpec) ([]naming.Endpoint, error) {
 	defer vlog.LogCall()()
 	useProxy := len(listenSpec.Proxy) > 0
 	if !useProxy && len(listenSpec.Addrs) == 0 {
@@ -419,7 +419,7 @@
 		dhcp := &dhcpState{
 			name:      listenSpec.StreamName,
 			publisher: listenSpec.StreamPublisher,
-			watchers:  make(map[chan<- ipc.NetworkChange]struct{}),
+			watchers:  make(map[chan<- rpc.NetworkChange]struct{}),
 		}
 		s.dhcpState = dhcp
 		dhcp.ch = make(chan config.Setting, 10)
@@ -573,7 +573,7 @@
 }
 
 func (s *server) listenLoop(ln stream.Listener, ep naming.Endpoint) error {
-	defer vlog.VI(1).Infof("ipc: Stopped listening on %s", ep)
+	defer vlog.VI(1).Infof("rpc: Stopped listening on %s", ep)
 	var calls sync.WaitGroup
 
 	if !s.addListener(ln) {
@@ -588,7 +588,7 @@
 	for {
 		flow, err := ln.Accept()
 		if err != nil {
-			vlog.VI(10).Infof("ipc: Accept on %v failed: %v", ep, err)
+			vlog.VI(10).Infof("rpc: Accept on %v failed: %v", ep, err)
 			return err
 		}
 		calls.Add(1)
@@ -613,14 +613,14 @@
 }
 
 func (s *server) dhcpLoop(ch chan config.Setting) {
-	defer vlog.VI(1).Infof("ipc: Stopped listen for dhcp changes")
-	vlog.VI(2).Infof("ipc: dhcp loop")
+	defer vlog.VI(1).Infof("rpc: Stopped listen for dhcp changes")
+	vlog.VI(2).Infof("rpc: dhcp loop")
 	for setting := range ch {
 		if setting == nil {
 			return
 		}
 		switch v := setting.Value().(type) {
-		case []ipc.Address:
+		case []rpc.Address:
 			s.Lock()
 			if s.isStopState() {
 				s.Unlock()
@@ -629,19 +629,19 @@
 			var err error
 			var changed []naming.Endpoint
 			switch setting.Name() {
-			case ipc.NewAddrsSetting:
+			case rpc.NewAddrsSetting:
 				changed = s.addAddresses(v)
-			case ipc.RmAddrsSetting:
+			case rpc.RmAddrsSetting:
 				changed, err = s.removeAddresses(v)
 			}
-			change := ipc.NetworkChange{
+			change := rpc.NetworkChange{
 				Time:    time.Now(),
 				State:   externalStates[s.state],
 				Setting: setting,
 				Changed: changed,
 				Error:   err,
 			}
-			vlog.VI(2).Infof("ipc: dhcp: change %v", change)
+			vlog.VI(2).Infof("rpc: dhcp: change %v", change)
 			for ch, _ := range s.dhcpState.watchers {
 				select {
 				case ch <- change:
@@ -650,12 +650,12 @@
 			}
 			s.Unlock()
 		default:
-			vlog.Errorf("ipc: dhcpLoop: unhandled setting type %T", v)
+			vlog.Errorf("rpc: dhcpLoop: unhandled setting type %T", v)
 		}
 	}
 }
 
-func getHost(address ipc.Address) string {
+func getHost(address rpc.Address) string {
 	host, _, err := net.SplitHostPort(address.Address().String())
 	if err == nil {
 		return host
@@ -666,7 +666,7 @@
 
 // Remove all endpoints that have the same host address as the supplied
 // address parameter.
-func (s *server) removeAddresses(addresses []ipc.Address) ([]naming.Endpoint, error) {
+func (s *server) removeAddresses(addresses []rpc.Address) ([]naming.Endpoint, error) {
 	var removed []naming.Endpoint
 	for _, address := range addresses {
 		host := getHost(address)
@@ -679,7 +679,7 @@
 						lnHost = iep.Address
 					}
 					if lnHost == host {
-						vlog.VI(2).Infof("ipc: dhcp removing: %s", iep)
+						vlog.VI(2).Infof("rpc: dhcp removing: %s", iep)
 						removed = append(removed, iep)
 						s.publisher.RemoveServer(iep.String())
 						continue
@@ -703,7 +703,7 @@
 // externally accessible.
 // This places the onus on the dhcp/roaming code that sends us addresses
 // to ensure that those addresses are externally reachable.
-func (s *server) addAddresses(addresses []ipc.Address) []naming.Endpoint {
+func (s *server) addAddresses(addresses []rpc.Address) []naming.Endpoint {
 	var added []naming.Endpoint
 	for _, address := range addresses {
 		if !netstate.IsAccessibleIP(address) {
@@ -715,7 +715,7 @@
 				niep := ls.protoIEP
 				niep.Address = net.JoinHostPort(host, ls.port)
 				ls.ieps = append(ls.ieps, &niep)
-				vlog.VI(2).Infof("ipc: dhcp adding: %s", niep)
+				vlog.VI(2).Infof("rpc: dhcp adding: %s", niep)
 				s.publisher.AddServer(niep.String(), s.servesMountTable)
 				added = append(added, &niep)
 			}
@@ -725,13 +725,13 @@
 }
 
 type leafDispatcher struct {
-	invoker ipc.Invoker
+	invoker rpc.Invoker
 	auth    security.Authorizer
 }
 
 func (d leafDispatcher) Lookup(suffix string) (interface{}, security.Authorizer, error) {
 	if suffix != "" {
-		return nil, nil, ipc.NewErrUnknownSuffix(nil, suffix)
+		return nil, nil, rpc.NewErrUnknownSuffix(nil, suffix)
 	}
 	return d.invoker, d.auth, nil
 }
@@ -748,7 +748,7 @@
 	return s.ServeDispatcher(name, &leafDispatcher{invoker, authorizer})
 }
 
-func (s *server) ServeDispatcher(name string, disp ipc.Dispatcher) error {
+func (s *server) ServeDispatcher(name string, disp rpc.Dispatcher) error {
 	defer vlog.LogCall()()
 	if disp == nil {
 		return verror.New(verror.ErrBadArg, s.ctx, "nil dispatcher")
@@ -901,8 +901,8 @@
 // flow that's already connected to the client.
 type flowServer struct {
 	*context.T
-	server *server        // ipc.Server that this flow server belongs to
-	disp   ipc.Dispatcher // ipc.Dispatcher that will serve RPCs on this flow
+	server *server        // rpc.Server that this flow server belongs to
+	disp   rpc.Dispatcher // rpc.Dispatcher that will serve RPCs on this flow
 	dec    *vom.Decoder   // to decode requests and args from the client
 	enc    *vom.Encoder   // to encode responses and results to the client
 	flow   stream.Flow    // underlying flow
@@ -919,7 +919,7 @@
 	allowDebug       bool // true if the caller is permitted to view debug information.
 }
 
-var _ ipc.Stream = (*flowServer)(nil)
+var _ rpc.Stream = (*flowServer)(nil)
 
 func newFlowServer(flow stream.Flow, server *server) (*flowServer, error) {
 	server.Lock()
@@ -960,7 +960,7 @@
 	}
 
 	// Respond to the client with the response header and positional results.
-	response := ipc.Response{
+	response := rpc.Response{
 		Error:            err,
 		EndStreamResults: true,
 		NumPosResults:    uint64(len(results)),
@@ -971,7 +971,7 @@
 		if err == io.EOF {
 			return err
 		}
-		return fmt.Errorf("ipc: response encoding failed: %v", err)
+		return fmt.Errorf("rpc: response encoding failed: %v", err)
 	}
 	if response.Error != nil {
 		return response.Error
@@ -981,13 +981,13 @@
 			if err == io.EOF {
 				return err
 			}
-			return fmt.Errorf("ipc: result #%d [%T=%v] encoding failed: %v", ix, res, res, err)
+			return fmt.Errorf("rpc: result #%d [%T=%v] encoding failed: %v", ix, res, res, err)
 		}
 	}
 	// TODO(ashankar): Should unread data from the flow be drained?
 	//
 	// Reason to do so:
-	// The common stream.Flow implementation (veyron/profiles/internal/ipc/stream/vc/reader.go)
+	// The common stream.Flow implementation (veyron/profiles/internal/rpc/stream/vc/reader.go)
 	// uses iobuf.Slices backed by an iobuf.Pool. If the stream is not drained, these
 	// slices will not be returned to the pool leading to possibly increased memory usage.
 	//
@@ -1000,7 +1000,7 @@
 	return nil
 }
 
-func (fs *flowServer) readIPCRequest() (*ipc.Request, error) {
+func (fs *flowServer) readRPCRequest() (*rpc.Request, error) {
 	// Set a default timeout before reading from the flow. Without this timeout,
 	// a client that sends no request or a partial request will retain the flow
 	// indefinitely (and lock up server resources).
@@ -1009,7 +1009,7 @@
 	fs.flow.SetDeadline(initTimer.C)
 
 	// Decode the initial request.
-	var req ipc.Request
+	var req rpc.Request
 	if err := fs.dec.Decode(&req); err != nil {
 		return nil, verror.New(verror.ErrBadProtocol, fs.T, newErrBadRequest(fs.T, err))
 	}
@@ -1018,9 +1018,9 @@
 
 func (fs *flowServer) processRequest() ([]interface{}, error) {
 	fs.starttime = time.Now()
-	req, err := fs.readIPCRequest()
+	req, err := fs.readRPCRequest()
 	if err != nil {
-		// We don't know what the ipc call was supposed to be, but we'll create
+		// We don't know what the rpc call was supposed to be, but we'll create
 		// a placeholder span so we can capture annotations.
 		fs.T, _ = vtrace.SetNewSpan(fs.T, fmt.Sprintf("\"%s\".UNKNOWN", fs.Name()))
 		return nil, err
@@ -1097,10 +1097,10 @@
 
 // lookup returns the invoker and authorizer responsible for serving the given
 // name and method.  The suffix is stripped of any leading slashes. If it begins
-// with ipc.DebugKeyword, we use the internal debug dispatcher to look up the
+// with rpc.DebugKeyword, we use the internal debug dispatcher to look up the
 // invoker. Otherwise, and we use the server's dispatcher. The suffix and method
 // value may be modified to match the actual suffix and method to use.
-func (fs *flowServer) lookup(suffix string, method *string) (ipc.Invoker, security.Authorizer, error) {
+func (fs *flowServer) lookup(suffix string, method *string) (rpc.Invoker, security.Authorizer, error) {
 	if naming.IsReserved(*method) {
 		// All reserved methods are trapped and handled here, by removing the
 		// reserved prefix and invoking them on reservedMethods.  E.g. "__Glob"
@@ -1125,20 +1125,20 @@
 			return invoker, auth, nil
 		}
 	}
-	return nil, nil, ipc.NewErrUnknownSuffix(nil, suffix)
+	return nil, nil, rpc.NewErrUnknownSuffix(nil, suffix)
 }
 
-func objectToInvoker(obj interface{}) (ipc.Invoker, error) {
+func objectToInvoker(obj interface{}) (rpc.Invoker, error) {
 	if obj == nil {
 		return nil, errors.New("nil object")
 	}
-	if invoker, ok := obj.(ipc.Invoker); ok {
+	if invoker, ok := obj.(rpc.Invoker); ok {
 		return invoker, nil
 	}
-	return ipc.ReflectInvoker(obj)
+	return rpc.ReflectInvoker(obj)
 }
 
-func (fs *flowServer) initSecurity(req *ipc.Request) error {
+func (fs *flowServer) initSecurity(req *rpc.Request) error {
 	// LocalPrincipal is nil which means we are operating under
 	// VCSecurityNone.
 	if fs.flow.LocalPrincipal() == nil {
@@ -1186,7 +1186,7 @@
 	return nil
 }
 
-func authorize(call ipc.ServerCall, auth security.Authorizer) error {
+func authorize(call rpc.ServerCall, auth security.Authorizer) error {
 	if call.LocalPrincipal() == nil {
 		// LocalPrincipal is nil means that the server wanted to avoid
 		// authentication, and thus wanted to skip authorization as well.
@@ -1206,27 +1206,27 @@
 // debugContext is a context which wraps another context but always returns
 // the debug tag.
 type debugContext struct {
-	ipc.ServerCall
+	rpc.ServerCall
 }
 
 func (debugContext) MethodTags() []*vdl.Value {
 	return []*vdl.Value{vdl.ValueOf(access.Debug)}
 }
 
-// Send implements the ipc.Stream method.
+// Send implements the rpc.Stream method.
 func (fs *flowServer) Send(item interface{}) error {
 	defer vlog.LogCall()()
 	// The empty response header indicates what follows is a streaming result.
-	if err := fs.enc.Encode(ipc.Response{}); err != nil {
+	if err := fs.enc.Encode(rpc.Response{}); err != nil {
 		return err
 	}
 	return fs.enc.Encode(item)
 }
 
-// Recv implements the ipc.Stream method.
+// Recv implements the rpc.Stream method.
 func (fs *flowServer) Recv(itemptr interface{}) error {
 	defer vlog.LogCall()()
-	var req ipc.Request
+	var req rpc.Request
 	if err := fs.dec.Decode(&req); err != nil {
 		return err
 	}
@@ -1237,7 +1237,7 @@
 	return fs.dec.Decode(itemptr)
 }
 
-// Implementations of ipc.ServerCall methods.
+// Implementations of rpc.ServerCall methods.
 
 func (fs *flowServer) LocalDischarges() map[string]security.Discharge {
 	//nologcall
@@ -1247,7 +1247,7 @@
 	//nologcall
 	return fs.discharges
 }
-func (fs *flowServer) Server() ipc.Server {
+func (fs *flowServer) Server() rpc.Server {
 	//nologcall
 	return fs.server
 }
@@ -1271,7 +1271,7 @@
 	return fs.T
 }
 
-// TODO(cnicolaou): remove Name from ipc.ServerCall and all of
+// TODO(cnicolaou): remove Name from rpc.ServerCall and all of
 // its implementations
 func (fs *flowServer) Name() string {
 	//nologcall
diff --git a/profiles/internal/ipc/server_authorizer.go b/profiles/internal/rpc/server_authorizer.go
similarity index 95%
rename from profiles/internal/ipc/server_authorizer.go
rename to profiles/internal/rpc/server_authorizer.go
index 1bf273a..51a5424 100644
--- a/profiles/internal/ipc/server_authorizer.go
+++ b/profiles/internal/rpc/server_authorizer.go
@@ -1,12 +1,12 @@
-package ipc
+package rpc
 
 import (
 	"errors"
 	"reflect"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 )
@@ -41,7 +41,7 @@
 // options supplied to the call that initiated the flow.
 //
 // This method assumes that canCreateServerAuthorizer(opts) is nil.
-func newServerAuthorizer(ctx *context.T, patternsFromNameResolution []security.BlessingPattern, opts ...ipc.CallOpt) security.Authorizer {
+func newServerAuthorizer(ctx *context.T, patternsFromNameResolution []security.BlessingPattern, opts ...rpc.CallOpt) security.Authorizer {
 	auth := &serverAuthorizer{
 		patternsFromNameResolution: patternsFromNameResolution,
 	}
@@ -102,7 +102,7 @@
 	return false
 }
 
-func canCreateServerAuthorizer(opts []ipc.CallOpt) error {
+func canCreateServerAuthorizer(opts []rpc.CallOpt) error {
 	var pkey security.PublicKey
 	for _, o := range opts {
 		switch v := o.(type) {
diff --git a/profiles/internal/ipc/server_authorizer_test.go b/profiles/internal/rpc/server_authorizer_test.go
similarity index 99%
rename from profiles/internal/ipc/server_authorizer_test.go
rename to profiles/internal/rpc/server_authorizer_test.go
index e185e4b..5cbd381 100644
--- a/profiles/internal/ipc/server_authorizer_test.go
+++ b/profiles/internal/rpc/server_authorizer_test.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"testing"
diff --git a/profiles/internal/ipc/server_test.go b/profiles/internal/rpc/server_test.go
similarity index 89%
rename from profiles/internal/ipc/server_test.go
rename to profiles/internal/rpc/server_test.go
index 808bb8e..997524f 100644
--- a/profiles/internal/ipc/server_test.go
+++ b/profiles/internal/rpc/server_test.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"net"
@@ -10,15 +10,15 @@
 	"v.io/v23"
 	"v.io/v23/config"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
 
 	"v.io/x/lib/netstate"
-	imanager "v.io/x/ref/profiles/internal/ipc/stream/manager"
 	inaming "v.io/x/ref/profiles/internal/naming"
+	imanager "v.io/x/ref/profiles/internal/rpc/stream/manager"
 	tnaming "v.io/x/ref/profiles/internal/testing/mocks/naming"
 	tsecurity "v.io/x/ref/test/security"
 )
@@ -30,7 +30,7 @@
 }
 type noExportedFieldsType struct{}
 
-func (noExportedFieldsType) F(_ ipc.ServerCall, f fieldType) error { return nil }
+func (noExportedFieldsType) F(_ rpc.ServerCall, f fieldType) error { return nil }
 
 type badObjectDispatcher struct{}
 
@@ -95,16 +95,16 @@
 		t.Fatal(err)
 	}
 	defer server.Stop()
-	_, err = server.Listen(ipc.ListenSpec{})
+	_, err = server.Listen(rpc.ListenSpec{})
 	if !verror.Is(err, verror.ErrBadArg.ID) {
 		t.Fatalf("expected a BadArg error: got %v", err)
 	}
-	_, err = server.Listen(ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "*:0"}}})
+	_, err = server.Listen(rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "*:0"}}})
 	if !verror.Is(err, verror.ErrBadArg.ID) {
 		t.Fatalf("expected a BadArg error: got %v", err)
 	}
-	_, err = server.Listen(ipc.ListenSpec{
-		Addrs: ipc.ListenAddrs{
+	_, err = server.Listen(rpc.ListenSpec{
+		Addrs: rpc.ListenAddrs{
 			{"tcp", "*:0"},
 			{"tcp", "127.0.0.1:0"},
 		}})
@@ -115,7 +115,7 @@
 	if got, want := len(status.Errors), 1; got != want {
 		t.Fatalf("got %s, want %s", got, want)
 	}
-	_, err = server.Listen(ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "*:0"}}})
+	_, err = server.Listen(rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "*:0"}}})
 	if !verror.Is(err, verror.ErrBadArg.ID) {
 		t.Fatalf("expected a BadArg error: got %v", err)
 	}
@@ -127,7 +127,7 @@
 
 type statusServer struct{ ch chan struct{} }
 
-func (s *statusServer) Hang(call ipc.ServerCall) error {
+func (s *statusServer) Hang(call rpc.ServerCall) error {
 	<-s.ch
 	return nil
 }
@@ -146,12 +146,12 @@
 	defer server.Stop()
 
 	status := server.Status()
-	if got, want := status.State, ipc.ServerInit; got != want {
+	if got, want := status.State, rpc.ServerInit; got != want {
 		t.Fatalf("got %s, want %s", got, want)
 	}
-	server.Listen(ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}})
+	server.Listen(rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}})
 	status = server.Status()
-	if got, want := status.State, ipc.ServerActive; got != want {
+	if got, want := status.State, rpc.ServerActive; got != want {
 		t.Fatalf("got %s, want %s", got, want)
 	}
 	serverChan := make(chan struct{})
@@ -160,7 +160,7 @@
 		t.Fatalf(err.Error())
 	}
 	status = server.Status()
-	if got, want := status.State, ipc.ServerActive; got != want {
+	if got, want := status.State, rpc.ServerActive; got != want {
 		t.Fatalf("got %s, want %s", got, want)
 	}
 
@@ -192,7 +192,7 @@
 	then := time.Now()
 	for {
 		status = server.Status()
-		if got, want := status.State, ipc.ServerStopping; got != want {
+		if got, want := status.State, rpc.ServerStopping; got != want {
 			if time.Now().Sub(then) > time.Minute {
 				t.Fatalf("got %s, want %s", got, want)
 			}
@@ -212,7 +212,7 @@
 	then = time.Now()
 	for {
 		status = server.Status()
-		if got, want := status.State, ipc.ServerStopped; got != want {
+		if got, want := status.State, rpc.ServerStopped; got != want {
 			if time.Now().Sub(then) > time.Minute {
 				t.Fatalf("got %s, want %s", got, want)
 			}
@@ -246,13 +246,13 @@
 	expectNoError(err)
 	defer server.Stop()
 
-	expectState := func(s ipc.ServerState) {
+	expectState := func(s rpc.ServerState) {
 		if got, want := server.Status().State, s; got != want {
 			t.Fatalf("%s: got %s, want %s", loc(1), got, want)
 		}
 	}
 
-	expectState(ipc.ServerInit)
+	expectState(rpc.ServerInit)
 
 	// Need to call Listen first.
 	err = server.Serve("", &testServer{}, nil)
@@ -260,10 +260,10 @@
 	err = server.AddName("a")
 	expectBadState(err)
 
-	_, err = server.Listen(ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}})
+	_, err = server.Listen(rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}})
 	expectNoError(err)
 
-	expectState(ipc.ServerActive)
+	expectState(rpc.ServerActive)
 
 	err = server.Serve("", &testServer{}, nil)
 	expectNoError(err)
@@ -271,16 +271,16 @@
 	err = server.Serve("", &testServer{}, nil)
 	expectBadState(err)
 
-	expectState(ipc.ServerActive)
+	expectState(rpc.ServerActive)
 
 	err = server.AddName("a")
 	expectNoError(err)
 
-	expectState(ipc.ServerActive)
+	expectState(rpc.ServerActive)
 
 	server.RemoveName("a")
 
-	expectState(ipc.ServerActive)
+	expectState(rpc.ServerActive)
 
 	err = server.Stop()
 	expectNoError(err)
@@ -303,8 +303,8 @@
 	}
 	defer server.Stop()
 
-	eps, err := server.Listen(ipc.ListenSpec{
-		Addrs: ipc.ListenAddrs{
+	eps, err := server.Listen(rpc.ListenSpec{
+		Addrs: rpc.ListenAddrs{
 			{"tcp", "127.0.0.1:0"},
 			{"tcp", "127.0.0.1:0"},
 		}})
@@ -368,7 +368,7 @@
 	return &niep
 }
 
-func getIPAddrs(eps []naming.Endpoint) []ipc.Address {
+func getIPAddrs(eps []naming.Endpoint) []rpc.Address {
 	hosts := map[string]struct{}{}
 	for _, ep := range eps {
 		iep := (ep).(*inaming.Endpoint)
@@ -377,7 +377,7 @@
 			hosts[h] = struct{}{}
 		}
 	}
-	addrs := []ipc.Address{}
+	addrs := []rpc.Address{}
 	for h, _ := range hosts {
 		a := &netstate.AddrIfc{Addr: &net.IPAddr{IP: net.ParseIP(h)}}
 		addrs = append(addrs, a)
@@ -436,14 +436,14 @@
 	}
 	defer func() { publisher.Shutdown(); <-stop }()
 
-	ipv4And6 := func(network string, addrs []ipc.Address) ([]ipc.Address, error) {
+	ipv4And6 := func(network string, addrs []rpc.Address) ([]rpc.Address, error) {
 		accessible := netstate.AddrList(addrs)
 		ipv4 := accessible.Filter(netstate.IsUnicastIPv4)
 		ipv6 := accessible.Filter(netstate.IsUnicastIPv6)
 		return append(ipv4, ipv6...), nil
 	}
-	spec := ipc.ListenSpec{
-		Addrs: ipc.ListenAddrs{
+	spec := rpc.ListenSpec{
+		Addrs: rpc.ListenAddrs{
 			{"tcp", "*:0"},
 			{"tcp", ":0"},
 			{"tcp", ":0"},
@@ -480,13 +480,13 @@
 	n1 := &netstate.AddrIfc{Addr: &net.IPAddr{IP: net.ParseIP("1.1.1.1")}}
 	n2 := &netstate.AddrIfc{Addr: &net.IPAddr{IP: net.ParseIP("2.2.2.2")}}
 
-	watcher := make(chan ipc.NetworkChange, 10)
+	watcher := make(chan rpc.NetworkChange, 10)
 	server.WatchNetwork(watcher)
 	defer close(watcher)
 
-	roaming <- ipc.NewAddAddrsSetting([]ipc.Address{n1, n2})
+	roaming <- rpc.NewAddAddrsSetting([]rpc.Address{n1, n2})
 
-	waitForChange := func() *ipc.NetworkChange {
+	waitForChange := func() *rpc.NetworkChange {
 		vlog.Infof("Waiting on %p", watcher)
 		select {
 		case c := <-watcher:
@@ -523,7 +523,7 @@
 		t.Fatalf("got %d, want %d", got, want)
 	}
 
-	roaming <- ipc.NewRmAddrsSetting([]ipc.Address{n1})
+	roaming <- rpc.NewRmAddrsSetting([]rpc.Address{n1})
 
 	// We expect 2 changes, one for each usable listen spec addr.
 	change = waitForChange()
@@ -544,7 +544,7 @@
 	}
 
 	// Remove all addresses to mimic losing all connectivity.
-	roaming <- ipc.NewRmAddrsSetting(getIPAddrs(nepsR))
+	roaming <- rpc.NewRmAddrsSetting(getIPAddrs(nepsR))
 
 	// We expect changes for all of the current endpoints
 	change = waitForChange()
@@ -557,7 +557,7 @@
 		t.Fatalf("got %d, want %d", got, want)
 	}
 
-	roaming <- ipc.NewAddAddrsSetting([]ipc.Address{n1})
+	roaming <- rpc.NewAddAddrsSetting([]rpc.Address{n1})
 	// We expect 2 changes, one for each usable listen spec addr.
 	change = waitForChange()
 	if got, want := len(change.Changed), 2; got != want {
@@ -587,8 +587,8 @@
 	}
 	defer func() { publisher.Shutdown(); <-stop }()
 
-	spec := ipc.ListenSpec{
-		Addrs: ipc.ListenAddrs{
+	spec := rpc.ListenSpec{
+		Addrs: rpc.ListenAddrs{
 			{"tcp", ":0"},
 		},
 		StreamName:      "TestWatcherDeadlock",
@@ -605,17 +605,17 @@
 	// Set a watcher that we never read from - the intent is to make sure
 	// that the listener still listens to changes even though there is no
 	// goroutine to read from the watcher channel.
-	watcher := make(chan ipc.NetworkChange, 0)
+	watcher := make(chan rpc.NetworkChange, 0)
 	server.WatchNetwork(watcher)
 	defer close(watcher)
 
 	// Remove all addresses to mimic losing all connectivity.
-	roaming <- ipc.NewRmAddrsSetting(getIPAddrs(eps))
+	roaming <- rpc.NewRmAddrsSetting(getIPAddrs(eps))
 
 	// Add in two new addresses
 	n1 := &netstate.AddrIfc{Addr: &net.IPAddr{IP: net.ParseIP("1.1.1.1")}}
 	n2 := &netstate.AddrIfc{Addr: &net.IPAddr{IP: net.ParseIP("2.2.2.2")}}
-	roaming <- ipc.NewAddAddrsSetting([]ipc.Address{n1, n2})
+	roaming <- rpc.NewAddAddrsSetting([]rpc.Address{n1, n2})
 
 	neps := make([]naming.Endpoint, 0, len(eps))
 	for _, p := range getUniqPorts(eps) {
diff --git a/profiles/internal/ipc/sort_endpoints.go b/profiles/internal/rpc/sort_endpoints.go
similarity index 98%
rename from profiles/internal/ipc/sort_endpoints.go
rename to profiles/internal/rpc/sort_endpoints.go
index b51eb7a..aa6d27d 100644
--- a/profiles/internal/ipc/sort_endpoints.go
+++ b/profiles/internal/rpc/sort_endpoints.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"fmt"
@@ -9,8 +9,8 @@
 	"v.io/x/lib/vlog"
 
 	"v.io/x/lib/netstate"
-	"v.io/x/ref/profiles/internal/ipc/version"
 	inaming "v.io/x/ref/profiles/internal/naming"
+	"v.io/x/ref/profiles/internal/rpc/version"
 )
 
 type errorAccumulator struct {
diff --git a/profiles/internal/ipc/sort_internal_test.go b/profiles/internal/rpc/sort_internal_test.go
similarity index 97%
rename from profiles/internal/ipc/sort_internal_test.go
rename to profiles/internal/rpc/sort_internal_test.go
index cdf3bd8..d0d1407 100644
--- a/profiles/internal/ipc/sort_internal_test.go
+++ b/profiles/internal/rpc/sort_internal_test.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"net"
@@ -6,8 +6,8 @@
 	"strings"
 	"testing"
 
-	"v.io/v23/ipc/version"
 	"v.io/v23/naming"
+	"v.io/v23/rpc/version"
 )
 
 func servers2names(servers []naming.MountedServer) []string {
@@ -24,13 +24,13 @@
 	}
 
 	for _, a := range []string{"127.0.0.1", "127.0.0.2"} {
-		addr := naming.FormatEndpoint("tcp", a, version.IPCVersionRange{100, 200})
+		addr := naming.FormatEndpoint("tcp", a, version.RPCVersionRange{100, 200})
 		name := naming.JoinAddressName(addr, "")
 		servers = append(servers, naming.MountedServer{Server: name})
 	}
 
 	_, err = filterAndOrderServers(servers, []string{"tcp"}, nil)
-	if err == nil || (!strings.HasPrefix(err.Error(), "failed to find any compatible servers:") && !strings.Contains(err.Error(), "No compatible IPC versions available")) {
+	if err == nil || (!strings.HasPrefix(err.Error(), "failed to find any compatible servers:") && !strings.Contains(err.Error(), "No compatible RPC versions available")) {
 		t.Errorf("expected a different error to: %v", err)
 	}
 
diff --git a/profiles/internal/ipc/stats.go b/profiles/internal/rpc/stats.go
similarity index 87%
rename from profiles/internal/ipc/stats.go
rename to profiles/internal/rpc/stats.go
index cbc6315..2ef418f 100644
--- a/profiles/internal/ipc/stats.go
+++ b/profiles/internal/rpc/stats.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"sync"
@@ -11,15 +11,15 @@
 	"v.io/v23/naming"
 )
 
-type ipcStats struct {
+type rpcStats struct {
 	mu                  sync.RWMutex
 	prefix              string
 	methods             map[string]*perMethodStats
 	blessingsCacheStats *blessingsCacheStats
 }
 
-func newIPCStats(prefix string) *ipcStats {
-	return &ipcStats{
+func newRPCStats(prefix string) *rpcStats {
+	return &rpcStats{
 		prefix:              prefix,
 		methods:             make(map[string]*perMethodStats),
 		blessingsCacheStats: newBlessingsCacheStats(prefix),
@@ -30,11 +30,11 @@
 	latency *histogram.Histogram
 }
 
-func (s *ipcStats) stop() {
+func (s *rpcStats) stop() {
 	stats.Delete(s.prefix)
 }
 
-func (s *ipcStats) record(method string, latency time.Duration) {
+func (s *rpcStats) record(method string, latency time.Duration) {
 	// Try first with a read lock. This will succeed in the most common
 	// case. If it fails, try again with a write lock and create the stats
 	// objects if they are still not there.
@@ -47,13 +47,13 @@
 	m.latency.Add(int64(latency / time.Millisecond))
 }
 
-func (s *ipcStats) recordBlessingCache(hit bool) {
+func (s *rpcStats) recordBlessingCache(hit bool) {
 	s.blessingsCacheStats.incr(hit)
 }
 
 // newPerMethodStats creates a new perMethodStats object if one doesn't exist
 // already. It returns the newly created object, or the already existing one.
-func (s *ipcStats) newPerMethodStats(method string) *perMethodStats {
+func (s *rpcStats) newPerMethodStats(method string) *perMethodStats {
 	s.mu.Lock()
 	defer s.mu.Unlock()
 	m, ok := s.methods[method]
diff --git a/profiles/internal/ipc/stream/benchmark/RESULTS.txt b/profiles/internal/rpc/stream/benchmark/RESULTS.txt
similarity index 100%
rename from profiles/internal/ipc/stream/benchmark/RESULTS.txt
rename to profiles/internal/rpc/stream/benchmark/RESULTS.txt
diff --git a/profiles/internal/ipc/stream/benchmark/benchmark_test.go b/profiles/internal/rpc/stream/benchmark/benchmark_test.go
similarity index 100%
rename from profiles/internal/ipc/stream/benchmark/benchmark_test.go
rename to profiles/internal/rpc/stream/benchmark/benchmark_test.go
diff --git a/profiles/internal/ipc/stream/benchmark/dial_test.go b/profiles/internal/rpc/stream/benchmark/dial_test.go
similarity index 100%
rename from profiles/internal/ipc/stream/benchmark/dial_test.go
rename to profiles/internal/rpc/stream/benchmark/dial_test.go
diff --git a/profiles/internal/ipc/stream/benchmark/dial_vc.go b/profiles/internal/rpc/stream/benchmark/dial_vc.go
similarity index 95%
rename from profiles/internal/ipc/stream/benchmark/dial_vc.go
rename to profiles/internal/rpc/stream/benchmark/dial_vc.go
index 604be19..c6a2568 100644
--- a/profiles/internal/ipc/stream/benchmark/dial_vc.go
+++ b/profiles/internal/rpc/stream/benchmark/dial_vc.go
@@ -4,7 +4,7 @@
 	"testing"
 	"time"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/manager"
+	"v.io/x/ref/profiles/internal/rpc/stream/manager"
 	_ "v.io/x/ref/profiles/static"
 	"v.io/x/ref/test/benchmark"
 	tsecurity "v.io/x/ref/test/security"
diff --git a/profiles/internal/ipc/stream/benchmark/dial_vif.go b/profiles/internal/rpc/stream/benchmark/dial_vif.go
similarity index 95%
rename from profiles/internal/ipc/stream/benchmark/dial_vif.go
rename to profiles/internal/rpc/stream/benchmark/dial_vif.go
index 40078af..861684e 100644
--- a/profiles/internal/ipc/stream/benchmark/dial_vif.go
+++ b/profiles/internal/rpc/stream/benchmark/dial_vif.go
@@ -5,7 +5,7 @@
 	"testing"
 	"time"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/vif"
+	"v.io/x/ref/profiles/internal/rpc/stream/vif"
 	"v.io/x/ref/test/benchmark"
 	tsecurity "v.io/x/ref/test/security"
 
diff --git a/profiles/internal/rpc/stream/benchmark/doc.go b/profiles/internal/rpc/stream/benchmark/doc.go
new file mode 100644
index 0000000..ac84de3
--- /dev/null
+++ b/profiles/internal/rpc/stream/benchmark/doc.go
@@ -0,0 +1,7 @@
+// Package benchmark implements some benchmarks for comparing the
+// veyron/profiles/internal/rpc/stream implementation with raw TCP connections and/or
+// pipes.
+//
+// Sample usage:
+//	go test veyron/profiles/internal/rpc/stream/benchmark -bench=.
+package benchmark
diff --git a/profiles/internal/ipc/stream/benchmark/throughput.go b/profiles/internal/rpc/stream/benchmark/throughput.go
similarity index 100%
rename from profiles/internal/ipc/stream/benchmark/throughput.go
rename to profiles/internal/rpc/stream/benchmark/throughput.go
diff --git a/profiles/internal/ipc/stream/benchmark/throughput_flow.go b/profiles/internal/rpc/stream/benchmark/throughput_flow.go
similarity index 96%
rename from profiles/internal/ipc/stream/benchmark/throughput_flow.go
rename to profiles/internal/rpc/stream/benchmark/throughput_flow.go
index 0f8be69..46e972f 100644
--- a/profiles/internal/ipc/stream/benchmark/throughput_flow.go
+++ b/profiles/internal/rpc/stream/benchmark/throughput_flow.go
@@ -4,11 +4,11 @@
 	"io"
 	"testing"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/manager"
+	"v.io/x/ref/profiles/internal/rpc/stream/manager"
 
 	"v.io/v23/naming"
 	"v.io/v23/options"
-	"v.io/x/ref/profiles/internal/ipc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream"
 	tsecurity "v.io/x/ref/test/security"
 )
 
diff --git a/profiles/internal/ipc/stream/benchmark/throughput_pipe.go b/profiles/internal/rpc/stream/benchmark/throughput_pipe.go
similarity index 100%
rename from profiles/internal/ipc/stream/benchmark/throughput_pipe.go
rename to profiles/internal/rpc/stream/benchmark/throughput_pipe.go
diff --git a/profiles/internal/ipc/stream/benchmark/throughput_tcp.go b/profiles/internal/rpc/stream/benchmark/throughput_tcp.go
similarity index 100%
rename from profiles/internal/ipc/stream/benchmark/throughput_tcp.go
rename to profiles/internal/rpc/stream/benchmark/throughput_tcp.go
diff --git a/profiles/internal/ipc/stream/benchmark/throughput_test.go b/profiles/internal/rpc/stream/benchmark/throughput_test.go
similarity index 100%
rename from profiles/internal/ipc/stream/benchmark/throughput_test.go
rename to profiles/internal/rpc/stream/benchmark/throughput_test.go
diff --git a/profiles/internal/ipc/stream/benchmark/throughput_tls.go b/profiles/internal/rpc/stream/benchmark/throughput_tls.go
similarity index 96%
rename from profiles/internal/ipc/stream/benchmark/throughput_tls.go
rename to profiles/internal/rpc/stream/benchmark/throughput_tls.go
index 9750db5..15317fd 100644
--- a/profiles/internal/ipc/stream/benchmark/throughput_tls.go
+++ b/profiles/internal/rpc/stream/benchmark/throughput_tls.go
@@ -6,7 +6,7 @@
 	"net"
 	"testing"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/crypto"
+	"v.io/x/ref/profiles/internal/rpc/stream/crypto"
 )
 
 func benchmarkTLS(b *testing.B, nConns int) {
diff --git a/profiles/internal/ipc/stream/benchmark/throughput_ws.go b/profiles/internal/rpc/stream/benchmark/throughput_ws.go
similarity index 100%
rename from profiles/internal/ipc/stream/benchmark/throughput_ws.go
rename to profiles/internal/rpc/stream/benchmark/throughput_ws.go
diff --git a/profiles/internal/ipc/stream/benchmark/throughput_wsh.go b/profiles/internal/rpc/stream/benchmark/throughput_wsh.go
similarity index 100%
rename from profiles/internal/ipc/stream/benchmark/throughput_wsh.go
rename to profiles/internal/rpc/stream/benchmark/throughput_wsh.go
diff --git a/profiles/internal/ipc/stream/crypto/box.go b/profiles/internal/rpc/stream/crypto/box.go
similarity index 100%
rename from profiles/internal/ipc/stream/crypto/box.go
rename to profiles/internal/rpc/stream/crypto/box.go
diff --git a/profiles/internal/ipc/stream/crypto/box_cipher.go b/profiles/internal/rpc/stream/crypto/box_cipher.go
similarity index 96%
rename from profiles/internal/ipc/stream/crypto/box_cipher.go
rename to profiles/internal/rpc/stream/crypto/box_cipher.go
index 6174213..f4a12f2 100644
--- a/profiles/internal/ipc/stream/crypto/box_cipher.go
+++ b/profiles/internal/rpc/stream/crypto/box_cipher.go
@@ -62,8 +62,8 @@
 	copy(counter[:], nonce[16:])
 }
 
-// NewControlCipher returns a ControlCipher for IPC V6.
-func NewControlCipherIPC6(peersPublicKey, privateKey *[32]byte, isServer bool) ControlCipher {
+// NewControlCipher returns a ControlCipher for RPC V6.
+func NewControlCipherRPC6(peersPublicKey, privateKey *[32]byte, isServer bool) ControlCipher {
 	var c cbox
 	box.Precompute(&c.sharedKey, peersPublicKey, privateKey)
 	// The stream is full-duplex, and we want the directions to use different
diff --git a/profiles/internal/ipc/stream/crypto/box_cipher_test.go b/profiles/internal/rpc/stream/crypto/box_cipher_test.go
similarity index 91%
rename from profiles/internal/ipc/stream/crypto/box_cipher_test.go
rename to profiles/internal/rpc/stream/crypto/box_cipher_test.go
index 64bb592..fec9746 100644
--- a/profiles/internal/ipc/stream/crypto/box_cipher_test.go
+++ b/profiles/internal/rpc/stream/crypto/box_cipher_test.go
@@ -7,7 +7,7 @@
 
 	"golang.org/x/crypto/nacl/box"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/crypto"
+	"v.io/x/ref/profiles/internal/rpc/stream/crypto"
 )
 
 // Add space for a MAC.
@@ -26,8 +26,8 @@
 	if err != nil {
 		t.Fatalf("can't generate key")
 	}
-	c1 := crypto.NewControlCipherIPC6(pub2, pvt1, true)
-	c2 := crypto.NewControlCipherIPC6(pub1, pvt2, false)
+	c1 := crypto.NewControlCipherRPC6(pub2, pvt1, true)
+	c2 := crypto.NewControlCipherRPC6(pub1, pvt2, false)
 
 	msg1 := newMessage("hello")
 	if err := c1.Seal(msg1); err != nil {
@@ -98,8 +98,8 @@
 	if err != nil {
 		t.Fatalf("can't generate key")
 	}
-	c1 := crypto.NewControlCipherIPC6(pub2, pvt1, true)
-	c2 := crypto.NewControlCipherIPC6(pub1, pvt2, false)
+	c1 := crypto.NewControlCipherRPC6(pub2, pvt1, true)
+	c2 := crypto.NewControlCipherRPC6(pub1, pvt2, false)
 
 	msg1 := []byte("hello")
 	msg2 := []byte("world")
diff --git a/profiles/internal/ipc/stream/crypto/control_cipher.go b/profiles/internal/rpc/stream/crypto/control_cipher.go
similarity index 100%
rename from profiles/internal/ipc/stream/crypto/control_cipher.go
rename to profiles/internal/rpc/stream/crypto/control_cipher.go
diff --git a/profiles/internal/ipc/stream/crypto/crypto.go b/profiles/internal/rpc/stream/crypto/crypto.go
similarity index 100%
rename from profiles/internal/ipc/stream/crypto/crypto.go
rename to profiles/internal/rpc/stream/crypto/crypto.go
diff --git a/profiles/internal/ipc/stream/crypto/crypto_test.go b/profiles/internal/rpc/stream/crypto/crypto_test.go
similarity index 100%
rename from profiles/internal/ipc/stream/crypto/crypto_test.go
rename to profiles/internal/rpc/stream/crypto/crypto_test.go
diff --git a/profiles/internal/ipc/stream/crypto/null.go b/profiles/internal/rpc/stream/crypto/null.go
similarity index 100%
rename from profiles/internal/ipc/stream/crypto/null.go
rename to profiles/internal/rpc/stream/crypto/null.go
diff --git a/profiles/internal/ipc/stream/crypto/null_cipher.go b/profiles/internal/rpc/stream/crypto/null_cipher.go
similarity index 100%
rename from profiles/internal/ipc/stream/crypto/null_cipher.go
rename to profiles/internal/rpc/stream/crypto/null_cipher.go
diff --git a/profiles/internal/ipc/stream/crypto/tls.go b/profiles/internal/rpc/stream/crypto/tls.go
similarity index 98%
rename from profiles/internal/ipc/stream/crypto/tls.go
rename to profiles/internal/rpc/stream/crypto/tls.go
index 03a3925..02c3365 100644
--- a/profiles/internal/ipc/stream/crypto/tls.go
+++ b/profiles/internal/rpc/stream/crypto/tls.go
@@ -18,10 +18,10 @@
 var errDeadlinesNotSupported = errors.New("deadlines not supported")
 
 // TLSClientSessionCacheOpt specifies the ClientSessionCache used to resume TLS sessions.
-// It adapts tls.ClientSessionCache to the veyron/profiles/internal/ipc/stream.VCOpt interface.
+// It adapts tls.ClientSessionCache to the veyron/profiles/internal/rpc/stream.VCOpt interface.
 type TLSClientSessionCache struct{ tls.ClientSessionCache }
 
-func (TLSClientSessionCache) IPCStreamVCOpt() {}
+func (TLSClientSessionCache) RPCStreamVCOpt() {}
 
 // NewTLSClientSessionCache creates a new session cache.
 // TODO(ashankar): Remove this once go1.4 is released and tlsfork can be release, at that
diff --git a/profiles/internal/ipc/stream/doc.go b/profiles/internal/rpc/stream/doc.go
similarity index 100%
rename from profiles/internal/ipc/stream/doc.go
rename to profiles/internal/rpc/stream/doc.go
diff --git a/profiles/internal/ipc/stream/id/id.go b/profiles/internal/rpc/stream/id/id.go
similarity index 100%
rename from profiles/internal/ipc/stream/id/id.go
rename to profiles/internal/rpc/stream/id/id.go
diff --git a/profiles/internal/ipc/stream/manager/listener.go b/profiles/internal/rpc/stream/manager/listener.go
similarity index 97%
rename from profiles/internal/ipc/stream/manager/listener.go
rename to profiles/internal/rpc/stream/manager/listener.go
index fc4a916..2958e82 100644
--- a/profiles/internal/ipc/stream/manager/listener.go
+++ b/profiles/internal/rpc/stream/manager/listener.go
@@ -7,17 +7,17 @@
 	"strings"
 	"sync"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/proxy"
-	"v.io/x/ref/profiles/internal/ipc/stream/vif"
 	"v.io/x/ref/profiles/internal/lib/upcqueue"
 	inaming "v.io/x/ref/profiles/internal/naming"
+	"v.io/x/ref/profiles/internal/rpc/stream/proxy"
+	"v.io/x/ref/profiles/internal/rpc/stream/vif"
 
 	"v.io/v23/naming"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/v23/vom"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/profiles/internal/ipc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream"
 )
 
 var errListenerIsClosed = errors.New("Listener has been Closed")
diff --git a/profiles/internal/ipc/stream/manager/manager.go b/profiles/internal/rpc/stream/manager/manager.go
similarity index 94%
rename from profiles/internal/ipc/stream/manager/manager.go
rename to profiles/internal/rpc/stream/manager/manager.go
index 192c9b8..e6824f6 100644
--- a/profiles/internal/ipc/stream/manager/manager.go
+++ b/profiles/internal/rpc/stream/manager/manager.go
@@ -1,4 +1,4 @@
-// Package manager provides an implementation of the Manager interface defined in veyron/profiles/internal/ipc/stream.
+// Package manager provides an implementation of the Manager interface defined in veyron/profiles/internal/rpc/stream.
 package manager
 
 import (
@@ -9,19 +9,19 @@
 	"sync"
 	"time"
 
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
 
 	"v.io/x/ref/lib/stats"
-	"v.io/x/ref/profiles/internal/ipc/stream"
-	"v.io/x/ref/profiles/internal/ipc/stream/crypto"
-	"v.io/x/ref/profiles/internal/ipc/stream/vif"
-	"v.io/x/ref/profiles/internal/ipc/version"
 	inaming "v.io/x/ref/profiles/internal/naming"
+	"v.io/x/ref/profiles/internal/rpc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream/crypto"
+	"v.io/x/ref/profiles/internal/rpc/stream/vif"
+	"v.io/x/ref/profiles/internal/rpc/version"
 )
 
 var (
@@ -42,7 +42,7 @@
 		vifs:         vif.NewSet(),
 		sessionCache: crypto.NewTLSClientSessionCache(),
 		listeners:    make(map[listener]bool),
-		statsName:    naming.Join("ipc", "stream", "routing-id", rid.String(), "debug"),
+		statsName:    naming.Join("rpc", "stream", "routing-id", rid.String(), "debug"),
 	}
 	stats.NewStringFunc(m.statsName, m.DebugString)
 	return m
@@ -64,11 +64,11 @@
 
 type DialTimeout struct{ time.Duration }
 
-func (DialTimeout) IPCStreamVCOpt() {}
-func (DialTimeout) IPCClientOpt()   {}
+func (DialTimeout) RPCStreamVCOpt() {}
+func (DialTimeout) RPCClientOpt()   {}
 
 func dial(network, address string, timeout time.Duration) (net.Conn, error) {
-	if d, _, _ := ipc.RegisteredProtocol(network); d != nil {
+	if d, _, _ := rpc.RegisteredProtocol(network); d != nil {
 		return d(network, address, timeout)
 	}
 	return nil, fmt.Errorf("unknown network %s", network)
@@ -111,7 +111,7 @@
 	}
 	vRange := version.SupportedRange
 	if ep, ok := remote.(*inaming.Endpoint); ok {
-		epRange := &version.Range{Min: ep.MinIPCVersion, Max: ep.MaxIPCVersion}
+		epRange := &version.Range{Min: ep.MinRPCVersion, Max: ep.MaxRPCVersion}
 		if r, err := vRange.Intersect(epRange); err == nil {
 			vRange = r
 		}
@@ -153,7 +153,7 @@
 }
 
 func listen(protocol, address string) (net.Listener, error) {
-	if _, l, _ := ipc.RegisteredProtocol(protocol); l != nil {
+	if _, l, _ := rpc.RegisteredProtocol(protocol); l != nil {
 		return l(protocol, address)
 	}
 	return nil, fmt.Errorf("unknown network %s", protocol)
diff --git a/profiles/internal/ipc/stream/manager/manager_test.go b/profiles/internal/rpc/stream/manager/manager_test.go
similarity index 98%
rename from profiles/internal/ipc/stream/manager/manager_test.go
rename to profiles/internal/rpc/stream/manager/manager_test.go
index 7e3a288..514cae1 100644
--- a/profiles/internal/ipc/stream/manager/manager_test.go
+++ b/profiles/internal/rpc/stream/manager/manager_test.go
@@ -15,17 +15,17 @@
 
 	"v.io/x/lib/vlog"
 
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/tcp"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/ws"
-	"v.io/x/ref/profiles/internal/ipc/stream"
-	"v.io/x/ref/profiles/internal/ipc/stream/vc"
-	"v.io/x/ref/profiles/internal/ipc/version"
 	inaming "v.io/x/ref/profiles/internal/naming"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/tcp"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/ws"
+	"v.io/x/ref/profiles/internal/rpc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream/vc"
+	"v.io/x/ref/profiles/internal/rpc/version"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/expect"
 	"v.io/x/ref/test/modules"
@@ -621,7 +621,7 @@
 	listener := func(_, _ string) (net.Listener, error) {
 		return nil, fmt.Errorf("tn.Listen")
 	}
-	ipc.RegisterProtocol("tn", dialer, listener)
+	rpc.RegisterProtocol("tn", dialer, listener)
 
 	_, _, err := server.Listen("tnx", "127.0.0.1:0", pserver)
 	if err == nil || !strings.Contains(err.Error(), "unknown network tnx") {
@@ -638,7 +638,7 @@
 		return net.Listen("tcp", addr)
 	}
 
-	if got, want := ipc.RegisterProtocol("tn", dialer, listener), true; got != want {
+	if got, want := rpc.RegisterProtocol("tn", dialer, listener), true; got != want {
 		t.Errorf("got %t, want %t", got, want)
 	}
 
diff --git a/profiles/internal/ipc/stream/message/coding.go b/profiles/internal/rpc/stream/message/coding.go
similarity index 98%
rename from profiles/internal/ipc/stream/message/coding.go
rename to profiles/internal/rpc/stream/message/coding.go
index 4e96e46..4be7ccf 100644
--- a/profiles/internal/ipc/stream/message/coding.go
+++ b/profiles/internal/rpc/stream/message/coding.go
@@ -6,7 +6,7 @@
 	"fmt"
 	"io"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/id"
+	"v.io/x/ref/profiles/internal/rpc/stream/id"
 )
 
 var errLargerThan3ByteUint = errors.New("integer too large to represent in 3 bytes")
diff --git a/profiles/internal/ipc/stream/message/control.go b/profiles/internal/rpc/stream/message/control.go
similarity index 98%
rename from profiles/internal/ipc/stream/message/control.go
rename to profiles/internal/rpc/stream/message/control.go
index b63f56e..f08e1dc 100644
--- a/profiles/internal/ipc/stream/message/control.go
+++ b/profiles/internal/rpc/stream/message/control.go
@@ -6,9 +6,9 @@
 	"io"
 
 	"v.io/v23/naming"
-	"v.io/x/ref/profiles/internal/ipc/stream/id"
-	"v.io/x/ref/profiles/internal/ipc/version"
 	inaming "v.io/x/ref/profiles/internal/naming"
+	"v.io/x/ref/profiles/internal/rpc/stream/id"
+	"v.io/x/ref/profiles/internal/rpc/version"
 )
 
 // Control is the interface implemented by all control messages.
diff --git a/profiles/internal/ipc/stream/message/counters.go b/profiles/internal/rpc/stream/message/counters.go
similarity index 97%
rename from profiles/internal/ipc/stream/message/counters.go
rename to profiles/internal/rpc/stream/message/counters.go
index 352710a..710e9e0 100644
--- a/profiles/internal/ipc/stream/message/counters.go
+++ b/profiles/internal/rpc/stream/message/counters.go
@@ -3,7 +3,7 @@
 import (
 	"fmt"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/id"
+	"v.io/x/ref/profiles/internal/rpc/stream/id"
 )
 
 // CounterID encapsulates the VCI and Flow used for flow control counter
diff --git a/profiles/internal/ipc/stream/message/counters_test.go b/profiles/internal/rpc/stream/message/counters_test.go
similarity index 95%
rename from profiles/internal/ipc/stream/message/counters_test.go
rename to profiles/internal/rpc/stream/message/counters_test.go
index 8fb90c2..246cc3d 100644
--- a/profiles/internal/ipc/stream/message/counters_test.go
+++ b/profiles/internal/rpc/stream/message/counters_test.go
@@ -4,7 +4,7 @@
 	"testing"
 	"testing/quick"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/id"
+	"v.io/x/ref/profiles/internal/rpc/stream/id"
 )
 
 func TestCounterID(t *testing.T) {
diff --git a/profiles/internal/ipc/stream/message/data.go b/profiles/internal/rpc/stream/message/data.go
similarity index 94%
rename from profiles/internal/ipc/stream/message/data.go
rename to profiles/internal/rpc/stream/message/data.go
index 4de9e5b..ffed059 100644
--- a/profiles/internal/ipc/stream/message/data.go
+++ b/profiles/internal/rpc/stream/message/data.go
@@ -3,8 +3,8 @@
 import (
 	"fmt"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/id"
 	"v.io/x/ref/profiles/internal/lib/iobuf"
+	"v.io/x/ref/profiles/internal/rpc/stream/id"
 )
 
 // Data encapsulates an application data message.
diff --git a/profiles/internal/ipc/stream/message/message.go b/profiles/internal/rpc/stream/message/message.go
similarity index 97%
rename from profiles/internal/ipc/stream/message/message.go
rename to profiles/internal/rpc/stream/message/message.go
index c8b2551..9c21129 100644
--- a/profiles/internal/ipc/stream/message/message.go
+++ b/profiles/internal/rpc/stream/message/message.go
@@ -1,6 +1,6 @@
 // Package message provides data structures and serialization/deserialization
 // methods for messages exchanged by the implementation of the
-// veyron/profiles/internal/ipc/stream interfaces in veyron/profiles/internal/ipc/stream.
+// veyron/profiles/internal/rpc/stream interfaces in veyron/profiles/internal/rpc/stream.
 package message
 
 // This file contains methods to read and write messages sent over the VIF.
@@ -65,9 +65,9 @@
 	"io"
 
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/profiles/internal/ipc/stream/crypto"
-	"v.io/x/ref/profiles/internal/ipc/stream/id"
 	"v.io/x/ref/profiles/internal/lib/iobuf"
+	"v.io/x/ref/profiles/internal/rpc/stream/crypto"
+	"v.io/x/ref/profiles/internal/rpc/stream/id"
 )
 
 const (
diff --git a/profiles/internal/ipc/stream/message/message_test.go b/profiles/internal/rpc/stream/message/message_test.go
similarity index 98%
rename from profiles/internal/ipc/stream/message/message_test.go
rename to profiles/internal/rpc/stream/message/message_test.go
index 492ad97..ae0e911 100644
--- a/profiles/internal/ipc/stream/message/message_test.go
+++ b/profiles/internal/rpc/stream/message/message_test.go
@@ -7,8 +7,8 @@
 	"testing"
 
 	"v.io/v23/naming"
-	"v.io/x/ref/profiles/internal/ipc/version"
 	"v.io/x/ref/profiles/internal/lib/iobuf"
+	"v.io/x/ref/profiles/internal/rpc/version"
 )
 
 // testControlCipher is a super-simple cipher that xor's each byte of the
diff --git a/profiles/internal/ipc/stream/model.go b/profiles/internal/rpc/stream/model.go
similarity index 98%
rename from profiles/internal/ipc/stream/model.go
rename to profiles/internal/rpc/stream/model.go
index aa6095c..0adda72 100644
--- a/profiles/internal/ipc/stream/model.go
+++ b/profiles/internal/rpc/stream/model.go
@@ -62,7 +62,7 @@
 
 // FlowOpt is the interface for all Flow options.
 type FlowOpt interface {
-	IPCStreamFlowOpt()
+	RPCStreamFlowOpt()
 }
 
 // Listener is the interface for accepting Flows created by a remote process.
@@ -80,7 +80,7 @@
 // ListenerOpt is the interface for all options that control the creation of a
 // Listener.
 type ListenerOpt interface {
-	IPCStreamListenerOpt()
+	RPCStreamListenerOpt()
 }
 
 // Connector is the interface for initiating Flows to a remote process over a
@@ -102,7 +102,7 @@
 
 // VCOpt is the interface for all VC options.
 type VCOpt interface {
-	IPCStreamVCOpt()
+	RPCStreamVCOpt()
 }
 
 // Manager is the interface for managing the creation of VCs.
diff --git a/profiles/internal/ipc/stream/proxy/debug.go b/profiles/internal/rpc/stream/proxy/debug.go
similarity index 100%
rename from profiles/internal/ipc/stream/proxy/debug.go
rename to profiles/internal/rpc/stream/proxy/debug.go
diff --git a/profiles/internal/ipc/stream/proxy/doc.go b/profiles/internal/rpc/stream/proxy/doc.go
similarity index 97%
rename from profiles/internal/ipc/stream/proxy/doc.go
rename to profiles/internal/rpc/stream/proxy/doc.go
index aae07f0..b34c833 100644
--- a/profiles/internal/ipc/stream/proxy/doc.go
+++ b/profiles/internal/rpc/stream/proxy/doc.go
@@ -2,7 +2,7 @@
 //
 // Each process in vanadium is uniquely identified by a routing id
 // (naming.RoutingID). A proxy routes messages
-// (veyron/profiles/internal/ipc/stream/message) it receives on a network connection
+// (veyron/profiles/internal/rpc/stream/message) it receives on a network connection
 // (net.Conn) to the network connection on which the destination process
 // (identified by the routing id) is listening.
 //
diff --git a/profiles/internal/ipc/stream/proxy/helper_test.go b/profiles/internal/rpc/stream/proxy/helper_test.go
similarity index 100%
rename from profiles/internal/ipc/stream/proxy/helper_test.go
rename to profiles/internal/rpc/stream/proxy/helper_test.go
diff --git a/profiles/internal/ipc/stream/proxy/protocol.vdl b/profiles/internal/rpc/stream/proxy/protocol.vdl
similarity index 100%
rename from profiles/internal/ipc/stream/proxy/protocol.vdl
rename to profiles/internal/rpc/stream/proxy/protocol.vdl
diff --git a/profiles/internal/ipc/stream/proxy/protocol.vdl.go b/profiles/internal/rpc/stream/proxy/protocol.vdl.go
similarity index 87%
rename from profiles/internal/ipc/stream/proxy/protocol.vdl.go
rename to profiles/internal/rpc/stream/proxy/protocol.vdl.go
index d97fc4f..ddfee90 100644
--- a/profiles/internal/ipc/stream/proxy/protocol.vdl.go
+++ b/profiles/internal/rpc/stream/proxy/protocol.vdl.go
@@ -15,7 +15,7 @@
 }
 
 func (Request) __VDLReflect(struct {
-	Name string "v.io/x/ref/profiles/internal/ipc/stream/proxy.Request"
+	Name string "v.io/x/ref/profiles/internal/rpc/stream/proxy.Request"
 }) {
 }
 
@@ -30,7 +30,7 @@
 }
 
 func (Response) __VDLReflect(struct {
-	Name string "v.io/x/ref/profiles/internal/ipc/stream/proxy.Response"
+	Name string "v.io/x/ref/profiles/internal/rpc/stream/proxy.Response"
 }) {
 }
 
diff --git a/profiles/internal/ipc/stream/proxy/proxy.go b/profiles/internal/rpc/stream/proxy/proxy.go
similarity index 97%
rename from profiles/internal/ipc/stream/proxy/proxy.go
rename to profiles/internal/rpc/stream/proxy/proxy.go
index 8189083..19d7733 100644
--- a/profiles/internal/ipc/stream/proxy/proxy.go
+++ b/profiles/internal/rpc/stream/proxy/proxy.go
@@ -9,24 +9,24 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/v23/vom"
 	"v.io/x/lib/vlog"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/crypto"
-	"v.io/x/ref/profiles/internal/ipc/stream/id"
-	"v.io/x/ref/profiles/internal/ipc/stream/message"
-	"v.io/x/ref/profiles/internal/ipc/stream/vc"
-	"v.io/x/ref/profiles/internal/ipc/stream/vif"
-	"v.io/x/ref/profiles/internal/ipc/version"
 	"v.io/x/ref/profiles/internal/lib/bqueue"
 	"v.io/x/ref/profiles/internal/lib/bqueue/drrqueue"
 	"v.io/x/ref/profiles/internal/lib/iobuf"
 	"v.io/x/ref/profiles/internal/lib/publisher"
 	"v.io/x/ref/profiles/internal/lib/upcqueue"
+	"v.io/x/ref/profiles/internal/rpc/stream/crypto"
+	"v.io/x/ref/profiles/internal/rpc/stream/id"
+	"v.io/x/ref/profiles/internal/rpc/stream/message"
+	"v.io/x/ref/profiles/internal/rpc/stream/vc"
+	"v.io/x/ref/profiles/internal/rpc/stream/vif"
+	"v.io/x/ref/profiles/internal/rpc/version"
 
 	"v.io/x/ref/lib/stats"
 )
@@ -153,7 +153,7 @@
 // (network, address) pair and routes VC traffic between accepted connections.
 // TODO(mattr): This should take a ListenSpec instead of network, address, and
 // pubAddress.  However using a ListenSpec requires a great deal of supporting
-// code that should be refactored out of v.io/x/ref/profiles/internal/ipc/server.go.
+// code that should be refactored out of v.io/x/ref/profiles/internal/rpc/server.go.
 func New(ctx *context.T, network, address, pubAddress string, names ...string) (shutdown func(), endpoint naming.Endpoint, err error) {
 	rid, err := naming.NewRoutingID()
 	if err != nil {
@@ -169,7 +169,7 @@
 	var pub publisher.Publisher
 	for _, name := range names {
 		if name == "" {
-			// Consistent with v23.ipc.Server.Serve(...)
+			// Consistent with v23.rpc.Server.Serve(...)
 			// an empty name implies, "do not publish"
 			continue
 		}
@@ -191,7 +191,7 @@
 }
 
 func internalNew(rid naming.RoutingID, principal security.Principal, network, address, pubAddress string) (shutdown func(), endpoint naming.Endpoint, err error) {
-	_, listenFn, _ := ipc.RegisteredProtocol(network)
+	_, listenFn, _ := rpc.RegisteredProtocol(network)
 	if listenFn == nil {
 		return nil, nil, fmt.Errorf("unknown network %s", network)
 	}
@@ -209,7 +209,7 @@
 		processes:  make(map[*process]struct{}),
 		pubAddress: pubAddress,
 		principal:  principal,
-		statsName:  naming.Join("ipc", "proxy", "routing-id", rid.String(), "debug"),
+		statsName:  naming.Join("rpc", "proxy", "routing-id", rid.String(), "debug"),
 	}
 	stats.NewStringFunc(proxy.statsName, proxy.debugString)
 
@@ -693,7 +693,7 @@
 	}
 	version, err := version.CommonVersion(m.DstEndpoint, m.SrcEndpoint)
 	if err != nil {
-		p.SendCloseVC(m.VCI, fmt.Errorf("incompatible IPC protocol versions: %v", err))
+		p.SendCloseVC(m.VCI, fmt.Errorf("incompatible RPC protocol versions: %v", err))
 		return nil
 	}
 	vc := vc.InternalNew(vc.Params{
diff --git a/profiles/internal/ipc/stream/proxy/proxy_test.go b/profiles/internal/rpc/stream/proxy/proxy_test.go
similarity index 98%
rename from profiles/internal/ipc/stream/proxy/proxy_test.go
rename to profiles/internal/rpc/stream/proxy/proxy_test.go
index ed9a607..623b07a 100644
--- a/profiles/internal/ipc/stream/proxy/proxy_test.go
+++ b/profiles/internal/rpc/stream/proxy/proxy_test.go
@@ -9,11 +9,11 @@
 	"testing"
 
 	"v.io/v23/naming"
-	"v.io/x/ref/profiles/internal/ipc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream"
 
 	_ "v.io/x/ref/profiles"
-	"v.io/x/ref/profiles/internal/ipc/stream/manager"
-	"v.io/x/ref/profiles/internal/ipc/stream/proxy"
+	"v.io/x/ref/profiles/internal/rpc/stream/manager"
+	"v.io/x/ref/profiles/internal/rpc/stream/proxy"
 	tsecurity "v.io/x/ref/test/security"
 )
 
diff --git a/profiles/internal/ipc/stream/proxy/v23_internal_test.go b/profiles/internal/rpc/stream/proxy/v23_internal_test.go
similarity index 100%
rename from profiles/internal/ipc/stream/proxy/v23_internal_test.go
rename to profiles/internal/rpc/stream/proxy/v23_internal_test.go
diff --git a/profiles/internal/ipc/stream/vc/auth.go b/profiles/internal/rpc/stream/vc/auth.go
similarity index 93%
rename from profiles/internal/ipc/stream/vc/auth.go
rename to profiles/internal/rpc/stream/vc/auth.go
index c467555..9a1aca5 100644
--- a/profiles/internal/ipc/stream/vc/auth.go
+++ b/profiles/internal/rpc/stream/vc/auth.go
@@ -6,10 +6,10 @@
 	"fmt"
 	"io"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/crypto"
 	"v.io/x/ref/profiles/internal/lib/iobuf"
+	"v.io/x/ref/profiles/internal/rpc/stream/crypto"
 
-	"v.io/v23/ipc/version"
+	"v.io/v23/rpc/version"
 	"v.io/v23/security"
 	"v.io/v23/vom"
 )
@@ -31,7 +31,7 @@
 // AuthenticateAsServer executes the authentication protocol at the server.
 // It returns the blessings shared by the client, and the discharges shared
 // by the server.
-func AuthenticateAsServer(conn io.ReadWriteCloser, principal security.Principal, server security.Blessings, dc DischargeClient, crypter crypto.Crypter, v version.IPCVersion) (security.Blessings, map[string]security.Discharge, error) {
+func AuthenticateAsServer(conn io.ReadWriteCloser, principal security.Principal, server security.Blessings, dc DischargeClient, crypter crypto.Crypter, v version.RPCVersion) (security.Blessings, map[string]security.Discharge, error) {
 	if server.IsZero() {
 		return security.Blessings{}, nil, errors.New("no blessings to present as a server")
 	}
@@ -57,7 +57,7 @@
 //
 // The client will only share its blessings if the server (who shares its
 // blessings first) is authorized as per the authorizer for this RPC.
-func AuthenticateAsClient(conn io.ReadWriteCloser, crypter crypto.Crypter, params security.CallParams, auth *ServerAuthorizer, v version.IPCVersion) (security.Blessings, security.Blessings, map[string]security.Discharge, error) {
+func AuthenticateAsClient(conn io.ReadWriteCloser, crypter crypto.Crypter, params security.CallParams, auth *ServerAuthorizer, v version.RPCVersion) (security.Blessings, security.Blessings, map[string]security.Discharge, error) {
 	server, serverDischarges, err := readBlessings(conn, authServerContextTag, crypter, v)
 	if err != nil {
 		return security.Blessings{}, security.Blessings{}, nil, err
@@ -85,7 +85,7 @@
 	return server, client, serverDischarges, nil
 }
 
-func writeBlessings(w io.Writer, tag []byte, crypter crypto.Crypter, p security.Principal, b security.Blessings, discharges []security.Discharge, v version.IPCVersion) error {
+func writeBlessings(w io.Writer, tag []byte, crypter crypto.Crypter, p security.Principal, b security.Blessings, discharges []security.Discharge, v version.RPCVersion) error {
 	signature, err := p.Sign(append(tag, crypter.ChannelBinding()...))
 	if err != nil {
 		return err
@@ -101,7 +101,7 @@
 	if err := enc.Encode(b); err != nil {
 		return err
 	}
-	if v >= version.IPCVersion5 {
+	if v >= version.RPCVersion5 {
 		if err := enc.Encode(discharges); err != nil {
 			return err
 		}
@@ -118,7 +118,7 @@
 	return enc.Encode(msg.Contents)
 }
 
-func readBlessings(r io.Reader, tag []byte, crypter crypto.Crypter, v version.IPCVersion) (security.Blessings, map[string]security.Discharge, error) {
+func readBlessings(r io.Reader, tag []byte, crypter crypto.Crypter, v version.RPCVersion) (security.Blessings, map[string]security.Discharge, error) {
 	var msg []byte
 	var noBlessings security.Blessings
 	dec, err := vom.NewDecoder(r)
@@ -149,7 +149,7 @@
 		return noBlessings, nil, err
 	}
 	var discharges []security.Discharge
-	if v >= version.IPCVersion5 {
+	if v >= version.RPCVersion5 {
 		if err := dec.Decode(&discharges); err != nil {
 			return noBlessings, nil, err
 		}
diff --git a/profiles/internal/ipc/stream/vc/data_cache.go b/profiles/internal/rpc/stream/vc/data_cache.go
similarity index 100%
rename from profiles/internal/ipc/stream/vc/data_cache.go
rename to profiles/internal/rpc/stream/vc/data_cache.go
diff --git a/profiles/internal/ipc/stream/vc/doc.go b/profiles/internal/rpc/stream/vc/doc.go
similarity index 62%
rename from profiles/internal/ipc/stream/vc/doc.go
rename to profiles/internal/rpc/stream/vc/doc.go
index a306a66..c3c5bb0 100644
--- a/profiles/internal/ipc/stream/vc/doc.go
+++ b/profiles/internal/rpc/stream/vc/doc.go
@@ -1,2 +1,2 @@
-// Package vc provides implementations of the VC and Flow interfaces in veyron/profiles/internal/ipc/stream.
+// Package vc provides implementations of the VC and Flow interfaces in veyron/profiles/internal/rpc/stream.
 package vc
diff --git a/profiles/internal/ipc/stream/vc/flow.go b/profiles/internal/rpc/stream/vc/flow.go
similarity index 97%
rename from profiles/internal/ipc/stream/vc/flow.go
rename to profiles/internal/rpc/stream/vc/flow.go
index da1d64a..71dd80c 100644
--- a/profiles/internal/ipc/stream/vc/flow.go
+++ b/profiles/internal/rpc/stream/vc/flow.go
@@ -3,7 +3,7 @@
 import (
 	"v.io/v23/naming"
 	"v.io/v23/security"
-	"v.io/x/ref/profiles/internal/ipc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream"
 )
 
 type flow struct {
diff --git a/profiles/internal/rpc/stream/vc/init.go b/profiles/internal/rpc/stream/vc/init.go
new file mode 100644
index 0000000..4fc3889
--- /dev/null
+++ b/profiles/internal/rpc/stream/vc/init.go
@@ -0,0 +1,63 @@
+package vc
+
+import (
+	"crypto/ecdsa"
+	"crypto/elliptic"
+	"crypto/rand"
+	"fmt"
+
+	"v.io/v23/security"
+	"v.io/x/lib/vlog"
+)
+
+var AnonymousPrincipal security.Principal
+
+func init() {
+	key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
+	if err != nil {
+		vlog.Fatalf("could not create private key for anonymous principal: %v", err)
+	}
+	store := &anonymousBlessingStore{k: security.NewECDSAPublicKey(&key.PublicKey)}
+	if AnonymousPrincipal, err = security.CreatePrincipal(security.NewInMemoryECDSASigner(key), store, nil); err != nil {
+		vlog.Fatalf("could not create anonymous principal: %v", err)
+	}
+	if store.b, err = AnonymousPrincipal.BlessSelf("anonymous"); err != nil {
+		vlog.Fatalf("failed to generate the one blessing to be used by the anonymous principal: %v", err)
+	}
+}
+
+// TODO(ashankar,ataly): Figure out what to do with this!
+// (Most likely move the BlessingStore implementation from veyron/profiles/internal/rt to veyron/security
+// and use that?)
+type anonymousBlessingStore struct {
+	k security.PublicKey
+	b security.Blessings
+}
+
+func (s *anonymousBlessingStore) Set(security.Blessings, security.BlessingPattern) (security.Blessings, error) {
+	return security.Blessings{}, fmt.Errorf("cannot store blessings with an anonymous principal")
+}
+
+func (s *anonymousBlessingStore) ForPeer(...string) security.Blessings {
+	return s.b
+}
+
+func (s *anonymousBlessingStore) SetDefault(security.Blessings) error {
+	return fmt.Errorf("cannot change default blessing associated with the anonymous principal")
+}
+
+func (s *anonymousBlessingStore) Default() security.Blessings {
+	return s.b
+}
+
+func (s *anonymousBlessingStore) PublicKey() security.PublicKey {
+	return s.k
+}
+
+func (s *anonymousBlessingStore) PeerBlessings() map[security.BlessingPattern]security.Blessings {
+	return nil
+}
+
+func (anonymousBlessingStore) DebugString() string {
+	return "anonymous BlessingStore"
+}
diff --git a/profiles/internal/ipc/stream/vc/knobs.go b/profiles/internal/rpc/stream/vc/knobs.go
similarity index 100%
rename from profiles/internal/ipc/stream/vc/knobs.go
rename to profiles/internal/rpc/stream/vc/knobs.go
diff --git a/profiles/internal/ipc/stream/vc/listener.go b/profiles/internal/rpc/stream/vc/listener.go
similarity index 94%
rename from profiles/internal/ipc/stream/vc/listener.go
rename to profiles/internal/rpc/stream/vc/listener.go
index df18355..fc1396f 100644
--- a/profiles/internal/ipc/stream/vc/listener.go
+++ b/profiles/internal/rpc/stream/vc/listener.go
@@ -3,8 +3,8 @@
 import (
 	"errors"
 
-	"v.io/x/ref/profiles/internal/ipc/stream"
 	"v.io/x/ref/profiles/internal/lib/upcqueue"
+	"v.io/x/ref/profiles/internal/rpc/stream"
 )
 
 var errListenerClosed = errors.New("Listener has been closed")
diff --git a/profiles/internal/ipc/stream/vc/listener_test.go b/profiles/internal/rpc/stream/vc/listener_test.go
similarity index 97%
rename from profiles/internal/ipc/stream/vc/listener_test.go
rename to profiles/internal/rpc/stream/vc/listener_test.go
index 15a3bb5..171f8db 100644
--- a/profiles/internal/ipc/stream/vc/listener_test.go
+++ b/profiles/internal/rpc/stream/vc/listener_test.go
@@ -5,7 +5,7 @@
 
 	"v.io/v23/naming"
 	"v.io/v23/security"
-	"v.io/x/ref/profiles/internal/ipc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream"
 )
 
 type noopFlow struct{}
diff --git a/profiles/internal/ipc/stream/vc/reader.go b/profiles/internal/rpc/stream/vc/reader.go
similarity index 100%
rename from profiles/internal/ipc/stream/vc/reader.go
rename to profiles/internal/rpc/stream/vc/reader.go
diff --git a/profiles/internal/ipc/stream/vc/reader_test.go b/profiles/internal/rpc/stream/vc/reader_test.go
similarity index 100%
rename from profiles/internal/ipc/stream/vc/reader_test.go
rename to profiles/internal/rpc/stream/vc/reader_test.go
diff --git a/profiles/internal/ipc/stream/vc/v23_internal_test.go b/profiles/internal/rpc/stream/vc/v23_internal_test.go
similarity index 100%
rename from profiles/internal/ipc/stream/vc/v23_internal_test.go
rename to profiles/internal/rpc/stream/vc/v23_internal_test.go
diff --git a/profiles/internal/ipc/stream/vc/vc.go b/profiles/internal/rpc/stream/vc/vc.go
similarity index 97%
rename from profiles/internal/ipc/stream/vc/vc.go
rename to profiles/internal/rpc/stream/vc/vc.go
index b32ff82..005107b 100644
--- a/profiles/internal/ipc/stream/vc/vc.go
+++ b/profiles/internal/rpc/stream/vc/vc.go
@@ -13,20 +13,20 @@
 	"sync"
 	"time"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/crypto"
-	"v.io/x/ref/profiles/internal/ipc/stream/id"
 	"v.io/x/ref/profiles/internal/lib/bqueue"
 	"v.io/x/ref/profiles/internal/lib/iobuf"
 	vsync "v.io/x/ref/profiles/internal/lib/sync"
+	"v.io/x/ref/profiles/internal/rpc/stream/crypto"
+	"v.io/x/ref/profiles/internal/rpc/stream/id"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc/version"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc/version"
 	"v.io/v23/security"
 	"v.io/v23/vom"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/profiles/internal/ipc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream"
 )
 
 var (
@@ -40,8 +40,8 @@
 // Discharges will be refreshed DischargeExpiryBuffer before they expire.
 type DischargeExpiryBuffer time.Duration
 
-func (DischargeExpiryBuffer) IPCStreamListenerOpt() {}
-func (DischargeExpiryBuffer) IPCServerOpt()         {}
+func (DischargeExpiryBuffer) RPCStreamListenerOpt() {}
+func (DischargeExpiryBuffer) RPCServerOpt()         {}
 
 const DefaultServerDischargeExpiryBuffer = 20 * time.Second
 
@@ -76,7 +76,7 @@
 	closed              bool
 
 	helper    Helper
-	version   version.IPCVersion
+	version   version.RPCVersion
 	dataCache *dataCache // dataCache contains information that can shared between Flows from this VC.
 }
 
@@ -96,7 +96,7 @@
 	Policy         security.Authorizer
 }
 
-func (a *ServerAuthorizer) IPCStreamVCOpt() {}
+func (a *ServerAuthorizer) RPCStreamVCOpt() {}
 func (a *ServerAuthorizer) Authorize(params security.CallParams) error {
 	params.Suffix = a.Suffix
 	params.Method = a.Method
@@ -136,7 +136,7 @@
 	Pool         *iobuf.Pool     // Byte pool used for read and write buffer allocations.
 	ReserveBytes uint            // Number of padding bytes to reserve for headers.
 	Helper       Helper
-	Version      version.IPCVersion
+	Version      version.RPCVersion
 }
 
 // DischargeClient is an interface for obtaining discharges for a set of third-party
@@ -148,14 +148,14 @@
 	// Invalidate marks the provided discharges as invalid, and therefore unfit
 	// for being returned by a subsequent PrepareDischarges call.
 	Invalidate(discharges ...security.Discharge)
-	IPCStreamListenerOpt()
+	RPCStreamListenerOpt()
 }
 
 // DialContext establishes the context under which a VC Dial was initiated.
 type DialContext struct{ *context.T }
 
-func (DialContext) IPCStreamVCOpt()       {}
-func (DialContext) IPCStreamListenerOpt() {}
+func (DialContext) RPCStreamVCOpt()       {}
+func (DialContext) RPCStreamListenerOpt() {}
 
 // InternalNew creates a new VC, which implements the stream.VC interface.
 //
diff --git a/profiles/internal/ipc/stream/vc/vc_test.go b/profiles/internal/rpc/stream/vc/vc_test.go
similarity index 96%
rename from profiles/internal/ipc/stream/vc/vc_test.go
rename to profiles/internal/rpc/stream/vc/vc_test.go
index 302f477..28fa9f1 100644
--- a/profiles/internal/ipc/stream/vc/vc_test.go
+++ b/profiles/internal/rpc/stream/vc/vc_test.go
@@ -15,19 +15,19 @@
 	"testing"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc/version"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc/version"
 	"v.io/v23/security"
 
 	"v.io/x/lib/vlog"
 
-	"v.io/x/ref/profiles/internal/ipc/stream"
-	"v.io/x/ref/profiles/internal/ipc/stream/id"
-	"v.io/x/ref/profiles/internal/ipc/stream/vc"
 	"v.io/x/ref/profiles/internal/lib/bqueue"
 	"v.io/x/ref/profiles/internal/lib/bqueue/drrqueue"
 	"v.io/x/ref/profiles/internal/lib/iobuf"
+	"v.io/x/ref/profiles/internal/rpc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream/id"
+	"v.io/x/ref/profiles/internal/rpc/stream/vc"
 	tsecurity "v.io/x/ref/test/security"
 	"v.io/x/ref/test/testutil"
 )
@@ -46,7 +46,7 @@
 	SecurityNone = options.VCSecurityNone
 	SecurityTLS  = options.VCSecurityConfidential
 
-	LatestVersion = version.IPCVersion7
+	LatestVersion = version.RPCVersion7
 )
 
 // testFlowEcho writes a random string of 'size' bytes on the flow and then
@@ -165,8 +165,8 @@
 	return m
 }
 func (mockDischargeClient) Invalidate(...security.Discharge) {}
-func (mockDischargeClient) IPCStreamListenerOpt()            {}
-func (mockDischargeClient) IPCStreamVCOpt()                  {}
+func (mockDischargeClient) RPCStreamListenerOpt()            {}
+func (mockDischargeClient) RPCStreamVCOpt()                  {}
 
 // Test that mockDischargeClient implements vc.DischargeClient.
 var _ vc.DischargeClient = (mockDischargeClient)(nil)
@@ -301,7 +301,7 @@
 func TestConnectTLS(t *testing.T) { testConnect(t, SecurityTLS) }
 
 func testConnect_Version7(t *testing.T, security options.VCSecurityLevel) {
-	h, vc, err := New(security, version.IPCVersion7, tsecurity.NewPrincipal("client"), tsecurity.NewPrincipal("server"), nil, nil)
+	h, vc, err := New(security, version.RPCVersion7, tsecurity.NewPrincipal("client"), tsecurity.NewPrincipal("server"), nil, nil)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -440,7 +440,7 @@
 // New creates both ends of a VC but returns only the "client" end (i.e., the
 // one that initiated the VC). The "server" end (the one that "accepted" the VC)
 // listens for flows and simply echoes data read.
-func New(security options.VCSecurityLevel, v version.IPCVersion, client, server security.Principal, dischargeClient vc.DischargeClient, auth *vc.ServerAuthorizer) (*helper, stream.VC, error) {
+func New(security options.VCSecurityLevel, v version.RPCVersion, client, server security.Principal, dischargeClient vc.DischargeClient, auth *vc.ServerAuthorizer) (*helper, stream.VC, error) {
 	clientH := &helper{bq: drrqueue.New(vc.MaxPayloadSizeBytes)}
 	serverH := &helper{bq: drrqueue.New(vc.MaxPayloadSizeBytes)}
 	clientH.otherEnd = serverH
@@ -595,4 +595,4 @@
 func (e endpoint) Addr() net.Addr                           { return nil }
 func (e endpoint) ServesMountTable() bool                   { return false }
 func (e endpoint) BlessingNames() []string                  { return nil }
-func (e endpoint) IPCVersionRange() version.IPCVersionRange { return version.IPCVersionRange{} }
+func (e endpoint) RPCVersionRange() version.RPCVersionRange { return version.RPCVersionRange{} }
diff --git a/profiles/internal/ipc/stream/vc/writer.go b/profiles/internal/rpc/stream/vc/writer.go
similarity index 100%
rename from profiles/internal/ipc/stream/vc/writer.go
rename to profiles/internal/rpc/stream/vc/writer.go
diff --git a/profiles/internal/ipc/stream/vc/writer_test.go b/profiles/internal/rpc/stream/vc/writer_test.go
similarity index 100%
rename from profiles/internal/ipc/stream/vc/writer_test.go
rename to profiles/internal/rpc/stream/vc/writer_test.go
diff --git a/profiles/internal/ipc/stream/vif/auth.go b/profiles/internal/rpc/stream/vif/auth.go
similarity index 84%
rename from profiles/internal/ipc/stream/vif/auth.go
rename to profiles/internal/rpc/stream/vif/auth.go
index 25a5414..b62157a 100644
--- a/profiles/internal/ipc/stream/vif/auth.go
+++ b/profiles/internal/rpc/stream/vif/auth.go
@@ -8,15 +8,15 @@
 
 	"golang.org/x/crypto/nacl/box"
 
-	ipcversion "v.io/v23/ipc/version"
 	"v.io/v23/options"
+	rpcversion "v.io/v23/rpc/version"
 	"v.io/v23/security"
-	"v.io/x/ref/profiles/internal/ipc/stream"
-	"v.io/x/ref/profiles/internal/ipc/stream/crypto"
-	"v.io/x/ref/profiles/internal/ipc/stream/message"
-	"v.io/x/ref/profiles/internal/ipc/stream/vc"
-	"v.io/x/ref/profiles/internal/ipc/version"
 	"v.io/x/ref/profiles/internal/lib/iobuf"
+	"v.io/x/ref/profiles/internal/rpc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream/crypto"
+	"v.io/x/ref/profiles/internal/rpc/stream/message"
+	"v.io/x/ref/profiles/internal/rpc/stream/vc"
+	"v.io/x/ref/profiles/internal/rpc/version"
 )
 
 var (
@@ -35,7 +35,7 @@
 //
 // The sequence is initiated by the client.
 //
-//    - If the versions include IPCVersion6 or greater, the client sends a
+//    - If the versions include RPCVersion6 or greater, the client sends a
 //      HopSetup message to the server, containing the client's supported
 //      versions, and the client's crypto options.  The HopSetup message
 //      is sent in the clear.
@@ -44,10 +44,10 @@
 //      AuthenticateAsServer, which constructs a response HopSetup containing
 //      the server's version range, and any crypto options.
 //
-//    - For IPCVersion6 and IPCVersion7, the client and server generate fresh
+//    - For RPCVersion6 and RPCVersion7, the client and server generate fresh
 //      public/private key pairs, sending the public key to the peer as a crypto
 //      option.  The remainder of the communication is encrypted as
-//      HopSetupStream messages using NewControlCipherIPC6, which is based on
+//      HopSetupStream messages using NewControlCipherRPC6, which is based on
 //      code.google.com/p/go.crypto/nacl/box.
 //
 //    - Once the encrypted HopSetupStream channel is setup, the client and
@@ -58,7 +58,7 @@
 // modifying the acceptable version ranges downward.  This can be addressed by
 // including a hash of the HopSetup message in the encrypted stream.  It is
 // likely that this will be addressed in subsequent protocol versions (or it may
-// not be addressed at all if IPCVersion6 becomes the only supported version).
+// not be addressed at all if RPCVersion6 becomes the only supported version).
 func AuthenticateAsClient(writer io.Writer, reader *iobuf.Reader, versions *version.Range, params security.CallParams, auth *vc.ServerAuthorizer) (crypto.ControlCipher, error) {
 	if versions == nil {
 		versions = version.SupportedRange
@@ -66,12 +66,12 @@
 	if params.LocalPrincipal == nil {
 		// If there is no principal, we do not support encryption/authentication.
 		var err error
-		versions, err = versions.Intersect(&version.Range{Min: 0, Max: ipcversion.IPCVersion5})
+		versions, err = versions.Intersect(&version.Range{Min: 0, Max: rpcversion.RPCVersion5})
 		if err != nil {
 			return nil, err
 		}
 	}
-	if versions.Max < ipcversion.IPCVersion6 {
+	if versions.Max < rpcversion.RPCVersion6 {
 		return nullCipher, nil
 	}
 
@@ -100,7 +100,7 @@
 		return nil, err
 	}
 	v := vrange.Max
-	if v < ipcversion.IPCVersion6 {
+	if v < rpcversion.RPCVersion6 {
 		return nullCipher, nil
 	}
 
@@ -109,15 +109,15 @@
 }
 
 func authenticateAsClient(writer io.Writer, reader *iobuf.Reader, params security.CallParams, auth *vc.ServerAuthorizer,
-	pvt *privateData, pub, ppub *message.HopSetup, version ipcversion.IPCVersion) (crypto.ControlCipher, error) {
-	if version < ipcversion.IPCVersion6 {
+	pvt *privateData, pub, ppub *message.HopSetup, version rpcversion.RPCVersion) (crypto.ControlCipher, error) {
+	if version < rpcversion.RPCVersion6 {
 		return nil, errUnsupportedEncryptVersion
 	}
 	pbox := ppub.NaclBox()
 	if pbox == nil {
 		return nil, errVersionNegotiationFailed
 	}
-	c := crypto.NewControlCipherIPC6(&pbox.PublicKey, &pvt.naclBoxPrivateKey, false)
+	c := crypto.NewControlCipherRPC6(&pbox.PublicKey, &pvt.naclBoxPrivateKey, false)
 	sconn := newSetupConn(writer, reader, c)
 	// TODO(jyh): act upon the authentication results.
 	_, _, _, err := vc.AuthenticateAsClient(sconn, crypto.NewNullCrypter(), params, auth, version)
@@ -139,7 +139,7 @@
 	}
 	if principal == nil {
 		// If there is no principal, we don't support encryption/authentication.
-		versions, err = versions.Intersect(&version.Range{Min: 0, Max: ipcversion.IPCVersion5})
+		versions, err = versions.Intersect(&version.Range{Min: 0, Max: rpcversion.RPCVersion5})
 		if err != nil {
 			return nil, err
 		}
@@ -160,24 +160,24 @@
 		return nil, err
 	}
 	v := vrange.Max
-	if v < ipcversion.IPCVersion6 {
+	if v < rpcversion.RPCVersion6 {
 		return nullCipher, nil
 	}
 
 	// Perform authentication.
-	return authenticateAsServerIPC6(writer, reader, principal, lBlessings, dc, &pvt, &pub, ppub, v)
+	return authenticateAsServerRPC6(writer, reader, principal, lBlessings, dc, &pvt, &pub, ppub, v)
 }
 
-func authenticateAsServerIPC6(writer io.Writer, reader *iobuf.Reader, principal security.Principal, lBlessings security.Blessings, dc vc.DischargeClient,
-	pvt *privateData, pub, ppub *message.HopSetup, version ipcversion.IPCVersion) (crypto.ControlCipher, error) {
-	if version < ipcversion.IPCVersion6 {
+func authenticateAsServerRPC6(writer io.Writer, reader *iobuf.Reader, principal security.Principal, lBlessings security.Blessings, dc vc.DischargeClient,
+	pvt *privateData, pub, ppub *message.HopSetup, version rpcversion.RPCVersion) (crypto.ControlCipher, error) {
+	if version < rpcversion.RPCVersion6 {
 		return nil, errUnsupportedEncryptVersion
 	}
 	box := ppub.NaclBox()
 	if box == nil {
 		return nil, errVersionNegotiationFailed
 	}
-	c := crypto.NewControlCipherIPC6(&box.PublicKey, &pvt.naclBoxPrivateKey, true)
+	c := crypto.NewControlCipherRPC6(&box.PublicKey, &pvt.naclBoxPrivateKey, true)
 	sconn := newSetupConn(writer, reader, c)
 	// TODO(jyh): act upon authentication results.
 	_, _, err := vc.AuthenticateAsServer(sconn, principal, lBlessings, dc, crypto.NewNullCrypter(), version)
diff --git a/profiles/internal/ipc/stream/vif/doc.go b/profiles/internal/rpc/stream/vif/doc.go
similarity index 78%
rename from profiles/internal/ipc/stream/vif/doc.go
rename to profiles/internal/rpc/stream/vif/doc.go
index 47ba9f6..b925d24 100644
--- a/profiles/internal/ipc/stream/vif/doc.go
+++ b/profiles/internal/rpc/stream/vif/doc.go
@@ -1,4 +1,4 @@
 // Package vif implements a virtual network interface that wraps over a
 // net.Conn and provides the ability to Dial and Listen for virtual circuits
-// (veyron/profiles/internal/ipc/stream.VC)
+// (veyron/profiles/internal/rpc/stream.VC)
 package vif
diff --git a/profiles/internal/ipc/stream/vif/set.go b/profiles/internal/rpc/stream/vif/set.go
similarity index 97%
rename from profiles/internal/ipc/stream/vif/set.go
rename to profiles/internal/rpc/stream/vif/set.go
index 0ff5c95..f702777 100644
--- a/profiles/internal/ipc/stream/vif/set.go
+++ b/profiles/internal/rpc/stream/vif/set.go
@@ -6,7 +6,7 @@
 	"runtime"
 	"sync"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 )
 
 // Set implements a set of VIFs keyed by (network, address) of the underlying
@@ -39,7 +39,7 @@
 	}
 
 	var keys []string
-	_, _, p := ipc.RegisteredProtocol(network)
+	_, _, p := rpc.RegisteredProtocol(network)
 	for _, n := range p {
 		keys = append(keys, key(n, address))
 	}
diff --git a/profiles/internal/ipc/stream/vif/set_test.go b/profiles/internal/rpc/stream/vif/set_test.go
similarity index 97%
rename from profiles/internal/ipc/stream/vif/set_test.go
rename to profiles/internal/rpc/stream/vif/set_test.go
index 6621d4b..c555cf8 100644
--- a/profiles/internal/ipc/stream/vif/set_test.go
+++ b/profiles/internal/rpc/stream/vif/set_test.go
@@ -9,18 +9,18 @@
 	"testing"
 	"time"
 
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 
 	_ "v.io/x/ref/profiles"
-	"v.io/x/ref/profiles/internal/ipc/stream/vif"
+	"v.io/x/ref/profiles/internal/rpc/stream/vif"
 	tsecurity "v.io/x/ref/test/security"
 )
 
 var supportsIPv6 bool
 
 func init() {
-	ipc.RegisterProtocol("unix", net.DialTimeout, net.Listen)
+	rpc.RegisterProtocol("unix", net.DialTimeout, net.Listen)
 
 	// Check whether the platform supports IPv6.
 	ln, err := net.Listen("tcp6", "[::1]:0")
@@ -31,7 +31,7 @@
 }
 
 func newConn(network, address string) (net.Conn, net.Conn, error) {
-	dfunc, lfunc, _ := ipc.RegisteredProtocol(network)
+	dfunc, lfunc, _ := rpc.RegisteredProtocol(network)
 	ln, err := lfunc(network, address)
 	if err != nil {
 		return nil, nil, err
@@ -95,7 +95,7 @@
 	}
 	defer os.RemoveAll(sockdir)
 
-	all := ipc.RegisteredProtocols()
+	all := rpc.RegisteredProtocols()
 	unknown := naming.UnknownProtocol
 	tests := []struct {
 		network, address string
diff --git a/profiles/internal/ipc/stream/vif/setup_conn.go b/profiles/internal/rpc/stream/vif/setup_conn.go
similarity index 93%
rename from profiles/internal/ipc/stream/vif/setup_conn.go
rename to profiles/internal/rpc/stream/vif/setup_conn.go
index 9fa9553..6df8d9f 100644
--- a/profiles/internal/ipc/stream/vif/setup_conn.go
+++ b/profiles/internal/rpc/stream/vif/setup_conn.go
@@ -3,9 +3,9 @@
 import (
 	"io"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/crypto"
-	"v.io/x/ref/profiles/internal/ipc/stream/message"
 	"v.io/x/ref/profiles/internal/lib/iobuf"
+	"v.io/x/ref/profiles/internal/rpc/stream/crypto"
+	"v.io/x/ref/profiles/internal/rpc/stream/message"
 )
 
 // setupConn writes the data to the net.Conn using HopSetupStream messages.
diff --git a/profiles/internal/ipc/stream/vif/setup_conn_test.go b/profiles/internal/rpc/stream/vif/setup_conn_test.go
similarity index 100%
rename from profiles/internal/ipc/stream/vif/setup_conn_test.go
rename to profiles/internal/rpc/stream/vif/setup_conn_test.go
diff --git a/profiles/internal/ipc/stream/vif/v23_internal_test.go b/profiles/internal/rpc/stream/vif/v23_internal_test.go
similarity index 100%
rename from profiles/internal/ipc/stream/vif/v23_internal_test.go
rename to profiles/internal/rpc/stream/vif/v23_internal_test.go
diff --git a/profiles/internal/ipc/stream/vif/vcmap.go b/profiles/internal/rpc/stream/vif/vcmap.go
similarity index 95%
rename from profiles/internal/ipc/stream/vif/vcmap.go
rename to profiles/internal/rpc/stream/vif/vcmap.go
index 575484e..2184307 100644
--- a/profiles/internal/ipc/stream/vif/vcmap.go
+++ b/profiles/internal/rpc/stream/vif/vcmap.go
@@ -4,9 +4,9 @@
 	"sort"
 	"sync"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/id"
-	"v.io/x/ref/profiles/internal/ipc/stream/vc"
 	"v.io/x/ref/profiles/internal/lib/pcqueue"
+	"v.io/x/ref/profiles/internal/rpc/stream/id"
+	"v.io/x/ref/profiles/internal/rpc/stream/vc"
 )
 
 // vcMap implements a thread-safe map of vc.VC objects (vcInfo) keyed by their VCI.
diff --git a/profiles/internal/ipc/stream/vif/vcmap_test.go b/profiles/internal/rpc/stream/vif/vcmap_test.go
similarity index 96%
rename from profiles/internal/ipc/stream/vif/vcmap_test.go
rename to profiles/internal/rpc/stream/vif/vcmap_test.go
index 8f23e33..95d9a73 100644
--- a/profiles/internal/ipc/stream/vif/vcmap_test.go
+++ b/profiles/internal/rpc/stream/vif/vcmap_test.go
@@ -4,7 +4,7 @@
 	"reflect"
 	"testing"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/vc"
+	"v.io/x/ref/profiles/internal/rpc/stream/vc"
 )
 
 func TestVCMap(t *testing.T) {
diff --git a/profiles/internal/ipc/stream/vif/vif.go b/profiles/internal/rpc/stream/vif/vif.go
similarity index 98%
rename from profiles/internal/ipc/stream/vif/vif.go
rename to profiles/internal/rpc/stream/vif/vif.go
index 5279034..4fdf1aa 100644
--- a/profiles/internal/ipc/stream/vif/vif.go
+++ b/profiles/internal/rpc/stream/vif/vif.go
@@ -21,21 +21,21 @@
 	"v.io/v23/verror"
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
-	"v.io/x/ref/profiles/internal/ipc/stream"
-	"v.io/x/ref/profiles/internal/ipc/stream/crypto"
-	"v.io/x/ref/profiles/internal/ipc/stream/id"
-	"v.io/x/ref/profiles/internal/ipc/stream/message"
-	"v.io/x/ref/profiles/internal/ipc/stream/vc"
-	"v.io/x/ref/profiles/internal/ipc/version"
 	"v.io/x/ref/profiles/internal/lib/bqueue"
 	"v.io/x/ref/profiles/internal/lib/bqueue/drrqueue"
 	"v.io/x/ref/profiles/internal/lib/iobuf"
 	"v.io/x/ref/profiles/internal/lib/pcqueue"
 	vsync "v.io/x/ref/profiles/internal/lib/sync"
 	"v.io/x/ref/profiles/internal/lib/upcqueue"
+	"v.io/x/ref/profiles/internal/rpc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream/crypto"
+	"v.io/x/ref/profiles/internal/rpc/stream/id"
+	"v.io/x/ref/profiles/internal/rpc/stream/message"
+	"v.io/x/ref/profiles/internal/rpc/stream/vc"
+	"v.io/x/ref/profiles/internal/rpc/version"
 )
 
-const pkgPath = "v.io/x/ref/profiles/internal/ipc/stream/vif"
+const pkgPath = "v.io/x/ref/profiles/internal/rpc/stream/vif"
 
 var (
 	errShuttingDown = verror.Register(pkgPath+".errShuttingDown", verror.NoRetry, "{1:}{2:} underlying network connection({3}) shutting down{:_}")
@@ -79,9 +79,9 @@
 
 	stopQ bqueue.Writer
 
-	// The IPC version range supported by this VIF.  In practice this is
+	// The RPC version range supported by this VIF.  In practice this is
 	// non-nil only in testing.  nil is equivalent to using the versions
-	// actually supported by this IPC implementation (which is always
+	// actually supported by this RPC implementation (which is always
 	// what you want outside of tests).
 	versions *version.Range
 
diff --git a/profiles/internal/ipc/stream/vif/vif_test.go b/profiles/internal/rpc/stream/vif/vif_test.go
similarity index 98%
rename from profiles/internal/ipc/stream/vif/vif_test.go
rename to profiles/internal/rpc/stream/vif/vif_test.go
index 4bb1abe..2183975 100644
--- a/profiles/internal/ipc/stream/vif/vif_test.go
+++ b/profiles/internal/rpc/stream/vif/vif_test.go
@@ -16,15 +16,15 @@
 	"testing"
 	"time"
 
-	"v.io/v23/ipc/version"
 	"v.io/v23/naming"
+	"v.io/v23/rpc/version"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/vif"
-	iversion "v.io/x/ref/profiles/internal/ipc/version"
+	"v.io/x/ref/profiles/internal/rpc/stream/vif"
+	iversion "v.io/x/ref/profiles/internal/rpc/version"
 	tsecurity "v.io/x/ref/test/security"
 	"v.io/x/ref/test/testutil"
 
-	"v.io/x/ref/profiles/internal/ipc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream"
 )
 
 //go:generate v23 test generate
@@ -355,7 +355,7 @@
 // that overlapping ranges work properly, but non-overlapping ranges generate
 // errors.
 func TestIncompatibleVersions(t *testing.T) {
-	unknown := &iversion.Range{version.UnknownIPCVersion, version.UnknownIPCVersion}
+	unknown := &iversion.Range{version.UnknownRPCVersion, version.UnknownRPCVersion}
 	tests := []versionTestCase{
 		{&iversion.Range{1, 1}, &iversion.Range{1, 1}, &iversion.Range{1, 1}, false, false},
 		{&iversion.Range{1, 3}, &iversion.Range{3, 5}, &iversion.Range{3, 5}, false, false},
diff --git a/profiles/internal/ipc/stress/internal/client.go b/profiles/internal/rpc/stress/internal/client.go
similarity index 97%
rename from profiles/internal/ipc/stress/internal/client.go
rename to profiles/internal/rpc/stress/internal/client.go
index b46b6d1..ae6b309 100644
--- a/profiles/internal/ipc/stress/internal/client.go
+++ b/profiles/internal/rpc/stress/internal/client.go
@@ -9,7 +9,7 @@
 	"v.io/v23/context"
 	"v.io/x/lib/vlog"
 
-	"v.io/x/ref/profiles/internal/ipc/stress"
+	"v.io/x/ref/profiles/internal/rpc/stress"
 )
 
 func newArg(maxPayloadSize int) (stress.Arg, error) {
diff --git a/profiles/internal/ipc/stress/internal/server.go b/profiles/internal/rpc/stress/internal/server.go
similarity index 85%
rename from profiles/internal/ipc/stress/internal/server.go
rename to profiles/internal/rpc/stress/internal/server.go
index 9b30a8d..318b246 100644
--- a/profiles/internal/ipc/stress/internal/server.go
+++ b/profiles/internal/rpc/stress/internal/server.go
@@ -5,11 +5,11 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 
-	"v.io/x/ref/profiles/internal/ipc/stress"
+	"v.io/x/ref/profiles/internal/rpc/stress"
 )
 
 type impl struct {
@@ -20,7 +20,7 @@
 	stop chan struct{}
 }
 
-func (s *impl) Sum(call ipc.ServerCall, arg stress.Arg) ([]byte, error) {
+func (s *impl) Sum(call rpc.ServerCall, arg stress.Arg) ([]byte, error) {
 	defer s.incSumCount()
 	return doSum(arg)
 }
@@ -42,13 +42,13 @@
 	return nil
 }
 
-func (s *impl) GetStats(call ipc.ServerCall) (stress.Stats, error) {
+func (s *impl) GetStats(call rpc.ServerCall) (stress.Stats, error) {
 	s.statsMu.Lock()
 	defer s.statsMu.Unlock()
 	return stress.Stats{s.sumCount, s.sumStreamCount}, nil
 }
 
-func (s *impl) Stop(call ipc.ServerCall) error {
+func (s *impl) Stop(call rpc.ServerCall) error {
 	s.stop <- struct{}{}
 	return nil
 }
@@ -72,7 +72,7 @@
 // StartServer starts a server that implements the Stress service, and returns
 // the server and its vanadium address. It also returns a channel carrying stop
 // requests. After reading from the stop channel, the application should exit.
-func StartServer(ctx *context.T, listenSpec ipc.ListenSpec) (ipc.Server, naming.Endpoint, <-chan struct{}) {
+func StartServer(ctx *context.T, listenSpec rpc.ListenSpec) (rpc.Server, naming.Endpoint, <-chan struct{}) {
 	server, err := v23.NewServer(ctx)
 	if err != nil {
 		vlog.Fatalf("NewServer failed: %v", err)
diff --git a/profiles/internal/ipc/stress/internal/util.go b/profiles/internal/rpc/stress/internal/util.go
similarity index 89%
rename from profiles/internal/ipc/stress/internal/util.go
rename to profiles/internal/rpc/stress/internal/util.go
index a57dd74..20bfe9c 100644
--- a/profiles/internal/ipc/stress/internal/util.go
+++ b/profiles/internal/rpc/stress/internal/util.go
@@ -4,7 +4,7 @@
 	"crypto/md5"
 	"encoding/binary"
 
-	"v.io/x/ref/profiles/internal/ipc/stress"
+	"v.io/x/ref/profiles/internal/rpc/stress"
 )
 
 // doSum returns the MD5 checksum of the arg.
diff --git a/profiles/internal/ipc/stress/stress.vdl b/profiles/internal/rpc/stress/stress.vdl
similarity index 100%
rename from profiles/internal/ipc/stress/stress.vdl
rename to profiles/internal/rpc/stress/stress.vdl
diff --git a/profiles/internal/ipc/stress/stress.vdl.go b/profiles/internal/rpc/stress/stress.vdl.go
similarity index 82%
rename from profiles/internal/ipc/stress/stress.vdl.go
rename to profiles/internal/rpc/stress/stress.vdl.go
index 08a89f0..12cc69d 100644
--- a/profiles/internal/ipc/stress/stress.vdl.go
+++ b/profiles/internal/rpc/stress/stress.vdl.go
@@ -8,7 +8,7 @@
 	"io"
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/vdl"
 
 	// VDL user imports
@@ -22,7 +22,7 @@
 }
 
 func (Arg) __VDLReflect(struct {
-	Name string "v.io/x/ref/profiles/internal/ipc/stress.Arg"
+	Name string "v.io/x/ref/profiles/internal/rpc/stress.Arg"
 }) {
 }
 
@@ -32,7 +32,7 @@
 }
 
 func (Stats) __VDLReflect(struct {
-	Name string "v.io/x/ref/profiles/internal/ipc/stress.Stats"
+	Name string "v.io/x/ref/profiles/internal/rpc/stress.Stats"
 }) {
 }
 
@@ -45,26 +45,26 @@
 // containing Stress methods.
 type StressClientMethods interface {
 	// Do returns the checksum of the payload that it receives.
-	Sum(ctx *context.T, arg Arg, opts ...ipc.CallOpt) ([]byte, error)
+	Sum(ctx *context.T, arg Arg, opts ...rpc.CallOpt) ([]byte, error)
 	// DoStream returns the checksum of the payload that it receives via the stream.
-	SumStream(*context.T, ...ipc.CallOpt) (StressSumStreamClientCall, error)
+	SumStream(*context.T, ...rpc.CallOpt) (StressSumStreamClientCall, error)
 	// GetStats returns the stats on the calls that the server received.
-	GetStats(*context.T, ...ipc.CallOpt) (Stats, error)
+	GetStats(*context.T, ...rpc.CallOpt) (Stats, error)
 	// Stop stops the server.
-	Stop(*context.T, ...ipc.CallOpt) error
+	Stop(*context.T, ...rpc.CallOpt) error
 }
 
 // StressClientStub adds universal methods to StressClientMethods.
 type StressClientStub interface {
 	StressClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // StressClient returns a client stub for Stress.
-func StressClient(name string, opts ...ipc.BindOpt) StressClientStub {
-	var client ipc.Client
+func StressClient(name string, opts ...rpc.BindOpt) StressClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -73,18 +73,18 @@
 
 type implStressClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implStressClientStub) c(ctx *context.T) ipc.Client {
+func (c implStressClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implStressClientStub) Sum(ctx *context.T, i0 Arg, opts ...ipc.CallOpt) (o0 []byte, err error) {
-	var call ipc.ClientCall
+func (c implStressClientStub) Sum(ctx *context.T, i0 Arg, opts ...rpc.CallOpt) (o0 []byte, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Sum", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -92,8 +92,8 @@
 	return
 }
 
-func (c implStressClientStub) SumStream(ctx *context.T, opts ...ipc.CallOpt) (ocall StressSumStreamClientCall, err error) {
-	var call ipc.ClientCall
+func (c implStressClientStub) SumStream(ctx *context.T, opts ...rpc.CallOpt) (ocall StressSumStreamClientCall, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "SumStream", nil, opts...); err != nil {
 		return
 	}
@@ -101,8 +101,8 @@
 	return
 }
 
-func (c implStressClientStub) GetStats(ctx *context.T, opts ...ipc.CallOpt) (o0 Stats, err error) {
-	var call ipc.ClientCall
+func (c implStressClientStub) GetStats(ctx *context.T, opts ...rpc.CallOpt) (o0 Stats, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "GetStats", nil, opts...); err != nil {
 		return
 	}
@@ -110,8 +110,8 @@
 	return
 }
 
-func (c implStressClientStub) Stop(ctx *context.T, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implStressClientStub) Stop(ctx *context.T, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Stop", nil, opts...); err != nil {
 		return
 	}
@@ -169,7 +169,7 @@
 }
 
 type implStressSumStreamClientCall struct {
-	ipc.ClientCall
+	rpc.ClientCall
 	valRecv []byte
 	errRecv error
 }
@@ -225,49 +225,49 @@
 // implements for Stress.
 type StressServerMethods interface {
 	// Do returns the checksum of the payload that it receives.
-	Sum(call ipc.ServerCall, arg Arg) ([]byte, error)
+	Sum(call rpc.ServerCall, arg Arg) ([]byte, error)
 	// DoStream returns the checksum of the payload that it receives via the stream.
 	SumStream(StressSumStreamServerCall) error
 	// GetStats returns the stats on the calls that the server received.
-	GetStats(ipc.ServerCall) (Stats, error)
+	GetStats(rpc.ServerCall) (Stats, error)
 	// Stop stops the server.
-	Stop(ipc.ServerCall) error
+	Stop(rpc.ServerCall) error
 }
 
 // StressServerStubMethods is the server interface containing
-// Stress methods, as expected by ipc.Server.
+// Stress methods, as expected by rpc.Server.
 // The only difference between this interface and StressServerMethods
 // is the streaming methods.
 type StressServerStubMethods interface {
 	// Do returns the checksum of the payload that it receives.
-	Sum(call ipc.ServerCall, arg Arg) ([]byte, error)
+	Sum(call rpc.ServerCall, arg Arg) ([]byte, error)
 	// DoStream returns the checksum of the payload that it receives via the stream.
 	SumStream(*StressSumStreamServerCallStub) error
 	// GetStats returns the stats on the calls that the server received.
-	GetStats(ipc.ServerCall) (Stats, error)
+	GetStats(rpc.ServerCall) (Stats, error)
 	// Stop stops the server.
-	Stop(ipc.ServerCall) error
+	Stop(rpc.ServerCall) error
 }
 
 // StressServerStub adds universal methods to StressServerStubMethods.
 type StressServerStub interface {
 	StressServerStubMethods
 	// Describe the Stress interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // StressServer returns a server stub for Stress.
 // It converts an implementation of StressServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func StressServer(impl StressServerMethods) StressServerStub {
 	stub := implStressServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -275,10 +275,10 @@
 
 type implStressServerStub struct {
 	impl StressServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implStressServerStub) Sum(call ipc.ServerCall, i0 Arg) ([]byte, error) {
+func (s implStressServerStub) Sum(call rpc.ServerCall, i0 Arg) ([]byte, error) {
 	return s.impl.Sum(call, i0)
 }
 
@@ -286,37 +286,37 @@
 	return s.impl.SumStream(call)
 }
 
-func (s implStressServerStub) GetStats(call ipc.ServerCall) (Stats, error) {
+func (s implStressServerStub) GetStats(call rpc.ServerCall) (Stats, error) {
 	return s.impl.GetStats(call)
 }
 
-func (s implStressServerStub) Stop(call ipc.ServerCall) error {
+func (s implStressServerStub) Stop(call rpc.ServerCall) error {
 	return s.impl.Stop(call)
 }
 
-func (s implStressServerStub) Globber() *ipc.GlobState {
+func (s implStressServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implStressServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{StressDesc}
+func (s implStressServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{StressDesc}
 }
 
 // StressDesc describes the Stress interface.
-var StressDesc ipc.InterfaceDesc = descStress
+var StressDesc rpc.InterfaceDesc = descStress
 
 // descStress hides the desc to keep godoc clean.
-var descStress = ipc.InterfaceDesc{
+var descStress = rpc.InterfaceDesc{
 	Name:    "Stress",
-	PkgPath: "v.io/x/ref/profiles/internal/ipc/stress",
-	Methods: []ipc.MethodDesc{
+	PkgPath: "v.io/x/ref/profiles/internal/rpc/stress",
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Sum",
 			Doc:  "// Do returns the checksum of the payload that it receives.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"arg", ``}, // Arg
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // []byte
 			},
 			Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Read"))},
@@ -329,7 +329,7 @@
 		{
 			Name: "GetStats",
 			Doc:  "// GetStats returns the stats on the calls that the server received.",
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // Stats
 			},
 			Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Read"))},
@@ -367,20 +367,20 @@
 
 // StressSumStreamServerCall represents the context passed to Stress.SumStream.
 type StressSumStreamServerCall interface {
-	ipc.ServerCall
+	rpc.ServerCall
 	StressSumStreamServerStream
 }
 
-// StressSumStreamServerCallStub is a wrapper that converts ipc.StreamServerCall into
+// StressSumStreamServerCallStub is a wrapper that converts rpc.StreamServerCall into
 // a typesafe stub that implements StressSumStreamServerCall.
 type StressSumStreamServerCallStub struct {
-	ipc.StreamServerCall
+	rpc.StreamServerCall
 	valRecv Arg
 	errRecv error
 }
 
-// Init initializes StressSumStreamServerCallStub from ipc.StreamServerCall.
-func (s *StressSumStreamServerCallStub) Init(call ipc.StreamServerCall) {
+// Init initializes StressSumStreamServerCallStub from rpc.StreamServerCall.
+func (s *StressSumStreamServerCallStub) Init(call rpc.StreamServerCall) {
 	s.StreamServerCall = call
 }
 
diff --git a/profiles/internal/ipc/stress/stress/main.go b/profiles/internal/rpc/stress/stress/main.go
similarity index 96%
rename from profiles/internal/ipc/stress/stress/main.go
rename to profiles/internal/rpc/stress/stress/main.go
index f62ad08..77dfd7f 100644
--- a/profiles/internal/ipc/stress/stress/main.go
+++ b/profiles/internal/rpc/stress/stress/main.go
@@ -12,8 +12,8 @@
 	"v.io/v23/context"
 	"v.io/x/lib/vlog"
 
-	"v.io/x/ref/profiles/internal/ipc/stress"
-	"v.io/x/ref/profiles/internal/ipc/stress/internal"
+	"v.io/x/ref/profiles/internal/rpc/stress"
+	"v.io/x/ref/profiles/internal/rpc/stress/internal"
 	_ "v.io/x/ref/profiles/static"
 )
 
diff --git a/profiles/internal/ipc/stress/stressd/main.go b/profiles/internal/rpc/stress/stressd/main.go
similarity index 93%
rename from profiles/internal/ipc/stress/stressd/main.go
rename to profiles/internal/rpc/stress/stressd/main.go
index ea138d5..578ab3c 100644
--- a/profiles/internal/ipc/stress/stressd/main.go
+++ b/profiles/internal/rpc/stress/stressd/main.go
@@ -10,7 +10,7 @@
 	"v.io/x/lib/vlog"
 
 	"v.io/x/ref/lib/signals"
-	"v.io/x/ref/profiles/internal/ipc/stress/internal"
+	"v.io/x/ref/profiles/internal/rpc/stress/internal"
 	_ "v.io/x/ref/profiles/static"
 )
 
diff --git a/profiles/internal/ipc/test/client_test.go b/profiles/internal/rpc/test/client_test.go
similarity index 99%
rename from profiles/internal/ipc/test/client_test.go
rename to profiles/internal/rpc/test/client_test.go
index 1bcabf0..7f22784 100644
--- a/profiles/internal/ipc/test/client_test.go
+++ b/profiles/internal/rpc/test/client_test.go
@@ -12,9 +12,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/verror"
 
 	"v.io/x/ref/lib/flags/consts"
@@ -467,7 +467,7 @@
 	serverEP, _ := naming.SplitAddressName(serverName)
 	ep, _ := inaming.NewEndpoint(serverEP)
 
-	makeCall := func(ctx *context.T, opts ...ipc.CallOpt) (string, error) {
+	makeCall := func(ctx *context.T, opts ...rpc.CallOpt) (string, error) {
 		ctx, _ = context.WithDeadline(ctx, time.Now().Add(10*time.Second))
 		call, err := v23.GetClient(ctx).StartCall(ctx, serverName, "Echo", []interface{}{"bratman"}, opts...)
 		if err != nil {
diff --git a/profiles/internal/rpc/test/doc.go b/profiles/internal/rpc/test/doc.go
new file mode 100644
index 0000000..b7b20cb
--- /dev/null
+++ b/profiles/internal/rpc/test/doc.go
@@ -0,0 +1,2 @@
+// package test contains test for rpc code that do not rely on unexposed rpc declarations.
+package test
diff --git a/profiles/internal/ipc/test/glob_test.go b/profiles/internal/rpc/test/glob_test.go
similarity index 96%
rename from profiles/internal/ipc/test/glob_test.go
rename to profiles/internal/rpc/test/glob_test.go
index edcef4e..6fc55de 100644
--- a/profiles/internal/ipc/test/glob_test.go
+++ b/profiles/internal/rpc/test/glob_test.go
@@ -10,9 +10,9 @@
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/i18n"
-	"v.io/v23/ipc"
-	"v.io/v23/ipc/reserved"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
+	"v.io/v23/rpc/reserved"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 
@@ -273,7 +273,7 @@
 	}
 	if len(elems) != 0 && elems[0] == "muah" {
 		// Infinite space. Each node has one child named "ha".
-		return ipc.ChildrenGlobberInvoker("ha"), auth, nil
+		return rpc.ChildrenGlobberInvoker("ha"), auth, nil
 
 	}
 	if len(elems) != 0 && elems[len(elems)-1] == "leaf" {
@@ -296,7 +296,7 @@
 	suffix []string
 }
 
-func (o *globObject) Glob__(call ipc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
+func (o *globObject) Glob__(call rpc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
 	g, err := glob.Parse(pattern)
 	if err != nil {
 		return nil, err
@@ -332,7 +332,7 @@
 	suffix []string
 }
 
-func (o *vChildrenObject) GlobChildren__(call ipc.ServerCall) (<-chan string, error) {
+func (o *vChildrenObject) GlobChildren__(call rpc.ServerCall) (<-chan string, error) {
 	n := o.n.find(o.suffix, false)
 	if n == nil {
 		return nil, verror.New(verror.ErrNoExist, call.Context(), o.suffix)
@@ -379,6 +379,6 @@
 
 type leafObject struct{}
 
-func (l leafObject) Func(call ipc.ServerCall) error {
+func (l leafObject) Func(call rpc.ServerCall) error {
 	return nil
 }
diff --git a/profiles/internal/ipc/test/proxy_test.go b/profiles/internal/rpc/test/proxy_test.go
similarity index 93%
rename from profiles/internal/ipc/test/proxy_test.go
rename to profiles/internal/rpc/test/proxy_test.go
index 6c7c2f8..689a10f 100644
--- a/profiles/internal/ipc/test/proxy_test.go
+++ b/profiles/internal/rpc/test/proxy_test.go
@@ -12,21 +12,21 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/naming/ns"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/v23/vtrace"
 
 	"v.io/x/ref/lib/flags"
 	_ "v.io/x/ref/profiles"
-	iipc "v.io/x/ref/profiles/internal/ipc"
-	imanager "v.io/x/ref/profiles/internal/ipc/stream/manager"
-	"v.io/x/ref/profiles/internal/ipc/stream/proxy"
 	"v.io/x/ref/profiles/internal/lib/publisher"
 	inaming "v.io/x/ref/profiles/internal/naming"
+	irpc "v.io/x/ref/profiles/internal/rpc"
+	imanager "v.io/x/ref/profiles/internal/rpc/stream/manager"
+	"v.io/x/ref/profiles/internal/rpc/stream/proxy"
 	tnaming "v.io/x/ref/profiles/internal/testing/mocks/naming"
 	ivtrace "v.io/x/ref/profiles/internal/vtrace"
 	"v.io/x/ref/test/modules"
@@ -90,7 +90,7 @@
 
 type testServer struct{}
 
-func (*testServer) Echo(call ipc.ServerCall, arg string) (string, error) {
+func (*testServer) Echo(call rpc.ServerCall, arg string) (string, error) {
 	return fmt.Sprintf("method:%q,suffix:%q,arg:%q", call.Method(), call.Suffix(), arg), nil
 }
 
@@ -144,24 +144,24 @@
 }
 
 func TestProxyOnly(t *testing.T) {
-	listenSpec := ipc.ListenSpec{Proxy: "proxy"}
+	listenSpec := rpc.ListenSpec{Proxy: "proxy"}
 	testProxy(t, listenSpec)
 }
 
 func TestProxy(t *testing.T) {
-	proxyListenSpec := ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
+	proxyListenSpec := rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
 	proxyListenSpec.Proxy = "proxy"
 	testProxy(t, proxyListenSpec)
 }
 
 func TestWSProxy(t *testing.T) {
-	proxyListenSpec := ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
+	proxyListenSpec := rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
 	proxyListenSpec.Proxy = "proxy"
 	// The proxy uses websockets only, but the server is using tcp.
 	testProxy(t, proxyListenSpec, "--veyron.tcp.protocol=ws")
 }
 
-func testProxy(t *testing.T, spec ipc.ListenSpec, args ...string) {
+func testProxy(t *testing.T, spec rpc.ListenSpec, args ...string) {
 	ctx, shutdown := testContext()
 	defer shutdown()
 	var (
@@ -176,13 +176,13 @@
 	)
 	defer smserver.Shutdown()
 	defer smclient.Shutdown()
-	client, err := iipc.InternalNewClient(smserver, ns)
+	client, err := irpc.InternalNewClient(smserver, ns)
 	if err != nil {
 		t.Fatal(err)
 	}
 	defer client.Close()
 	serverCtx, _ := v23.SetPrincipal(ctx, pserver)
-	server, err := iipc.InternalNewServer(serverCtx, smserver, ns, nil, pserver)
+	server, err := irpc.InternalNewServer(serverCtx, smserver, ns, nil, pserver)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -193,7 +193,7 @@
 	hasLocalListener := len(spec.Addrs) > 0 && len(spec.Addrs[0].Address) != 0
 
 	name := "mountpoint/server/suffix"
-	makeCall := func(opts ...ipc.CallOpt) (string, error) {
+	makeCall := func(opts ...rpc.CallOpt) (string, error) {
 		ctx, _ := context.WithDeadline(ctx, time.Now().Add(5*time.Second))
 		// Let's fail fast so that the tests don't take as long to run.
 		call, err := client.StartCall(ctx, name, "Echo", []interface{}{"batman"}, opts...)
diff --git a/profiles/internal/ipc/test/signature_test.go b/profiles/internal/rpc/test/signature_test.go
similarity index 93%
rename from profiles/internal/ipc/test/signature_test.go
rename to profiles/internal/rpc/test/signature_test.go
index 781a307..b6fbf32 100644
--- a/profiles/internal/ipc/test/signature_test.go
+++ b/profiles/internal/rpc/test/signature_test.go
@@ -7,9 +7,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
-	"v.io/v23/ipc/reserved"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
+	"v.io/v23/rpc/reserved"
 	"v.io/v23/vdl"
 	"v.io/v23/vdlroot/signature"
 
@@ -34,14 +34,14 @@
 
 type sigImpl struct{}
 
-func (sigImpl) NonStreaming0(ipc.ServerCall) error                       { panic("X") }
-func (sigImpl) NonStreaming1(_ ipc.ServerCall, _ string) (int64, error)  { panic("X") }
+func (sigImpl) NonStreaming0(rpc.ServerCall) error                       { panic("X") }
+func (sigImpl) NonStreaming1(_ rpc.ServerCall, _ string) (int64, error)  { panic("X") }
 func (sigImpl) Streaming0(_ *streamStringBool) error                     { panic("X") }
 func (sigImpl) Streaming1(_ *streamStringBool, _ int64) (float64, error) { panic("X") }
 
-type streamStringBool struct{ ipc.StreamServerCall }
+type streamStringBool struct{ rpc.StreamServerCall }
 
-func (*streamStringBool) Init(ipc.StreamServerCall) { panic("X") }
+func (*streamStringBool) Init(rpc.StreamServerCall) { panic("X") }
 func (*streamStringBool) RecvStream() interface {
 	Advance() bool
 	Value() string
diff --git a/profiles/internal/ipc/test/simple_test.go b/profiles/internal/rpc/test/simple_test.go
similarity index 85%
rename from profiles/internal/ipc/test/simple_test.go
rename to profiles/internal/rpc/test/simple_test.go
index ad75cb7..771e0e4 100644
--- a/profiles/internal/ipc/test/simple_test.go
+++ b/profiles/internal/rpc/test/simple_test.go
@@ -6,14 +6,14 @@
 	"time"
 
 	"v.io/v23"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 )
 
 type simple struct {
 	done <-chan struct{}
 }
 
-func (s *simple) Sleep(call ipc.ServerCall) error {
+func (s *simple) Sleep(call rpc.ServerCall) error {
 	select {
 	case <-s.done:
 	case <-time.After(time.Hour):
@@ -21,11 +21,11 @@
 	return nil
 }
 
-func (s *simple) Ping(call ipc.ServerCall) (string, error) {
+func (s *simple) Ping(call rpc.ServerCall) (string, error) {
 	return "pong", nil
 }
 
-func (s *simple) Source(call ipc.StreamServerCall, start int) error {
+func (s *simple) Source(call rpc.StreamServerCall, start int) error {
 	i := start
 	backoff := 25 * time.Millisecond
 	for {
@@ -40,7 +40,7 @@
 	}
 }
 
-func (s *simple) Sink(call ipc.StreamServerCall) (int, error) {
+func (s *simple) Sink(call rpc.StreamServerCall) (int, error) {
 	i := 0
 	for {
 		if err := call.Recv(&i); err != nil {
@@ -52,7 +52,7 @@
 	}
 }
 
-func (s *simple) Inc(call ipc.StreamServerCall, inc int) (int, error) {
+func (s *simple) Inc(call rpc.StreamServerCall, inc int) (int, error) {
 	i := 0
 	for {
 		if err := call.Recv(&i); err != nil {
diff --git a/profiles/internal/ipc/test/v23_internal_test.go b/profiles/internal/rpc/test/v23_internal_test.go
similarity index 100%
rename from profiles/internal/ipc/test/v23_internal_test.go
rename to profiles/internal/rpc/test/v23_internal_test.go
diff --git a/profiles/internal/ipc/testutil_test.go b/profiles/internal/rpc/testutil_test.go
similarity index 99%
rename from profiles/internal/ipc/testutil_test.go
rename to profiles/internal/rpc/testutil_test.go
index 0648593..13f1fa7 100644
--- a/profiles/internal/ipc/testutil_test.go
+++ b/profiles/internal/rpc/testutil_test.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"reflect"
diff --git a/profiles/internal/ipc/timer.go b/profiles/internal/rpc/timer.go
similarity index 97%
rename from profiles/internal/ipc/timer.go
rename to profiles/internal/rpc/timer.go
index fa148d4..0fb0c88 100644
--- a/profiles/internal/ipc/timer.go
+++ b/profiles/internal/rpc/timer.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"time"
diff --git a/profiles/internal/ipc/timer_test.go b/profiles/internal/rpc/timer_test.go
similarity index 97%
rename from profiles/internal/ipc/timer_test.go
rename to profiles/internal/rpc/timer_test.go
index e7345d6..d71c199 100644
--- a/profiles/internal/ipc/timer_test.go
+++ b/profiles/internal/rpc/timer_test.go
@@ -1,4 +1,4 @@
-package ipc
+package rpc
 
 import (
 	"testing"
diff --git a/profiles/internal/ipc/v23_test.go b/profiles/internal/rpc/v23_test.go
similarity index 97%
rename from profiles/internal/ipc/v23_test.go
rename to profiles/internal/rpc/v23_test.go
index 0efc85a..b874fc4 100644
--- a/profiles/internal/ipc/v23_test.go
+++ b/profiles/internal/rpc/v23_test.go
@@ -4,7 +4,7 @@
 
 // This file was auto-generated via go generate.
 // DO NOT UPDATE MANUALLY
-package ipc_test
+package rpc_test
 
 import "fmt"
 import "testing"
diff --git a/profiles/internal/ipc/version/version.go b/profiles/internal/rpc/version/version.go
similarity index 76%
rename from profiles/internal/ipc/version/version.go
rename to profiles/internal/rpc/version/version.go
index c36a0df..fd13920 100644
--- a/profiles/internal/ipc/version/version.go
+++ b/profiles/internal/rpc/version/version.go
@@ -5,13 +5,13 @@
 
 	inaming "v.io/x/ref/profiles/internal/naming"
 
-	"v.io/v23/ipc/version"
 	"v.io/v23/naming"
+	"v.io/v23/rpc/version"
 )
 
-// Range represents a range of IPC versions.
+// Range represents a range of RPC versions.
 type Range struct {
-	Min, Max version.IPCVersion
+	Min, Max version.RPCVersion
 }
 
 var (
@@ -21,7 +21,7 @@
 	// change that's not both forward and backward compatible.
 	// Min should be incremented whenever we want to remove
 	// support for old protocol versions.
-	SupportedRange = &Range{Min: version.IPCVersion5, Max: version.IPCVersion7}
+	SupportedRange = &Range{Min: version.RPCVersion5, Max: version.RPCVersion7}
 
 	// Export the methods on supportedRange.
 	Endpoint           = SupportedRange.Endpoint
@@ -31,7 +31,7 @@
 )
 
 var (
-	NoCompatibleVersionErr = fmt.Errorf("No compatible IPC version available")
+	NoCompatibleVersionErr = fmt.Errorf("No compatible RPC version available")
 	UnknownVersionErr      = fmt.Errorf("There was not enough information to determine a version.")
 )
 
@@ -40,15 +40,15 @@
 	return err == NoCompatibleVersionErr || err == UnknownVersionErr
 }
 
-// Endpoint returns an endpoint with the Min/MaxIPCVersion properly filled in
+// Endpoint returns an endpoint with the Min/MaxRPCVersion properly filled in
 // to match this implementations supported protocol versions.
 func (r *Range) Endpoint(protocol, address string, rid naming.RoutingID) *inaming.Endpoint {
 	return &inaming.Endpoint{
 		Protocol:      protocol,
 		Address:       address,
 		RID:           rid,
-		MinIPCVersion: r.Min,
-		MaxIPCVersion: r.Max,
+		MinRPCVersion: r.Min,
+		MaxRPCVersion: r.Max,
 	}
 }
 
@@ -60,8 +60,8 @@
 // For example:
 //   a == (2, 4) and b == (Unknown, Unknown), intersect(a,b) == (2, 4)
 //   a == (2, Unknown) and b == (3, 4), intersect(a,b) == (3, 4)
-func intersectRanges(amin, amax, bmin, bmax version.IPCVersion) (min, max version.IPCVersion, err error) {
-	u := version.UnknownIPCVersion
+func intersectRanges(amin, amax, bmin, bmax version.RPCVersion) (min, max version.RPCVersion, err error) {
+	u := version.UnknownRPCVersion
 
 	min = amin
 	if min == u || (bmin != u && bmin > min) {
@@ -80,8 +80,8 @@
 	return
 }
 
-func intersectEndpoints(a, b *inaming.Endpoint) (min, max version.IPCVersion, err error) {
-	return intersectRanges(a.MinIPCVersion, a.MaxIPCVersion, b.MinIPCVersion, b.MaxIPCVersion)
+func intersectEndpoints(a, b *inaming.Endpoint) (min, max version.RPCVersion, err error) {
+	return intersectRanges(a.MinRPCVersion, a.MaxRPCVersion, b.MinRPCVersion, b.MaxRPCVersion)
 }
 
 func (r1 *Range) Intersect(r2 *Range) (*Range, error) {
@@ -93,7 +93,7 @@
 	return r, nil
 }
 
-// ProxiedEndpoint returns an endpoint with the Min/MaxIPCVersion properly filled in
+// ProxiedEndpoint returns an endpoint with the Min/MaxRPCVersion properly filled in
 // to match the intersection of capabilities of this process and the proxy.
 func (r *Range) ProxiedEndpoint(rid naming.RoutingID, proxy naming.Endpoint) (*inaming.Endpoint, error) {
 	proxyEP, ok := proxy.(*inaming.Endpoint)
@@ -105,24 +105,24 @@
 		Protocol:      proxyEP.Protocol,
 		Address:       proxyEP.Address,
 		RID:           rid,
-		MinIPCVersion: r.Min,
-		MaxIPCVersion: r.Max,
+		MinRPCVersion: r.Min,
+		MaxRPCVersion: r.Max,
 	}
 
 	// This is the endpoint we are going to advertise.  It should only claim to support versions in
 	// the intersection of those we support and those the proxy supports.
 	var err error
-	ep.MinIPCVersion, ep.MaxIPCVersion, err = intersectEndpoints(ep, proxyEP)
+	ep.MinRPCVersion, ep.MaxRPCVersion, err = intersectEndpoints(ep, proxyEP)
 	if err != nil {
 		return nil, fmt.Errorf("attempting to register with incompatible proxy: %s", proxy)
 	}
 	return ep, nil
 }
 
-// CommonVersion determines which version of the IPC protocol should be used
+// CommonVersion determines which version of the RPC protocol should be used
 // between two endpoints.  Returns an error if the resulting version is incompatible
-// with this IPC implementation.
-func (r *Range) CommonVersion(a, b naming.Endpoint) (version.IPCVersion, error) {
+// with this RPC implementation.
+func (r *Range) CommonVersion(a, b naming.Endpoint) (version.RPCVersion, error) {
 	aEP, ok := a.(*inaming.Endpoint)
 	if !ok {
 		return 0, fmt.Errorf("Unrecognized naming.Endpoint type: %T", a)
@@ -138,15 +138,15 @@
 	}
 
 	// We want to use the maximum common version of the protocol.  We just
-	// need to make sure that it is supported by this IPC implementation.
+	// need to make sure that it is supported by this RPC implementation.
 	if max < r.Min || max > r.Max {
-		return version.UnknownIPCVersion, NoCompatibleVersionErr
+		return version.UnknownRPCVersion, NoCompatibleVersionErr
 	}
 	return max, nil
 }
 
 // CheckCompatibility returns an error if the given endpoint is incompatible
-// with this IPC implementation.  It returns nil otherwise.
+// with this RPC implementation.  It returns nil otherwise.
 func (r *Range) CheckCompatibility(remote naming.Endpoint) error {
 	remoteEP, ok := remote.(*inaming.Endpoint)
 	if !ok {
@@ -154,7 +154,7 @@
 	}
 
 	_, _, err := intersectRanges(r.Min, r.Max,
-		remoteEP.MinIPCVersion, remoteEP.MaxIPCVersion)
+		remoteEP.MinRPCVersion, remoteEP.MaxRPCVersion)
 
 	return err
 }
diff --git a/profiles/internal/ipc/version/version_test.go b/profiles/internal/rpc/version/version_test.go
similarity index 75%
rename from profiles/internal/ipc/version/version_test.go
rename to profiles/internal/rpc/version/version_test.go
index ae20e20..668cf0a 100644
--- a/profiles/internal/ipc/version/version_test.go
+++ b/profiles/internal/rpc/version/version_test.go
@@ -5,17 +5,17 @@
 
 	inaming "v.io/x/ref/profiles/internal/naming"
 
-	"v.io/v23/ipc/version"
 	"v.io/v23/naming"
+	"v.io/v23/rpc/version"
 )
 
 func TestCommonVersion(t *testing.T) {
 	r := &Range{Min: 1, Max: 3}
 
 	type testCase struct {
-		localMin, localMax   version.IPCVersion
-		remoteMin, remoteMax version.IPCVersion
-		expectedVer          version.IPCVersion
+		localMin, localMax   version.RPCVersion
+		remoteMin, remoteMax version.RPCVersion
+		expectedVer          version.RPCVersion
 		expectedErr          error
 	}
 	tests := []testCase{
@@ -30,12 +30,12 @@
 	}
 	for _, tc := range tests {
 		local := &inaming.Endpoint{
-			MinIPCVersion: tc.localMin,
-			MaxIPCVersion: tc.localMax,
+			MinRPCVersion: tc.localMin,
+			MaxRPCVersion: tc.localMax,
 		}
 		remote := &inaming.Endpoint{
-			MinIPCVersion: tc.remoteMin,
-			MaxIPCVersion: tc.remoteMax,
+			MinRPCVersion: tc.remoteMin,
+			MaxRPCVersion: tc.remoteMax,
 		}
 		if ver, err := r.CommonVersion(local, remote); ver != tc.expectedVer || err != tc.expectedErr {
 			t.Errorf("Unexpected result for local: %v, remote: %v.  Got (%d, %v) wanted (%d, %v)",
@@ -46,9 +46,9 @@
 
 func TestProxiedEndpoint(t *testing.T) {
 	type testCase struct {
-		supportMin, supportMax version.IPCVersion
-		proxyMin, proxyMax     version.IPCVersion
-		outMin, outMax         version.IPCVersion
+		supportMin, supportMax version.RPCVersion
+		proxyMin, proxyMax     version.RPCVersion
+		outMin, outMax         version.RPCVersion
 		expectError            bool
 	}
 	tests := []testCase{
@@ -65,8 +65,8 @@
 	for _, tc := range tests {
 		r := &Range{Min: tc.supportMin, Max: tc.supportMax}
 		proxy := &inaming.Endpoint{
-			MinIPCVersion: tc.proxyMin,
-			MaxIPCVersion: tc.proxyMax,
+			MinRPCVersion: tc.proxyMin,
+			MaxRPCVersion: tc.proxyMax,
 		}
 		if ep, err := r.ProxiedEndpoint(rid, proxy); err != nil {
 			if !tc.expectError {
@@ -77,9 +77,9 @@
 				t.Errorf("Expected Error, but got result for test case %+v", tc)
 				continue
 			}
-			if ep.MinIPCVersion != tc.outMin || ep.MaxIPCVersion != tc.outMax {
+			if ep.MinRPCVersion != tc.outMin || ep.MaxRPCVersion != tc.outMax {
 				t.Errorf("Unexpected range for case %+v.  Got (%d, %d) want (%d, %d)",
-					tc, ep.MinIPCVersion, ep.MaxIPCVersion, tc.outMin, tc.outMax)
+					tc, ep.MinRPCVersion, ep.MaxRPCVersion, tc.outMin, tc.outMax)
 			}
 		}
 	}
@@ -87,8 +87,8 @@
 
 func TestCheckCompatibility(t *testing.T) {
 	type testCase struct {
-		supportMin, supportMax version.IPCVersion
-		remoteMin, remoteMax   version.IPCVersion
+		supportMin, supportMax version.RPCVersion
+		remoteMin, remoteMax   version.RPCVersion
 		expectedError          error
 	}
 	tests := []testCase{
@@ -103,8 +103,8 @@
 	for _, tc := range tests {
 		r := &Range{Min: tc.supportMin, Max: tc.supportMax}
 		remote := &inaming.Endpoint{
-			MinIPCVersion: tc.remoteMin,
-			MaxIPCVersion: tc.remoteMax,
+			MinRPCVersion: tc.remoteMin,
+			MaxRPCVersion: tc.remoteMax,
 		}
 		if err := r.CheckCompatibility(remote); err != tc.expectedError {
 			t.Errorf("Unexpected error for case %+v: got %v, wanted %v",
diff --git a/profiles/internal/rt/ipc_test.go b/profiles/internal/rt/ipc_test.go
index 9ecff2c..e35ee5b 100644
--- a/profiles/internal/rt/ipc_test.go
+++ b/profiles/internal/rt/ipc_test.go
@@ -10,14 +10,14 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 
 	"v.io/v23/verror"
 	_ "v.io/x/ref/profiles"
-	"v.io/x/ref/profiles/internal/ipc/stream/vc"
+	"v.io/x/ref/profiles/internal/rpc/stream/vc"
 	"v.io/x/ref/test"
 	tsecurity "v.io/x/ref/test/security"
 )
@@ -26,12 +26,12 @@
 
 type testService struct{}
 
-func (testService) EchoBlessings(call ipc.ServerCall) ([]string, error) {
+func (testService) EchoBlessings(call rpc.ServerCall) ([]string, error) {
 	b, _ := security.BlessingNames(call.Context(), security.CallSideRemote)
 	return b, nil
 }
 
-func (testService) Foo(ipc.ServerCall) error {
+func (testService) Foo(rpc.ServerCall) error {
 	return nil
 }
 
@@ -79,7 +79,7 @@
 	return tpc
 }
 
-func startServer(ctx *context.T, s interface{}, opts ...ipc.ServerOpt) (ipc.Server, string, error) {
+func startServer(ctx *context.T, s interface{}, opts ...rpc.ServerOpt) (rpc.Server, string, error) {
 	server, err := v23.NewServer(ctx, opts...)
 	if err != nil {
 		return nil, "", err
@@ -199,11 +199,11 @@
 		bopt = options.ServerBlessings{union(b1, b2)}
 
 		tests = []struct {
-			opts      []ipc.ServerOpt
+			opts      []rpc.ServerOpt
 			blessings []string
 		}{
 			{nil, []string{"default"}},
-			{[]ipc.ServerOpt{bopt}, []string{"dev.v.io/users/foo@bar.com/devices/phone/applications/app", "otherblessing"}},
+			{[]rpc.ServerOpt{bopt}, []string{"dev.v.io/users/foo@bar.com/devices/phone/applications/app", "otherblessing"}},
 		}
 	)
 	if err := p.AddToRoots(bopt.Blessings); err != nil {
@@ -259,7 +259,7 @@
 	mu     sync.Mutex
 }
 
-func (ds *dischargeService) Discharge(call ipc.StreamServerCall, cav security.Caveat, _ security.DischargeImpetus) (security.Discharge, error) {
+func (ds *dischargeService) Discharge(call rpc.StreamServerCall, cav security.Caveat, _ security.DischargeImpetus) (security.Discharge, error) {
 	tp := cav.ThirdPartyDetails()
 	if tp == nil {
 		return security.Discharge{}, fmt.Errorf("discharger: not a third party caveat (%v)", cav)
diff --git a/profiles/internal/rt/mgmt.go b/profiles/internal/rt/mgmt.go
index a22f56b..6e67e91 100644
--- a/profiles/internal/rt/mgmt.go
+++ b/profiles/internal/rt/mgmt.go
@@ -6,10 +6,10 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/mgmt"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 
 	"v.io/x/ref/lib/exec"
 )
@@ -37,7 +37,7 @@
 	if err != nil {
 		return err
 	}
-	var serverOpts []ipc.ServerOpt
+	var serverOpts []rpc.ServerOpt
 	parentPeerPattern, err := handle.Config.Get(mgmt.ParentBlessingConfigKey)
 	if err == nil && parentPeerPattern != "" {
 		// Grab the blessing from our blessing store that the parent
@@ -65,7 +65,7 @@
 	return handle.SetReady()
 }
 
-func getListenSpec(handle *exec.ChildHandle) (*ipc.ListenSpec, error) {
+func getListenSpec(handle *exec.ChildHandle) (*rpc.ListenSpec, error) {
 	protocol, err := handle.Config.Get(mgmt.ProtocolConfigKey)
 	if err != nil {
 		return nil, err
@@ -81,7 +81,7 @@
 	if address == "" {
 		return nil, fmt.Errorf("%v is not set", mgmt.AddressConfigKey)
 	}
-	return &ipc.ListenSpec{Addrs: ipc.ListenAddrs{{protocol, address}}}, nil
+	return &rpc.ListenSpec{Addrs: rpc.ListenAddrs{{protocol, address}}}, nil
 }
 
 func (rt *Runtime) callbackToParent(ctx *context.T, parentName, myName string) error {
diff --git a/profiles/internal/rt/mgmt_test.go b/profiles/internal/rt/mgmt_test.go
index 8f437f8..9a83855 100644
--- a/profiles/internal/rt/mgmt_test.go
+++ b/profiles/internal/rt/mgmt_test.go
@@ -11,9 +11,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/mgmt"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/services/mgmt/appcycle"
 
 	_ "v.io/x/ref/profiles"
@@ -266,7 +266,7 @@
 	ch chan<- string
 }
 
-func (c *configServer) Set(_ ipc.ServerCall, key, value string) error {
+func (c *configServer) Set(_ rpc.ServerCall, key, value string) error {
 	if key != mgmt.AppCycleManagerConfigKey {
 		return fmt.Errorf("Unexpected key: %v", key)
 	}
@@ -275,7 +275,7 @@
 
 }
 
-func createConfigServer(t *testing.T, ctx *context.T) (ipc.Server, string, <-chan string) {
+func createConfigServer(t *testing.T, ctx *context.T) (rpc.Server, string, <-chan string) {
 	server, err := v23.NewServer(ctx)
 	if err != nil {
 		t.Fatalf("Got error: %v", err)
diff --git a/profiles/internal/rt/runtime.go b/profiles/internal/rt/runtime.go
index 6d1582b..07dbd78 100644
--- a/profiles/internal/rt/runtime.go
+++ b/profiles/internal/rt/runtime.go
@@ -12,10 +12,10 @@
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/i18n"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	ns "v.io/v23/naming/ns"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/v23/vtrace"
@@ -25,12 +25,12 @@
 	"v.io/x/ref/lib/flags/buildinfo"
 	"v.io/x/ref/lib/stats"
 	_ "v.io/x/ref/lib/stats/sysstats"
-	iipc "v.io/x/ref/profiles/internal/ipc"
-	"v.io/x/ref/profiles/internal/ipc/stream"
-	imanager "v.io/x/ref/profiles/internal/ipc/stream/manager"
 	"v.io/x/ref/profiles/internal/lib/dependency"
 	inaming "v.io/x/ref/profiles/internal/naming"
 	"v.io/x/ref/profiles/internal/naming/namespace"
+	irpc "v.io/x/ref/profiles/internal/rpc"
+	"v.io/x/ref/profiles/internal/rpc/stream"
+	imanager "v.io/x/ref/profiles/internal/rpc/stream/manager"
 	ivtrace "v.io/x/ref/profiles/internal/vtrace"
 )
 
@@ -59,12 +59,12 @@
 }
 
 type reservedNameDispatcher struct {
-	dispatcher ipc.Dispatcher
-	opts       []ipc.ServerOpt
+	dispatcher rpc.Dispatcher
+	opts       []rpc.ServerOpt
 }
 
-func Init(ctx *context.T, appCycle v23.AppCycle, protocols []string, listenSpec *ipc.ListenSpec, flags flags.RuntimeFlags,
-	reservedDispatcher ipc.Dispatcher, dispatcherOpts ...ipc.ServerOpt) (*Runtime, *context.T, v23.Shutdown, error) {
+func Init(ctx *context.T, appCycle v23.AppCycle, protocols []string, listenSpec *rpc.ListenSpec, flags flags.RuntimeFlags,
+	reservedDispatcher rpc.Dispatcher, dispatcherOpts ...rpc.ServerOpt) (*Runtime, *context.T, v23.Shutdown, error) {
 	r := &Runtime{deps: dependency.NewGraph()}
 
 	err := vlog.ConfigureLibraryLoggerFromFlags()
@@ -226,30 +226,30 @@
 	return inaming.NewEndpoint(ep)
 }
 
-func (r *Runtime) NewServer(ctx *context.T, opts ...ipc.ServerOpt) (ipc.Server, error) {
+func (r *Runtime) NewServer(ctx *context.T, opts ...rpc.ServerOpt) (rpc.Server, error) {
 	// Create a new RoutingID (and StreamManager) for each server.
 	sm, err := newStreamManager()
 	if err != nil {
-		return nil, fmt.Errorf("failed to create ipc/stream/Manager: %v", err)
+		return nil, fmt.Errorf("failed to create rpc/stream/Manager: %v", err)
 	}
 
 	ns, _ := ctx.Value(namespaceKey).(ns.Namespace)
 	principal, _ := ctx.Value(principalKey).(security.Principal)
-	client, _ := ctx.Value(clientKey).(ipc.Client)
+	client, _ := ctx.Value(clientKey).(rpc.Client)
 
-	otherOpts := append([]ipc.ServerOpt{}, opts...)
+	otherOpts := append([]rpc.ServerOpt{}, opts...)
 	if reserved, ok := ctx.Value(reservedNameKey).(*reservedNameDispatcher); ok {
-		otherOpts = append(otherOpts, iipc.ReservedNameDispatcher{reserved.dispatcher})
+		otherOpts = append(otherOpts, irpc.ReservedNameDispatcher{reserved.dispatcher})
 		otherOpts = append(otherOpts, reserved.opts...)
 	}
 	if protocols, ok := ctx.Value(protocolsKey).([]string); ok {
-		otherOpts = append(otherOpts, iipc.PreferredServerResolveProtocols(protocols))
+		otherOpts = append(otherOpts, irpc.PreferredServerResolveProtocols(protocols))
 	}
 
 	if !hasServerBlessingsOpt(opts) && principal != nil {
 		otherOpts = append(otherOpts, options.ServerBlessings{principal.BlessingStore().Default()})
 	}
-	server, err := iipc.InternalNewServer(ctx, sm, ns, r.GetClient(ctx), principal, otherOpts...)
+	server, err := irpc.InternalNewServer(ctx, sm, ns, r.GetClient(ctx), principal, otherOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -269,7 +269,7 @@
 	return server, nil
 }
 
-func hasServerBlessingsOpt(opts []ipc.ServerOpt) bool {
+func hasServerBlessingsOpt(opts []rpc.ServerOpt) bool {
 	for _, o := range opts {
 		if _, ok := o.(options.ServerBlessings); ok {
 			return true
@@ -352,8 +352,8 @@
 	return p
 }
 
-func (r *Runtime) SetNewClient(ctx *context.T, opts ...ipc.ClientOpt) (*context.T, ipc.Client, error) {
-	otherOpts := append([]ipc.ClientOpt{}, opts...)
+func (r *Runtime) SetNewClient(ctx *context.T, opts ...rpc.ClientOpt) (*context.T, rpc.Client, error) {
+	otherOpts := append([]rpc.ClientOpt{}, opts...)
 
 	p, _ := ctx.Value(principalKey).(security.Principal)
 	sm, _ := ctx.Value(streamManagerKey).(stream.Manager)
@@ -361,10 +361,10 @@
 	otherOpts = append(otherOpts, &imanager.DialTimeout{5 * time.Minute})
 
 	if protocols, ok := ctx.Value(protocolsKey).([]string); ok {
-		otherOpts = append(otherOpts, iipc.PreferredProtocols(protocols))
+		otherOpts = append(otherOpts, irpc.PreferredProtocols(protocols))
 	}
 
-	client, err := iipc.InternalNewClient(sm, ns, otherOpts...)
+	client, err := irpc.InternalNewClient(sm, ns, otherOpts...)
 	if err != nil {
 		return ctx, nil, err
 	}
@@ -379,8 +379,8 @@
 	return newctx, client, err
 }
 
-func (*Runtime) GetClient(ctx *context.T) ipc.Client {
-	cl, _ := ctx.Value(clientKey).(ipc.Client)
+func (*Runtime) GetClient(ctx *context.T) rpc.Client {
+	cl, _ := ctx.Value(clientKey).(rpc.Client)
 	return cl
 }
 
@@ -422,8 +422,8 @@
 	return appCycle
 }
 
-func (*Runtime) GetListenSpec(ctx *context.T) ipc.ListenSpec {
-	listenSpec, _ := ctx.Value(listenSpecKey).(*ipc.ListenSpec)
+func (*Runtime) GetListenSpec(ctx *context.T) rpc.ListenSpec {
+	listenSpec, _ := ctx.Value(listenSpecKey).(*rpc.ListenSpec)
 	return *listenSpec
 }
 
diff --git a/profiles/internal/rt/security.go b/profiles/internal/rt/security.go
index 3459f68..53abebc 100644
--- a/profiles/internal/rt/security.go
+++ b/profiles/internal/rt/security.go
@@ -8,8 +8,8 @@
 	"syscall"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/mgmt"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 
 	"v.io/x/ref/lib/exec"
@@ -17,7 +17,7 @@
 	"v.io/x/ref/security/agent"
 )
 
-func initSecurity(ctx *context.T, credentials string, client ipc.Client) (security.Principal, error) {
+func initSecurity(ctx *context.T, credentials string, client rpc.Client) (security.Principal, error) {
 	principal, err := setupPrincipal(ctx, credentials, client)
 	if err != nil {
 		return nil, err
@@ -26,7 +26,7 @@
 	return principal, nil
 }
 
-func setupPrincipal(ctx *context.T, credentials string, client ipc.Client) (security.Principal, error) {
+func setupPrincipal(ctx *context.T, credentials string, client rpc.Client) (security.Principal, error) {
 	var err error
 	var principal security.Principal
 	if principal, _ = ctx.Value(principalKey).(security.Principal); principal != nil {
@@ -101,7 +101,7 @@
 	return fmt.Sprintf("%s-%d", name, os.Getpid())
 }
 
-func connectToAgent(ctx *context.T, fd int, client ipc.Client) (security.Principal, error) {
+func connectToAgent(ctx *context.T, fd int, client rpc.Client) (security.Principal, error) {
 	// Dup the fd, so we can create multiple runtimes.
 	syscall.ForkLock.Lock()
 	newfd, err := syscall.Dup(fd)
diff --git a/profiles/internal/rt/shutdown_servers_test.go b/profiles/internal/rt/shutdown_servers_test.go
index 3723552..676ddf6 100644
--- a/profiles/internal/rt/shutdown_servers_test.go
+++ b/profiles/internal/rt/shutdown_servers_test.go
@@ -13,7 +13,7 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 
 	"v.io/x/ref/lib/signals"
 	_ "v.io/x/ref/profiles"
@@ -28,10 +28,10 @@
 
 type dummy struct{}
 
-func (*dummy) Echo(ipc.ServerCall) error { return nil }
+func (*dummy) Echo(rpc.ServerCall) error { return nil }
 
 // makeServer sets up a simple dummy server.
-func makeServer(ctx *context.T) ipc.Server {
+func makeServer(ctx *context.T) rpc.Server {
 	server, err := v23.NewServer(ctx)
 	if err != nil {
 		vlog.Fatalf("r.NewServer error: %s", err)
diff --git a/profiles/internal/util.go b/profiles/internal/util.go
index 688c0a6..879a0b0 100644
--- a/profiles/internal/util.go
+++ b/profiles/internal/util.go
@@ -5,7 +5,7 @@
 	"os"
 	"strings"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 
 	"v.io/x/lib/netstate"
@@ -42,7 +42,7 @@
 // IPAddressChooser returns the preferred IP address, which is,
 // a public IPv4 address, then any non-loopback IPv4, then a public
 // IPv6 address and finally any non-loopback/link-local IPv6
-func IPAddressChooser(network string, addrs []ipc.Address) ([]ipc.Address, error) {
+func IPAddressChooser(network string, addrs []rpc.Address) ([]rpc.Address, error) {
 	if !netstate.IsIPProtocol(network) {
 		return nil, fmt.Errorf("can't support network protocol %q", network)
 	}
diff --git a/profiles/internal/vtrace/vtrace.go b/profiles/internal/vtrace/vtrace.go
index c4ead0b..e99ea95 100644
--- a/profiles/internal/vtrace/vtrace.go
+++ b/profiles/internal/vtrace/vtrace.go
@@ -1,6 +1,6 @@
 // Package vtrace implements the Trace and Span interfaces in veyron2/vtrace.
 // We also provide internal utilities for migrating trace information across
-// IPC calls.
+// RPC calls.
 package vtrace
 
 import (
diff --git a/profiles/internal/vtrace/vtrace_test.go b/profiles/internal/vtrace/vtrace_test.go
index 5c8849d..822fdde 100644
--- a/profiles/internal/vtrace/vtrace_test.go
+++ b/profiles/internal/vtrace/vtrace_test.go
@@ -7,16 +7,16 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/naming/ns"
+	"v.io/v23/rpc"
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
 
 	_ "v.io/x/ref/profiles"
-	iipc "v.io/x/ref/profiles/internal/ipc"
-	"v.io/x/ref/profiles/internal/ipc/stream"
-	"v.io/x/ref/profiles/internal/ipc/stream/manager"
+	irpc "v.io/x/ref/profiles/internal/rpc"
+	"v.io/x/ref/profiles/internal/rpc/stream"
+	"v.io/x/ref/profiles/internal/rpc/stream/manager"
 	tnaming "v.io/x/ref/profiles/internal/testing/mocks/naming"
 	"v.io/x/ref/test"
 	tsecurity "v.io/x/ref/test/security"
@@ -55,12 +55,12 @@
 	forceCollect bool
 }
 
-func (c *testServer) Run(call ipc.ServerCall) error {
+func (c *testServer) Run(call rpc.ServerCall) error {
 	if c.forceCollect {
 		vtrace.ForceCollect(call.Context())
 	}
 
-	client, err := iipc.InternalNewClient(c.sm, c.ns)
+	client, err := irpc.InternalNewClient(c.sm, c.ns)
 	if err != nil {
 		vlog.Error(err)
 		return err
@@ -69,7 +69,7 @@
 	vtrace.GetSpan(call.Context()).Annotate(c.name + "-begin")
 
 	if c.child != "" {
-		var clientCall ipc.ClientCall
+		var clientCall rpc.ClientCall
 		if clientCall, err = client.StartCall(call.Context(), c.child, "Run", []interface{}{}); err != nil {
 			vlog.Error(err)
 			return err
@@ -86,11 +86,11 @@
 
 func makeTestServer(ctx *context.T, ns ns.Namespace, name, child string, forceCollect bool) (*testServer, error) {
 	sm := manager.InternalNew(naming.FixedRoutingID(0x111111111))
-	client, err := iipc.InternalNewClient(sm, ns)
+	client, err := irpc.InternalNewClient(sm, ns)
 	if err != nil {
 		return nil, err
 	}
-	s, err := iipc.InternalNewServer(ctx, sm, ns, client, tsecurity.NewPrincipal("test"))
+	s, err := irpc.InternalNewServer(ctx, sm, ns, client, tsecurity.NewPrincipal("test"))
 	if err != nil {
 		return nil, err
 	}
@@ -195,7 +195,7 @@
 	sm := manager.InternalNew(naming.FixedRoutingID(0x555555555))
 	ns := tnaming.NewSimpleNamespace()
 
-	client, err := iipc.InternalNewClient(sm, ns)
+	client, err := irpc.InternalNewClient(sm, ns)
 	if err != nil {
 		t.Error(err)
 	}
diff --git a/profiles/proxy.go b/profiles/proxy.go
index 42e5ef6..01115b3 100644
--- a/profiles/proxy.go
+++ b/profiles/proxy.go
@@ -4,7 +4,7 @@
 	"v.io/v23/context"
 	"v.io/v23/naming"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/proxy"
+	"v.io/x/ref/profiles/internal/rpc/stream/proxy"
 )
 
 // NewProxy creates a new Proxy that listens for network connections on the provided
diff --git a/profiles/roaming/proxy.go b/profiles/roaming/proxy.go
index cd87645..46abbd3 100644
--- a/profiles/roaming/proxy.go
+++ b/profiles/roaming/proxy.go
@@ -4,7 +4,7 @@
 	"v.io/v23/context"
 	"v.io/v23/naming"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/proxy"
+	"v.io/x/ref/profiles/internal/rpc/stream/proxy"
 )
 
 // NewProxy creates a new Proxy that listens for network connections on the provided
diff --git a/profiles/roaming/roaming_server.go b/profiles/roaming/roaming_server.go
index c029376..c481a1d 100644
--- a/profiles/roaming/roaming_server.go
+++ b/profiles/roaming/roaming_server.go
@@ -7,7 +7,7 @@
 	"log"
 
 	"v.io/v23"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 
 	_ "v.io/x/ref/profiles/roaming"
@@ -33,7 +33,7 @@
 	if err != nil {
 		log.Fatalf("unexpected error: %q", err)
 	}
-	watcher := make(chan ipc.NetworkChange, 1)
+	watcher := make(chan rpc.NetworkChange, 1)
 	server.WatchNetwork(watcher)
 
 	for {
@@ -53,6 +53,6 @@
 
 type dummy struct{}
 
-func (d *dummy) Echo(call ipc.ServerCall, arg string) (string, error) {
+func (d *dummy) Echo(call rpc.ServerCall, arg string) (string, error) {
 	return arg, nil
 }
diff --git a/profiles/roaming/roaminginit.go b/profiles/roaming/roaminginit.go
index e43f512..a708708 100644
--- a/profiles/roaming/roaminginit.go
+++ b/profiles/roaming/roaminginit.go
@@ -6,7 +6,7 @@
 // Google Compute Engine.
 //
 // The config.Publisher mechanism is used for communicating networking
-// settings to the ipc.Server implementation of the runtime and publishes
+// settings to the rpc.Server implementation of the runtime and publishes
 // the Settings it expects.
 package roaming
 
@@ -16,18 +16,18 @@
 	"v.io/v23"
 	"v.io/v23/config"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 
 	"v.io/x/lib/netconfig"
 	"v.io/x/lib/netstate"
 	"v.io/x/ref/lib/flags"
 	"v.io/x/ref/profiles/internal"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/tcp"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/ws"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/wsh"
 	"v.io/x/ref/profiles/internal/lib/appcycle"
 	"v.io/x/ref/profiles/internal/lib/websocket"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/tcp"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/ws"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/wsh"
 	grt "v.io/x/ref/profiles/internal/rt"
 	"v.io/x/ref/services/mgmt/debug"
 
@@ -43,7 +43,7 @@
 
 func init() {
 	v23.RegisterProfileInit(Init)
-	ipc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener)
+	rpc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener)
 	commonFlags = flags.CreateAndRegister(flag.CommandLine, flags.Runtime, flags.Listen)
 }
 
@@ -53,8 +53,8 @@
 	}
 
 	lf := commonFlags.ListenFlags()
-	listenSpec := ipc.ListenSpec{
-		Addrs: ipc.ListenAddrs(lf.Addrs),
+	listenSpec := rpc.ListenSpec{
+		Addrs: rpc.ListenAddrs(lf.Addrs),
 		Proxy: lf.ListenProxy,
 	}
 	reservedDispatcher := debug.NewDispatcher(vlog.Log.LogDir, sflag.NewAuthorizerOrDie())
@@ -65,8 +65,8 @@
 	// 1:1 NAT configuration.
 	if !internal.HasPublicIP(vlog.Log) {
 		if addr := internal.GCEPublicAddress(vlog.Log); addr != nil {
-			listenSpec.AddressChooser = func(string, []ipc.Address) ([]ipc.Address, error) {
-				return []ipc.Address{&netstate.AddrIfc{addr, "nat", nil}}, nil
+			listenSpec.AddressChooser = func(string, []rpc.Address) ([]rpc.Address, error) {
+				return []rpc.Address{&netstate.AddrIfc{addr, "nat", nil}}, nil
 			}
 			runtime, ctx, shutdown, err := grt.Init(ctx, ac, nil, &listenSpec, commonFlags.RuntimeFlags(), reservedDispatcher)
 			if err != nil {
@@ -163,12 +163,12 @@
 			}
 			if len(removed) > 0 {
 				vlog.VI(2).Infof("Sending removed: %s", removed)
-				ch <- ipc.NewRmAddrsSetting(removed)
+				ch <- rpc.NewRmAddrsSetting(removed)
 			}
 			// We will always send the best currently available address
 			if chosen, err := listenSpec.AddressChooser(listenSpec.Addrs[0].Protocol, cur); err == nil && chosen != nil {
 				vlog.VI(2).Infof("Sending added and chosen: %s", chosen)
-				ch <- ipc.NewAddAddrsSetting(chosen)
+				ch <- rpc.NewAddAddrsSetting(chosen)
 			} else {
 				vlog.VI(2).Infof("Ignoring added %s", added)
 			}
diff --git a/profiles/static/proxy.go b/profiles/static/proxy.go
index de58032..f3f9300 100644
--- a/profiles/static/proxy.go
+++ b/profiles/static/proxy.go
@@ -4,7 +4,7 @@
 	"v.io/v23/context"
 	"v.io/v23/naming"
 
-	"v.io/x/ref/profiles/internal/ipc/stream/proxy"
+	"v.io/x/ref/profiles/internal/rpc/stream/proxy"
 )
 
 // NewProxy creates a new Proxy that listens for network connections on the provided
diff --git a/profiles/static/staticinit.go b/profiles/static/staticinit.go
index b94f6ff..1224fa2 100644
--- a/profiles/static/staticinit.go
+++ b/profiles/static/staticinit.go
@@ -5,17 +5,17 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 
 	"v.io/x/lib/netstate"
 	"v.io/x/ref/lib/flags"
 	"v.io/x/ref/profiles/internal"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/tcp"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/ws"
-	_ "v.io/x/ref/profiles/internal/ipc/protocols/wsh"
 	"v.io/x/ref/profiles/internal/lib/appcycle"
 	"v.io/x/ref/profiles/internal/lib/websocket"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/tcp"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/ws"
+	_ "v.io/x/ref/profiles/internal/rpc/protocols/wsh"
 	grt "v.io/x/ref/profiles/internal/rt"
 	"v.io/x/ref/services/mgmt/debug"
 
@@ -27,7 +27,7 @@
 
 func init() {
 	v23.RegisterProfileInit(Init)
-	ipc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener)
+	rpc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener)
 	commonFlags = flags.CreateAndRegister(flag.CommandLine, flags.Runtime, flags.Listen)
 }
 
@@ -37,8 +37,8 @@
 	}
 
 	lf := commonFlags.ListenFlags()
-	listenSpec := ipc.ListenSpec{
-		Addrs: ipc.ListenAddrs(lf.Addrs),
+	listenSpec := rpc.ListenSpec{
+		Addrs: rpc.ListenAddrs(lf.Addrs),
 		Proxy: lf.ListenProxy,
 	}
 	reservedDispatcher := debug.NewDispatcher(vlog.Log.LogDir, sflag.NewAuthorizerOrDie())
@@ -49,8 +49,8 @@
 	// configuration. GCEPublicAddress returns a non-nil addr if we are running on GCE.
 	if !internal.HasPublicIP(vlog.Log) {
 		if addr := internal.GCEPublicAddress(vlog.Log); addr != nil {
-			listenSpec.AddressChooser = func(string, []ipc.Address) ([]ipc.Address, error) {
-				return []ipc.Address{&netstate.AddrIfc{addr, "nat", nil}}, nil
+			listenSpec.AddressChooser = func(string, []rpc.Address) ([]rpc.Address, error) {
+				return []rpc.Address{&netstate.AddrIfc{addr, "nat", nil}}, nil
 			}
 			runtime, ctx, shutdown, err := grt.Init(ctx, ac, nil, &listenSpec, commonFlags.RuntimeFlags(), reservedDispatcher)
 			if err != nil {
diff --git a/security/agent/cache/cache.go b/security/agent/cache/cache.go
index 5ba167c..70e4492 100644
--- a/security/agent/cache/cache.go
+++ b/security/agent/cache/cache.go
@@ -7,7 +7,7 @@
 	"sync"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/security/agent/lru"
@@ -252,7 +252,7 @@
 	return s.key
 }
 
-func NewCachedPrincipal(ctx *context.T, impl security.Principal, call ipc.ClientCall) (p security.Principal, err error) {
+func NewCachedPrincipal(ctx *context.T, impl security.Principal, call rpc.ClientCall) (p security.Principal, err error) {
 	var mu sync.RWMutex
 	cachedRoots := newCachedRoots(impl.Roots(), &mu)
 	cachedStore := &cachedStore{mu: &mu, key: impl.PublicKey(), impl: impl.BlessingStore()}
diff --git a/security/agent/client.go b/security/agent/client.go
index 2458fd5..b93914d 100644
--- a/security/agent/client.go
+++ b/security/agent/client.go
@@ -8,9 +8,9 @@
 	"os"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
@@ -29,7 +29,7 @@
 
 type caller struct {
 	ctx    *context.T
-	client ipc.Client
+	client rpc.Client
 	name   string
 }
 
@@ -44,7 +44,7 @@
 	return nil
 }
 
-func (c *caller) startCall(name string, args ...interface{}) (ipc.ClientCall, error) {
+func (c *caller) startCall(name string, args ...interface{}) (rpc.ClientCall, error) {
 	ctx, _ := vtrace.SetNewTrace(c.ctx)
 	// VCSecurityNone is safe here since we're using anonymous unix sockets.
 	return c.client.StartCall(ctx, c.name, name, args, options.VCSecurityNone, options.NoResolve{})
@@ -59,7 +59,7 @@
 // os.GetEnv(agent.FdVarName).
 // 'ctx' should not have a deadline, and should never be cancelled while the
 // principal is in use.
-func NewAgentPrincipal(ctx *context.T, fd int, insecureClient ipc.Client) (security.Principal, error) {
+func NewAgentPrincipal(ctx *context.T, fd int, insecureClient rpc.Client) (security.Principal, error) {
 	p, err := newUncachedPrincipal(ctx, fd, insecureClient)
 	if err != nil {
 		return p, err
@@ -70,7 +70,7 @@
 	}
 	return cache.NewCachedPrincipal(p.caller.ctx, p, call)
 }
-func newUncachedPrincipal(ctx *context.T, fd int, insecureClient ipc.Client) (*client, error) {
+func newUncachedPrincipal(ctx *context.T, fd int, insecureClient rpc.Client) (*client, error) {
 	f := os.NewFile(uintptr(fd), "agent_client")
 	defer f.Close()
 	conn, err := net.FileConn(f)
diff --git a/security/agent/peer_test.go b/security/agent/peer_test.go
index 5d10d89..2586e1e 100644
--- a/security/agent/peer_test.go
+++ b/security/agent/peer_test.go
@@ -2,10 +2,10 @@
 
 import (
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 )
 
-func NewUncachedPrincipal(ctx *context.T, fd int, insecureClient ipc.Client) (security.Principal, error) {
+func NewUncachedPrincipal(ctx *context.T, fd int, insecureClient rpc.Client) (security.Principal, error) {
 	return newUncachedPrincipal(ctx, fd, insecureClient)
 }
diff --git a/security/agent/pingpong/main.go b/security/agent/pingpong/main.go
index c79e56b..e9a4f41 100644
--- a/security/agent/pingpong/main.go
+++ b/security/agent/pingpong/main.go
@@ -6,7 +6,7 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
 
@@ -16,7 +16,7 @@
 
 type pongd struct{}
 
-func (f *pongd) Ping(call ipc.ServerCall, message string) (result string, err error) {
+func (f *pongd) Ping(call rpc.ServerCall, message string) (result string, err error) {
 	client, _ := security.BlessingNames(call.Context(), security.CallSideRemote)
 	server, _ := security.BlessingNames(call.Context(), security.CallSideLocal)
 	return fmt.Sprintf("pong (client:%v server:%v)", client, server), nil
@@ -37,7 +37,7 @@
 		vlog.Fatal("failure creating server: ", err)
 	}
 	vlog.Info("Waiting for ping")
-	spec := ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
+	spec := rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
 	if endpoints, err := s.Listen(spec); err == nil {
 		fmt.Printf("NAME=%v\n", endpoints[0].Name())
 	} else {
diff --git a/security/agent/pingpong/wire.vdl.go b/security/agent/pingpong/wire.vdl.go
index 7f02cc4..a2d841e 100644
--- a/security/agent/pingpong/wire.vdl.go
+++ b/security/agent/pingpong/wire.vdl.go
@@ -7,7 +7,7 @@
 	// VDL system imports
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 )
 
 // PingPongClientMethods is the client interface
@@ -15,20 +15,20 @@
 //
 // Simple service used in the agent tests.
 type PingPongClientMethods interface {
-	Ping(ctx *context.T, message string, opts ...ipc.CallOpt) (string, error)
+	Ping(ctx *context.T, message string, opts ...rpc.CallOpt) (string, error)
 }
 
 // PingPongClientStub adds universal methods to PingPongClientMethods.
 type PingPongClientStub interface {
 	PingPongClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // PingPongClient returns a client stub for PingPong.
-func PingPongClient(name string, opts ...ipc.BindOpt) PingPongClientStub {
-	var client ipc.Client
+func PingPongClient(name string, opts ...rpc.BindOpt) PingPongClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -37,18 +37,18 @@
 
 type implPingPongClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implPingPongClientStub) c(ctx *context.T) ipc.Client {
+func (c implPingPongClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implPingPongClientStub) Ping(ctx *context.T, i0 string, opts ...ipc.CallOpt) (o0 string, err error) {
-	var call ipc.ClientCall
+func (c implPingPongClientStub) Ping(ctx *context.T, i0 string, opts ...rpc.CallOpt) (o0 string, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Ping", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -61,11 +61,11 @@
 //
 // Simple service used in the agent tests.
 type PingPongServerMethods interface {
-	Ping(call ipc.ServerCall, message string) (string, error)
+	Ping(call rpc.ServerCall, message string) (string, error)
 }
 
 // PingPongServerStubMethods is the server interface containing
-// PingPong methods, as expected by ipc.Server.
+// PingPong methods, as expected by rpc.Server.
 // There is no difference between this interface and PingPongServerMethods
 // since there are no streaming methods.
 type PingPongServerStubMethods PingPongServerMethods
@@ -74,21 +74,21 @@
 type PingPongServerStub interface {
 	PingPongServerStubMethods
 	// Describe the PingPong interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // PingPongServer returns a server stub for PingPong.
 // It converts an implementation of PingPongServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func PingPongServer(impl PingPongServerMethods) PingPongServerStub {
 	stub := implPingPongServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -96,36 +96,36 @@
 
 type implPingPongServerStub struct {
 	impl PingPongServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implPingPongServerStub) Ping(call ipc.ServerCall, i0 string) (string, error) {
+func (s implPingPongServerStub) Ping(call rpc.ServerCall, i0 string) (string, error) {
 	return s.impl.Ping(call, i0)
 }
 
-func (s implPingPongServerStub) Globber() *ipc.GlobState {
+func (s implPingPongServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implPingPongServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{PingPongDesc}
+func (s implPingPongServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{PingPongDesc}
 }
 
 // PingPongDesc describes the PingPong interface.
-var PingPongDesc ipc.InterfaceDesc = descPingPong
+var PingPongDesc rpc.InterfaceDesc = descPingPong
 
 // descPingPong hides the desc to keep godoc clean.
-var descPingPong = ipc.InterfaceDesc{
+var descPingPong = rpc.InterfaceDesc{
 	Name:    "PingPong",
 	PkgPath: "v.io/x/ref/security/agent/pingpong",
 	Doc:     "// Simple service used in the agent tests.",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Ping",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"message", ``}, // string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // string
 			},
 		},
diff --git a/security/agent/server/server.go b/security/agent/server/server.go
index c08d85d..e0e0e95 100644
--- a/security/agent/server/server.go
+++ b/security/agent/server/server.go
@@ -16,8 +16,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
@@ -243,7 +243,7 @@
 				// VCSecurityNone is safe since we're using anonymous unix sockets.
 				// Only our child process can possibly communicate on the socket.
 				//
-				// Also, VCSecurityNone implies that s (ipc.Server) created below does not
+				// Also, VCSecurityNone implies that s (rpc.Server) created below does not
 				// authenticate to clients, so runtime.Principal is irrelevant for the agent.
 				// TODO(ribrdb): Shutdown these servers when the connection is closed.
 				s, err := v23.NewServer(ctx, options.VCSecurityNone)
@@ -255,7 +255,7 @@
 				a := []struct{ Protocol, Address string }{
 					{clientAddr.Network(), clientAddr.String()},
 				}
-				spec := ipc.ListenSpec{Addrs: ipc.ListenAddrs(a)}
+				spec := rpc.ListenSpec{Addrs: rpc.ListenAddrs(a)}
 				if _, err = s.Listen(spec); err == nil {
 					agent := &agentd{w.newID(), w, principal, ctx}
 					serverAgent := AgentServer(agent)
@@ -271,7 +271,7 @@
 	return nil
 }
 
-func (a agentd) Bless(_ ipc.ServerCall, key []byte, with security.Blessings, extension string, caveat security.Caveat, additionalCaveats []security.Caveat) (security.Blessings, error) {
+func (a agentd) Bless(_ rpc.ServerCall, key []byte, with security.Blessings, extension string, caveat security.Caveat, additionalCaveats []security.Caveat) (security.Blessings, error) {
 	pkey, err := security.UnmarshalPublicKey(key)
 	if err != nil {
 		return security.Blessings{}, err
@@ -279,15 +279,15 @@
 	return a.principal.Bless(pkey, with, extension, caveat, additionalCaveats...)
 }
 
-func (a agentd) BlessSelf(_ ipc.ServerCall, name string, caveats []security.Caveat) (security.Blessings, error) {
+func (a agentd) BlessSelf(_ rpc.ServerCall, name string, caveats []security.Caveat) (security.Blessings, error) {
 	return a.principal.BlessSelf(name, caveats...)
 }
 
-func (a agentd) Sign(_ ipc.ServerCall, message []byte) (security.Signature, error) {
+func (a agentd) Sign(_ rpc.ServerCall, message []byte) (security.Signature, error) {
 	return a.principal.Sign(message)
 }
 
-func (a agentd) MintDischarge(_ ipc.ServerCall, forCaveat, caveatOnDischarge security.Caveat, additionalCaveatsOnDischarge []security.Caveat) (security.Discharge, error) {
+func (a agentd) MintDischarge(_ rpc.ServerCall, forCaveat, caveatOnDischarge security.Caveat, additionalCaveatsOnDischarge []security.Caveat) (security.Discharge, error) {
 	return a.principal.MintDischarge(forCaveat, caveatOnDischarge, additionalCaveatsOnDischarge...)
 }
 
@@ -342,65 +342,65 @@
 	return sha512.Sum512(slice), nil
 }
 
-func (a agentd) PublicKey(_ ipc.ServerCall) ([]byte, error) {
+func (a agentd) PublicKey(_ rpc.ServerCall) ([]byte, error) {
 	return a.principal.PublicKey().MarshalBinary()
 }
 
-func (a agentd) BlessingsByName(_ ipc.ServerCall, name security.BlessingPattern) ([]security.Blessings, error) {
+func (a agentd) BlessingsByName(_ rpc.ServerCall, name security.BlessingPattern) ([]security.Blessings, error) {
 	a.w.rlock()
 	defer a.w.runlock()
 	return a.principal.BlessingsByName(name), nil
 }
 
-func (a agentd) BlessingsInfo(_ ipc.ServerCall, blessings security.Blessings) (map[string][]security.Caveat, error) {
+func (a agentd) BlessingsInfo(_ rpc.ServerCall, blessings security.Blessings) (map[string][]security.Caveat, error) {
 	a.w.rlock()
 	defer a.w.runlock()
 	return a.principal.BlessingsInfo(blessings), nil
 }
 
-func (a agentd) AddToRoots(_ ipc.ServerCall, blessings security.Blessings) error {
+func (a agentd) AddToRoots(_ rpc.ServerCall, blessings security.Blessings) error {
 	a.w.lock()
 	defer a.w.unlock(a.id)
 	return a.principal.AddToRoots(blessings)
 }
 
-func (a agentd) BlessingStoreSet(_ ipc.ServerCall, blessings security.Blessings, forPeers security.BlessingPattern) (security.Blessings, error) {
+func (a agentd) BlessingStoreSet(_ rpc.ServerCall, blessings security.Blessings, forPeers security.BlessingPattern) (security.Blessings, error) {
 	a.w.lock()
 	defer a.w.unlock(a.id)
 	return a.principal.BlessingStore().Set(blessings, forPeers)
 }
 
-func (a agentd) BlessingStoreForPeer(_ ipc.ServerCall, peerBlessings []string) (security.Blessings, error) {
+func (a agentd) BlessingStoreForPeer(_ rpc.ServerCall, peerBlessings []string) (security.Blessings, error) {
 	a.w.rlock()
 	defer a.w.runlock()
 	return a.principal.BlessingStore().ForPeer(peerBlessings...), nil
 }
 
-func (a agentd) BlessingStoreSetDefault(_ ipc.ServerCall, blessings security.Blessings) error {
+func (a agentd) BlessingStoreSetDefault(_ rpc.ServerCall, blessings security.Blessings) error {
 	a.w.lock()
 	defer a.w.unlock(a.id)
 	return a.principal.BlessingStore().SetDefault(blessings)
 }
 
-func (a agentd) BlessingStorePeerBlessings(_ ipc.ServerCall) (map[security.BlessingPattern]security.Blessings, error) {
+func (a agentd) BlessingStorePeerBlessings(_ rpc.ServerCall) (map[security.BlessingPattern]security.Blessings, error) {
 	a.w.rlock()
 	defer a.w.runlock()
 	return a.principal.BlessingStore().PeerBlessings(), nil
 }
 
-func (a agentd) BlessingStoreDebugString(_ ipc.ServerCall) (string, error) {
+func (a agentd) BlessingStoreDebugString(_ rpc.ServerCall) (string, error) {
 	a.w.rlock()
 	defer a.w.runlock()
 	return a.principal.BlessingStore().DebugString(), nil
 }
 
-func (a agentd) BlessingStoreDefault(_ ipc.ServerCall) (security.Blessings, error) {
+func (a agentd) BlessingStoreDefault(_ rpc.ServerCall) (security.Blessings, error) {
 	a.w.rlock()
 	defer a.w.runlock()
 	return a.principal.BlessingStore().Default(), nil
 }
 
-func (a agentd) BlessingRootsAdd(_ ipc.ServerCall, root []byte, pattern security.BlessingPattern) error {
+func (a agentd) BlessingRootsAdd(_ rpc.ServerCall, root []byte, pattern security.BlessingPattern) error {
 	pkey, err := security.UnmarshalPublicKey(root)
 	if err != nil {
 		return err
@@ -410,7 +410,7 @@
 	return a.principal.Roots().Add(pkey, pattern)
 }
 
-func (a agentd) BlessingRootsRecognized(_ ipc.ServerCall, root []byte, blessing string) error {
+func (a agentd) BlessingRootsRecognized(_ rpc.ServerCall, root []byte, blessing string) error {
 	pkey, err := security.UnmarshalPublicKey(root)
 	if err != nil {
 		return err
@@ -420,7 +420,7 @@
 	return a.principal.Roots().Recognized(pkey, blessing)
 }
 
-func (a agentd) BlessingRootsDebugString(_ ipc.ServerCall) (string, error) {
+func (a agentd) BlessingRootsDebugString(_ rpc.ServerCall) (string, error) {
 	a.w.rlock()
 	defer a.w.runlock()
 	return a.principal.Roots().DebugString(), nil
diff --git a/security/agent/server/wire.vdl.go b/security/agent/server/wire.vdl.go
index c318d2f..8fee112 100644
--- a/security/agent/server/wire.vdl.go
+++ b/security/agent/server/wire.vdl.go
@@ -8,7 +8,7 @@
 	"io"
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 
 	// VDL user imports
 	"v.io/v23/security"
@@ -17,41 +17,41 @@
 // AgentClientMethods is the client interface
 // containing Agent methods.
 type AgentClientMethods interface {
-	Bless(ctx *context.T, key []byte, wit security.Blessings, extension string, caveat security.Caveat, additionalCaveats []security.Caveat, opts ...ipc.CallOpt) (security.Blessings, error)
-	BlessSelf(ctx *context.T, name string, caveats []security.Caveat, opts ...ipc.CallOpt) (security.Blessings, error)
-	Sign(ctx *context.T, message []byte, opts ...ipc.CallOpt) (security.Signature, error)
-	MintDischarge(ctx *context.T, forCaveat security.Caveat, caveatOnDischarge security.Caveat, additionalCaveatsOnDischarge []security.Caveat, opts ...ipc.CallOpt) (security.Discharge, error)
-	PublicKey(*context.T, ...ipc.CallOpt) ([]byte, error)
-	BlessingsByName(ctx *context.T, name security.BlessingPattern, opts ...ipc.CallOpt) ([]security.Blessings, error)
-	BlessingsInfo(ctx *context.T, blessings security.Blessings, opts ...ipc.CallOpt) (map[string][]security.Caveat, error)
-	AddToRoots(ctx *context.T, blessing security.Blessings, opts ...ipc.CallOpt) error
-	BlessingStoreSet(ctx *context.T, blessings security.Blessings, forPeers security.BlessingPattern, opts ...ipc.CallOpt) (security.Blessings, error)
-	BlessingStoreForPeer(ctx *context.T, peerBlessings []string, opts ...ipc.CallOpt) (security.Blessings, error)
-	BlessingStoreSetDefault(ctx *context.T, blessings security.Blessings, opts ...ipc.CallOpt) error
-	BlessingStoreDefault(*context.T, ...ipc.CallOpt) (security.Blessings, error)
-	BlessingStorePeerBlessings(*context.T, ...ipc.CallOpt) (map[security.BlessingPattern]security.Blessings, error)
-	BlessingStoreDebugString(*context.T, ...ipc.CallOpt) (string, error)
-	BlessingRootsAdd(ctx *context.T, root []byte, pattern security.BlessingPattern, opts ...ipc.CallOpt) error
-	BlessingRootsRecognized(ctx *context.T, root []byte, blessing string, opts ...ipc.CallOpt) error
-	BlessingRootsDebugString(*context.T, ...ipc.CallOpt) (string, error)
+	Bless(ctx *context.T, key []byte, wit security.Blessings, extension string, caveat security.Caveat, additionalCaveats []security.Caveat, opts ...rpc.CallOpt) (security.Blessings, error)
+	BlessSelf(ctx *context.T, name string, caveats []security.Caveat, opts ...rpc.CallOpt) (security.Blessings, error)
+	Sign(ctx *context.T, message []byte, opts ...rpc.CallOpt) (security.Signature, error)
+	MintDischarge(ctx *context.T, forCaveat security.Caveat, caveatOnDischarge security.Caveat, additionalCaveatsOnDischarge []security.Caveat, opts ...rpc.CallOpt) (security.Discharge, error)
+	PublicKey(*context.T, ...rpc.CallOpt) ([]byte, error)
+	BlessingsByName(ctx *context.T, name security.BlessingPattern, opts ...rpc.CallOpt) ([]security.Blessings, error)
+	BlessingsInfo(ctx *context.T, blessings security.Blessings, opts ...rpc.CallOpt) (map[string][]security.Caveat, error)
+	AddToRoots(ctx *context.T, blessing security.Blessings, opts ...rpc.CallOpt) error
+	BlessingStoreSet(ctx *context.T, blessings security.Blessings, forPeers security.BlessingPattern, opts ...rpc.CallOpt) (security.Blessings, error)
+	BlessingStoreForPeer(ctx *context.T, peerBlessings []string, opts ...rpc.CallOpt) (security.Blessings, error)
+	BlessingStoreSetDefault(ctx *context.T, blessings security.Blessings, opts ...rpc.CallOpt) error
+	BlessingStoreDefault(*context.T, ...rpc.CallOpt) (security.Blessings, error)
+	BlessingStorePeerBlessings(*context.T, ...rpc.CallOpt) (map[security.BlessingPattern]security.Blessings, error)
+	BlessingStoreDebugString(*context.T, ...rpc.CallOpt) (string, error)
+	BlessingRootsAdd(ctx *context.T, root []byte, pattern security.BlessingPattern, opts ...rpc.CallOpt) error
+	BlessingRootsRecognized(ctx *context.T, root []byte, blessing string, opts ...rpc.CallOpt) error
+	BlessingRootsDebugString(*context.T, ...rpc.CallOpt) (string, error)
 	// Clients using caching should call NotifyWhenChanged upon connecting to
 	// the server. The server will stream back values whenever the client should
 	// flush the cache. The streamed value is arbitrary, simply flush whenever
 	// recieving a new item.
-	NotifyWhenChanged(*context.T, ...ipc.CallOpt) (AgentNotifyWhenChangedClientCall, error)
+	NotifyWhenChanged(*context.T, ...rpc.CallOpt) (AgentNotifyWhenChangedClientCall, error)
 }
 
 // AgentClientStub adds universal methods to AgentClientMethods.
 type AgentClientStub interface {
 	AgentClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // AgentClient returns a client stub for Agent.
-func AgentClient(name string, opts ...ipc.BindOpt) AgentClientStub {
-	var client ipc.Client
+func AgentClient(name string, opts ...rpc.BindOpt) AgentClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -60,18 +60,18 @@
 
 type implAgentClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implAgentClientStub) c(ctx *context.T) ipc.Client {
+func (c implAgentClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implAgentClientStub) Bless(ctx *context.T, i0 []byte, i1 security.Blessings, i2 string, i3 security.Caveat, i4 []security.Caveat, opts ...ipc.CallOpt) (o0 security.Blessings, err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) Bless(ctx *context.T, i0 []byte, i1 security.Blessings, i2 string, i3 security.Caveat, i4 []security.Caveat, opts ...rpc.CallOpt) (o0 security.Blessings, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Bless", []interface{}{i0, i1, i2, i3, i4}, opts...); err != nil {
 		return
 	}
@@ -79,8 +79,8 @@
 	return
 }
 
-func (c implAgentClientStub) BlessSelf(ctx *context.T, i0 string, i1 []security.Caveat, opts ...ipc.CallOpt) (o0 security.Blessings, err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) BlessSelf(ctx *context.T, i0 string, i1 []security.Caveat, opts ...rpc.CallOpt) (o0 security.Blessings, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessSelf", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -88,8 +88,8 @@
 	return
 }
 
-func (c implAgentClientStub) Sign(ctx *context.T, i0 []byte, opts ...ipc.CallOpt) (o0 security.Signature, err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) Sign(ctx *context.T, i0 []byte, opts ...rpc.CallOpt) (o0 security.Signature, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Sign", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -97,8 +97,8 @@
 	return
 }
 
-func (c implAgentClientStub) MintDischarge(ctx *context.T, i0 security.Caveat, i1 security.Caveat, i2 []security.Caveat, opts ...ipc.CallOpt) (o0 security.Discharge, err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) MintDischarge(ctx *context.T, i0 security.Caveat, i1 security.Caveat, i2 []security.Caveat, opts ...rpc.CallOpt) (o0 security.Discharge, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "MintDischarge", []interface{}{i0, i1, i2}, opts...); err != nil {
 		return
 	}
@@ -106,8 +106,8 @@
 	return
 }
 
-func (c implAgentClientStub) PublicKey(ctx *context.T, opts ...ipc.CallOpt) (o0 []byte, err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) PublicKey(ctx *context.T, opts ...rpc.CallOpt) (o0 []byte, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "PublicKey", nil, opts...); err != nil {
 		return
 	}
@@ -115,8 +115,8 @@
 	return
 }
 
-func (c implAgentClientStub) BlessingsByName(ctx *context.T, i0 security.BlessingPattern, opts ...ipc.CallOpt) (o0 []security.Blessings, err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) BlessingsByName(ctx *context.T, i0 security.BlessingPattern, opts ...rpc.CallOpt) (o0 []security.Blessings, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingsByName", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -124,8 +124,8 @@
 	return
 }
 
-func (c implAgentClientStub) BlessingsInfo(ctx *context.T, i0 security.Blessings, opts ...ipc.CallOpt) (o0 map[string][]security.Caveat, err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) BlessingsInfo(ctx *context.T, i0 security.Blessings, opts ...rpc.CallOpt) (o0 map[string][]security.Caveat, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingsInfo", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -133,8 +133,8 @@
 	return
 }
 
-func (c implAgentClientStub) AddToRoots(ctx *context.T, i0 security.Blessings, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) AddToRoots(ctx *context.T, i0 security.Blessings, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "AddToRoots", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -142,8 +142,8 @@
 	return
 }
 
-func (c implAgentClientStub) BlessingStoreSet(ctx *context.T, i0 security.Blessings, i1 security.BlessingPattern, opts ...ipc.CallOpt) (o0 security.Blessings, err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) BlessingStoreSet(ctx *context.T, i0 security.Blessings, i1 security.BlessingPattern, opts ...rpc.CallOpt) (o0 security.Blessings, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingStoreSet", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -151,8 +151,8 @@
 	return
 }
 
-func (c implAgentClientStub) BlessingStoreForPeer(ctx *context.T, i0 []string, opts ...ipc.CallOpt) (o0 security.Blessings, err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) BlessingStoreForPeer(ctx *context.T, i0 []string, opts ...rpc.CallOpt) (o0 security.Blessings, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingStoreForPeer", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -160,8 +160,8 @@
 	return
 }
 
-func (c implAgentClientStub) BlessingStoreSetDefault(ctx *context.T, i0 security.Blessings, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) BlessingStoreSetDefault(ctx *context.T, i0 security.Blessings, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingStoreSetDefault", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -169,8 +169,8 @@
 	return
 }
 
-func (c implAgentClientStub) BlessingStoreDefault(ctx *context.T, opts ...ipc.CallOpt) (o0 security.Blessings, err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) BlessingStoreDefault(ctx *context.T, opts ...rpc.CallOpt) (o0 security.Blessings, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingStoreDefault", nil, opts...); err != nil {
 		return
 	}
@@ -178,8 +178,8 @@
 	return
 }
 
-func (c implAgentClientStub) BlessingStorePeerBlessings(ctx *context.T, opts ...ipc.CallOpt) (o0 map[security.BlessingPattern]security.Blessings, err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) BlessingStorePeerBlessings(ctx *context.T, opts ...rpc.CallOpt) (o0 map[security.BlessingPattern]security.Blessings, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingStorePeerBlessings", nil, opts...); err != nil {
 		return
 	}
@@ -187,8 +187,8 @@
 	return
 }
 
-func (c implAgentClientStub) BlessingStoreDebugString(ctx *context.T, opts ...ipc.CallOpt) (o0 string, err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) BlessingStoreDebugString(ctx *context.T, opts ...rpc.CallOpt) (o0 string, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingStoreDebugString", nil, opts...); err != nil {
 		return
 	}
@@ -196,8 +196,8 @@
 	return
 }
 
-func (c implAgentClientStub) BlessingRootsAdd(ctx *context.T, i0 []byte, i1 security.BlessingPattern, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) BlessingRootsAdd(ctx *context.T, i0 []byte, i1 security.BlessingPattern, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingRootsAdd", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -205,8 +205,8 @@
 	return
 }
 
-func (c implAgentClientStub) BlessingRootsRecognized(ctx *context.T, i0 []byte, i1 string, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) BlessingRootsRecognized(ctx *context.T, i0 []byte, i1 string, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingRootsRecognized", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -214,8 +214,8 @@
 	return
 }
 
-func (c implAgentClientStub) BlessingRootsDebugString(ctx *context.T, opts ...ipc.CallOpt) (o0 string, err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) BlessingRootsDebugString(ctx *context.T, opts ...rpc.CallOpt) (o0 string, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessingRootsDebugString", nil, opts...); err != nil {
 		return
 	}
@@ -223,8 +223,8 @@
 	return
 }
 
-func (c implAgentClientStub) NotifyWhenChanged(ctx *context.T, opts ...ipc.CallOpt) (ocall AgentNotifyWhenChangedClientCall, err error) {
-	var call ipc.ClientCall
+func (c implAgentClientStub) NotifyWhenChanged(ctx *context.T, opts ...rpc.CallOpt) (ocall AgentNotifyWhenChangedClientCall, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "NotifyWhenChanged", nil, opts...); err != nil {
 		return
 	}
@@ -265,7 +265,7 @@
 }
 
 type implAgentNotifyWhenChangedClientCall struct {
-	ipc.ClientCall
+	rpc.ClientCall
 	valRecv bool
 	errRecv error
 }
@@ -303,23 +303,23 @@
 // AgentServerMethods is the interface a server writer
 // implements for Agent.
 type AgentServerMethods interface {
-	Bless(call ipc.ServerCall, key []byte, wit security.Blessings, extension string, caveat security.Caveat, additionalCaveats []security.Caveat) (security.Blessings, error)
-	BlessSelf(call ipc.ServerCall, name string, caveats []security.Caveat) (security.Blessings, error)
-	Sign(call ipc.ServerCall, message []byte) (security.Signature, error)
-	MintDischarge(call ipc.ServerCall, forCaveat security.Caveat, caveatOnDischarge security.Caveat, additionalCaveatsOnDischarge []security.Caveat) (security.Discharge, error)
-	PublicKey(ipc.ServerCall) ([]byte, error)
-	BlessingsByName(call ipc.ServerCall, name security.BlessingPattern) ([]security.Blessings, error)
-	BlessingsInfo(call ipc.ServerCall, blessings security.Blessings) (map[string][]security.Caveat, error)
-	AddToRoots(call ipc.ServerCall, blessing security.Blessings) error
-	BlessingStoreSet(call ipc.ServerCall, blessings security.Blessings, forPeers security.BlessingPattern) (security.Blessings, error)
-	BlessingStoreForPeer(call ipc.ServerCall, peerBlessings []string) (security.Blessings, error)
-	BlessingStoreSetDefault(call ipc.ServerCall, blessings security.Blessings) error
-	BlessingStoreDefault(ipc.ServerCall) (security.Blessings, error)
-	BlessingStorePeerBlessings(ipc.ServerCall) (map[security.BlessingPattern]security.Blessings, error)
-	BlessingStoreDebugString(ipc.ServerCall) (string, error)
-	BlessingRootsAdd(call ipc.ServerCall, root []byte, pattern security.BlessingPattern) error
-	BlessingRootsRecognized(call ipc.ServerCall, root []byte, blessing string) error
-	BlessingRootsDebugString(ipc.ServerCall) (string, error)
+	Bless(call rpc.ServerCall, key []byte, wit security.Blessings, extension string, caveat security.Caveat, additionalCaveats []security.Caveat) (security.Blessings, error)
+	BlessSelf(call rpc.ServerCall, name string, caveats []security.Caveat) (security.Blessings, error)
+	Sign(call rpc.ServerCall, message []byte) (security.Signature, error)
+	MintDischarge(call rpc.ServerCall, forCaveat security.Caveat, caveatOnDischarge security.Caveat, additionalCaveatsOnDischarge []security.Caveat) (security.Discharge, error)
+	PublicKey(rpc.ServerCall) ([]byte, error)
+	BlessingsByName(call rpc.ServerCall, name security.BlessingPattern) ([]security.Blessings, error)
+	BlessingsInfo(call rpc.ServerCall, blessings security.Blessings) (map[string][]security.Caveat, error)
+	AddToRoots(call rpc.ServerCall, blessing security.Blessings) error
+	BlessingStoreSet(call rpc.ServerCall, blessings security.Blessings, forPeers security.BlessingPattern) (security.Blessings, error)
+	BlessingStoreForPeer(call rpc.ServerCall, peerBlessings []string) (security.Blessings, error)
+	BlessingStoreSetDefault(call rpc.ServerCall, blessings security.Blessings) error
+	BlessingStoreDefault(rpc.ServerCall) (security.Blessings, error)
+	BlessingStorePeerBlessings(rpc.ServerCall) (map[security.BlessingPattern]security.Blessings, error)
+	BlessingStoreDebugString(rpc.ServerCall) (string, error)
+	BlessingRootsAdd(call rpc.ServerCall, root []byte, pattern security.BlessingPattern) error
+	BlessingRootsRecognized(call rpc.ServerCall, root []byte, blessing string) error
+	BlessingRootsDebugString(rpc.ServerCall) (string, error)
 	// Clients using caching should call NotifyWhenChanged upon connecting to
 	// the server. The server will stream back values whenever the client should
 	// flush the cache. The streamed value is arbitrary, simply flush whenever
@@ -328,27 +328,27 @@
 }
 
 // AgentServerStubMethods is the server interface containing
-// Agent methods, as expected by ipc.Server.
+// Agent methods, as expected by rpc.Server.
 // The only difference between this interface and AgentServerMethods
 // is the streaming methods.
 type AgentServerStubMethods interface {
-	Bless(call ipc.ServerCall, key []byte, wit security.Blessings, extension string, caveat security.Caveat, additionalCaveats []security.Caveat) (security.Blessings, error)
-	BlessSelf(call ipc.ServerCall, name string, caveats []security.Caveat) (security.Blessings, error)
-	Sign(call ipc.ServerCall, message []byte) (security.Signature, error)
-	MintDischarge(call ipc.ServerCall, forCaveat security.Caveat, caveatOnDischarge security.Caveat, additionalCaveatsOnDischarge []security.Caveat) (security.Discharge, error)
-	PublicKey(ipc.ServerCall) ([]byte, error)
-	BlessingsByName(call ipc.ServerCall, name security.BlessingPattern) ([]security.Blessings, error)
-	BlessingsInfo(call ipc.ServerCall, blessings security.Blessings) (map[string][]security.Caveat, error)
-	AddToRoots(call ipc.ServerCall, blessing security.Blessings) error
-	BlessingStoreSet(call ipc.ServerCall, blessings security.Blessings, forPeers security.BlessingPattern) (security.Blessings, error)
-	BlessingStoreForPeer(call ipc.ServerCall, peerBlessings []string) (security.Blessings, error)
-	BlessingStoreSetDefault(call ipc.ServerCall, blessings security.Blessings) error
-	BlessingStoreDefault(ipc.ServerCall) (security.Blessings, error)
-	BlessingStorePeerBlessings(ipc.ServerCall) (map[security.BlessingPattern]security.Blessings, error)
-	BlessingStoreDebugString(ipc.ServerCall) (string, error)
-	BlessingRootsAdd(call ipc.ServerCall, root []byte, pattern security.BlessingPattern) error
-	BlessingRootsRecognized(call ipc.ServerCall, root []byte, blessing string) error
-	BlessingRootsDebugString(ipc.ServerCall) (string, error)
+	Bless(call rpc.ServerCall, key []byte, wit security.Blessings, extension string, caveat security.Caveat, additionalCaveats []security.Caveat) (security.Blessings, error)
+	BlessSelf(call rpc.ServerCall, name string, caveats []security.Caveat) (security.Blessings, error)
+	Sign(call rpc.ServerCall, message []byte) (security.Signature, error)
+	MintDischarge(call rpc.ServerCall, forCaveat security.Caveat, caveatOnDischarge security.Caveat, additionalCaveatsOnDischarge []security.Caveat) (security.Discharge, error)
+	PublicKey(rpc.ServerCall) ([]byte, error)
+	BlessingsByName(call rpc.ServerCall, name security.BlessingPattern) ([]security.Blessings, error)
+	BlessingsInfo(call rpc.ServerCall, blessings security.Blessings) (map[string][]security.Caveat, error)
+	AddToRoots(call rpc.ServerCall, blessing security.Blessings) error
+	BlessingStoreSet(call rpc.ServerCall, blessings security.Blessings, forPeers security.BlessingPattern) (security.Blessings, error)
+	BlessingStoreForPeer(call rpc.ServerCall, peerBlessings []string) (security.Blessings, error)
+	BlessingStoreSetDefault(call rpc.ServerCall, blessings security.Blessings) error
+	BlessingStoreDefault(rpc.ServerCall) (security.Blessings, error)
+	BlessingStorePeerBlessings(rpc.ServerCall) (map[security.BlessingPattern]security.Blessings, error)
+	BlessingStoreDebugString(rpc.ServerCall) (string, error)
+	BlessingRootsAdd(call rpc.ServerCall, root []byte, pattern security.BlessingPattern) error
+	BlessingRootsRecognized(call rpc.ServerCall, root []byte, blessing string) error
+	BlessingRootsDebugString(rpc.ServerCall) (string, error)
 	// Clients using caching should call NotifyWhenChanged upon connecting to
 	// the server. The server will stream back values whenever the client should
 	// flush the cache. The streamed value is arbitrary, simply flush whenever
@@ -360,21 +360,21 @@
 type AgentServerStub interface {
 	AgentServerStubMethods
 	// Describe the Agent interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // AgentServer returns a server stub for Agent.
 // It converts an implementation of AgentServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func AgentServer(impl AgentServerMethods) AgentServerStub {
 	stub := implAgentServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -382,74 +382,74 @@
 
 type implAgentServerStub struct {
 	impl AgentServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implAgentServerStub) Bless(call ipc.ServerCall, i0 []byte, i1 security.Blessings, i2 string, i3 security.Caveat, i4 []security.Caveat) (security.Blessings, error) {
+func (s implAgentServerStub) Bless(call rpc.ServerCall, i0 []byte, i1 security.Blessings, i2 string, i3 security.Caveat, i4 []security.Caveat) (security.Blessings, error) {
 	return s.impl.Bless(call, i0, i1, i2, i3, i4)
 }
 
-func (s implAgentServerStub) BlessSelf(call ipc.ServerCall, i0 string, i1 []security.Caveat) (security.Blessings, error) {
+func (s implAgentServerStub) BlessSelf(call rpc.ServerCall, i0 string, i1 []security.Caveat) (security.Blessings, error) {
 	return s.impl.BlessSelf(call, i0, i1)
 }
 
-func (s implAgentServerStub) Sign(call ipc.ServerCall, i0 []byte) (security.Signature, error) {
+func (s implAgentServerStub) Sign(call rpc.ServerCall, i0 []byte) (security.Signature, error) {
 	return s.impl.Sign(call, i0)
 }
 
-func (s implAgentServerStub) MintDischarge(call ipc.ServerCall, i0 security.Caveat, i1 security.Caveat, i2 []security.Caveat) (security.Discharge, error) {
+func (s implAgentServerStub) MintDischarge(call rpc.ServerCall, i0 security.Caveat, i1 security.Caveat, i2 []security.Caveat) (security.Discharge, error) {
 	return s.impl.MintDischarge(call, i0, i1, i2)
 }
 
-func (s implAgentServerStub) PublicKey(call ipc.ServerCall) ([]byte, error) {
+func (s implAgentServerStub) PublicKey(call rpc.ServerCall) ([]byte, error) {
 	return s.impl.PublicKey(call)
 }
 
-func (s implAgentServerStub) BlessingsByName(call ipc.ServerCall, i0 security.BlessingPattern) ([]security.Blessings, error) {
+func (s implAgentServerStub) BlessingsByName(call rpc.ServerCall, i0 security.BlessingPattern) ([]security.Blessings, error) {
 	return s.impl.BlessingsByName(call, i0)
 }
 
-func (s implAgentServerStub) BlessingsInfo(call ipc.ServerCall, i0 security.Blessings) (map[string][]security.Caveat, error) {
+func (s implAgentServerStub) BlessingsInfo(call rpc.ServerCall, i0 security.Blessings) (map[string][]security.Caveat, error) {
 	return s.impl.BlessingsInfo(call, i0)
 }
 
-func (s implAgentServerStub) AddToRoots(call ipc.ServerCall, i0 security.Blessings) error {
+func (s implAgentServerStub) AddToRoots(call rpc.ServerCall, i0 security.Blessings) error {
 	return s.impl.AddToRoots(call, i0)
 }
 
-func (s implAgentServerStub) BlessingStoreSet(call ipc.ServerCall, i0 security.Blessings, i1 security.BlessingPattern) (security.Blessings, error) {
+func (s implAgentServerStub) BlessingStoreSet(call rpc.ServerCall, i0 security.Blessings, i1 security.BlessingPattern) (security.Blessings, error) {
 	return s.impl.BlessingStoreSet(call, i0, i1)
 }
 
-func (s implAgentServerStub) BlessingStoreForPeer(call ipc.ServerCall, i0 []string) (security.Blessings, error) {
+func (s implAgentServerStub) BlessingStoreForPeer(call rpc.ServerCall, i0 []string) (security.Blessings, error) {
 	return s.impl.BlessingStoreForPeer(call, i0)
 }
 
-func (s implAgentServerStub) BlessingStoreSetDefault(call ipc.ServerCall, i0 security.Blessings) error {
+func (s implAgentServerStub) BlessingStoreSetDefault(call rpc.ServerCall, i0 security.Blessings) error {
 	return s.impl.BlessingStoreSetDefault(call, i0)
 }
 
-func (s implAgentServerStub) BlessingStoreDefault(call ipc.ServerCall) (security.Blessings, error) {
+func (s implAgentServerStub) BlessingStoreDefault(call rpc.ServerCall) (security.Blessings, error) {
 	return s.impl.BlessingStoreDefault(call)
 }
 
-func (s implAgentServerStub) BlessingStorePeerBlessings(call ipc.ServerCall) (map[security.BlessingPattern]security.Blessings, error) {
+func (s implAgentServerStub) BlessingStorePeerBlessings(call rpc.ServerCall) (map[security.BlessingPattern]security.Blessings, error) {
 	return s.impl.BlessingStorePeerBlessings(call)
 }
 
-func (s implAgentServerStub) BlessingStoreDebugString(call ipc.ServerCall) (string, error) {
+func (s implAgentServerStub) BlessingStoreDebugString(call rpc.ServerCall) (string, error) {
 	return s.impl.BlessingStoreDebugString(call)
 }
 
-func (s implAgentServerStub) BlessingRootsAdd(call ipc.ServerCall, i0 []byte, i1 security.BlessingPattern) error {
+func (s implAgentServerStub) BlessingRootsAdd(call rpc.ServerCall, i0 []byte, i1 security.BlessingPattern) error {
 	return s.impl.BlessingRootsAdd(call, i0, i1)
 }
 
-func (s implAgentServerStub) BlessingRootsRecognized(call ipc.ServerCall, i0 []byte, i1 string) error {
+func (s implAgentServerStub) BlessingRootsRecognized(call rpc.ServerCall, i0 []byte, i1 string) error {
 	return s.impl.BlessingRootsRecognized(call, i0, i1)
 }
 
-func (s implAgentServerStub) BlessingRootsDebugString(call ipc.ServerCall) (string, error) {
+func (s implAgentServerStub) BlessingRootsDebugString(call rpc.ServerCall) (string, error) {
 	return s.impl.BlessingRootsDebugString(call)
 }
 
@@ -457,155 +457,155 @@
 	return s.impl.NotifyWhenChanged(call)
 }
 
-func (s implAgentServerStub) Globber() *ipc.GlobState {
+func (s implAgentServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implAgentServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{AgentDesc}
+func (s implAgentServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{AgentDesc}
 }
 
 // AgentDesc describes the Agent interface.
-var AgentDesc ipc.InterfaceDesc = descAgent
+var AgentDesc rpc.InterfaceDesc = descAgent
 
 // descAgent hides the desc to keep godoc clean.
-var descAgent = ipc.InterfaceDesc{
+var descAgent = rpc.InterfaceDesc{
 	Name:    "Agent",
 	PkgPath: "v.io/x/ref/security/agent/server",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Bless",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"key", ``},               // []byte
 				{"wit", ``},               // security.Blessings
 				{"extension", ``},         // string
 				{"caveat", ``},            // security.Caveat
 				{"additionalCaveats", ``}, // []security.Caveat
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // security.Blessings
 			},
 		},
 		{
 			Name: "BlessSelf",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"name", ``},    // string
 				{"caveats", ``}, // []security.Caveat
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // security.Blessings
 			},
 		},
 		{
 			Name: "Sign",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"message", ``}, // []byte
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // security.Signature
 			},
 		},
 		{
 			Name: "MintDischarge",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"forCaveat", ``},                    // security.Caveat
 				{"caveatOnDischarge", ``},            // security.Caveat
 				{"additionalCaveatsOnDischarge", ``}, // []security.Caveat
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // security.Discharge
 			},
 		},
 		{
 			Name: "PublicKey",
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // []byte
 			},
 		},
 		{
 			Name: "BlessingsByName",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"name", ``}, // security.BlessingPattern
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // []security.Blessings
 			},
 		},
 		{
 			Name: "BlessingsInfo",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"blessings", ``}, // security.Blessings
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // map[string][]security.Caveat
 			},
 		},
 		{
 			Name: "AddToRoots",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"blessing", ``}, // security.Blessings
 			},
 		},
 		{
 			Name: "BlessingStoreSet",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"blessings", ``}, // security.Blessings
 				{"forPeers", ``},  // security.BlessingPattern
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // security.Blessings
 			},
 		},
 		{
 			Name: "BlessingStoreForPeer",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"peerBlessings", ``}, // []string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // security.Blessings
 			},
 		},
 		{
 			Name: "BlessingStoreSetDefault",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"blessings", ``}, // security.Blessings
 			},
 		},
 		{
 			Name: "BlessingStoreDefault",
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // security.Blessings
 			},
 		},
 		{
 			Name: "BlessingStorePeerBlessings",
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // map[security.BlessingPattern]security.Blessings
 			},
 		},
 		{
 			Name: "BlessingStoreDebugString",
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // string
 			},
 		},
 		{
 			Name: "BlessingRootsAdd",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"root", ``},    // []byte
 				{"pattern", ``}, // security.BlessingPattern
 			},
 		},
 		{
 			Name: "BlessingRootsRecognized",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"root", ``},     // []byte
 				{"blessing", ``}, // string
 			},
 		},
 		{
 			Name: "BlessingRootsDebugString",
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // string
 			},
 		},
@@ -629,18 +629,18 @@
 
 // AgentNotifyWhenChangedServerCall represents the context passed to Agent.NotifyWhenChanged.
 type AgentNotifyWhenChangedServerCall interface {
-	ipc.ServerCall
+	rpc.ServerCall
 	AgentNotifyWhenChangedServerStream
 }
 
-// AgentNotifyWhenChangedServerCallStub is a wrapper that converts ipc.StreamServerCall into
+// AgentNotifyWhenChangedServerCallStub is a wrapper that converts rpc.StreamServerCall into
 // a typesafe stub that implements AgentNotifyWhenChangedServerCall.
 type AgentNotifyWhenChangedServerCallStub struct {
-	ipc.StreamServerCall
+	rpc.StreamServerCall
 }
 
-// Init initializes AgentNotifyWhenChangedServerCallStub from ipc.StreamServerCall.
-func (s *AgentNotifyWhenChangedServerCallStub) Init(call ipc.StreamServerCall) {
+// Init initializes AgentNotifyWhenChangedServerCallStub from rpc.StreamServerCall.
+func (s *AgentNotifyWhenChangedServerCallStub) Init(call rpc.StreamServerCall) {
 	s.StreamServerCall = call
 }
 
diff --git a/services/identity/blesser/macaroon.go b/services/identity/blesser/macaroon.go
index 4e056d7..82e95cc 100644
--- a/services/identity/blesser/macaroon.go
+++ b/services/identity/blesser/macaroon.go
@@ -8,7 +8,7 @@
 	"v.io/x/ref/services/identity/oauth"
 	"v.io/x/ref/services/identity/util"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vom"
 )
@@ -23,7 +23,7 @@
 	return identity.MacaroonBlesserServer(&macaroonBlesser{key})
 }
 
-func (b *macaroonBlesser) Bless(call ipc.ServerCall, macaroon string) (security.Blessings, error) {
+func (b *macaroonBlesser) Bless(call rpc.ServerCall, macaroon string) (security.Blessings, error) {
 	var empty security.Blessings
 	inputs, err := util.Macaroon(macaroon).Decode(b.key)
 	if err != nil {
diff --git a/services/identity/blesser/oauth.go b/services/identity/blesser/oauth.go
index ddcf9c2..25b186c 100644
--- a/services/identity/blesser/oauth.go
+++ b/services/identity/blesser/oauth.go
@@ -10,7 +10,7 @@
 	"v.io/x/ref/services/identity/revocation"
 	"v.io/x/ref/services/identity/util"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 )
 
@@ -58,7 +58,7 @@
 	})
 }
 
-func (b *oauthBlesser) BlessUsingAccessToken(call ipc.ServerCall, accessToken string) (security.Blessings, string, error) {
+func (b *oauthBlesser) BlessUsingAccessToken(call rpc.ServerCall, accessToken string) (security.Blessings, string, error) {
 	var noblessings security.Blessings
 	email, clientName, err := b.oauthProvider.GetEmailAndClientName(accessToken, b.accessTokenClients)
 	if err != nil {
@@ -67,7 +67,7 @@
 	return b.bless(call, email, clientName)
 }
 
-func (b *oauthBlesser) bless(call ipc.ServerCall, email, clientName string) (security.Blessings, string, error) {
+func (b *oauthBlesser) bless(call rpc.ServerCall, email, clientName string) (security.Blessings, string, error) {
 	var noblessings security.Blessings
 	self := call.LocalPrincipal()
 	if self == nil {
diff --git a/services/identity/blesser/util_test.go b/services/identity/blesser/util_test.go
index b563b33..58ad919 100644
--- a/services/identity/blesser/util_test.go
+++ b/services/identity/blesser/util_test.go
@@ -3,12 +3,12 @@
 import (
 	vsecurity "v.io/x/ref/security"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 )
 
 type serverCall struct {
-	ipc.StreamServerCall
+	rpc.StreamServerCall
 	method        string
 	p             security.Principal
 	local, remote security.Blessings
diff --git a/services/identity/identity.vdl.go b/services/identity/identity.vdl.go
index e93f49b..9902d26 100644
--- a/services/identity/identity.vdl.go
+++ b/services/identity/identity.vdl.go
@@ -8,7 +8,7 @@
 	// VDL system imports
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 
 	// VDL user imports
 	"v.io/v23/security"
@@ -33,20 +33,20 @@
 type OAuthBlesserClientMethods interface {
 	// BlessUsingAccessToken uses the provided access token to obtain the email
 	// address and returns a blessing along with the email address.
-	BlessUsingAccessToken(ctx *context.T, token string, opts ...ipc.CallOpt) (blessing security.Blessings, email string, err error)
+	BlessUsingAccessToken(ctx *context.T, token string, opts ...rpc.CallOpt) (blessing security.Blessings, email string, err error)
 }
 
 // OAuthBlesserClientStub adds universal methods to OAuthBlesserClientMethods.
 type OAuthBlesserClientStub interface {
 	OAuthBlesserClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // OAuthBlesserClient returns a client stub for OAuthBlesser.
-func OAuthBlesserClient(name string, opts ...ipc.BindOpt) OAuthBlesserClientStub {
-	var client ipc.Client
+func OAuthBlesserClient(name string, opts ...rpc.BindOpt) OAuthBlesserClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -55,18 +55,18 @@
 
 type implOAuthBlesserClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implOAuthBlesserClientStub) c(ctx *context.T) ipc.Client {
+func (c implOAuthBlesserClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implOAuthBlesserClientStub) BlessUsingAccessToken(ctx *context.T, i0 string, opts ...ipc.CallOpt) (o0 security.Blessings, o1 string, err error) {
-	var call ipc.ClientCall
+func (c implOAuthBlesserClientStub) BlessUsingAccessToken(ctx *context.T, i0 string, opts ...rpc.CallOpt) (o0 security.Blessings, o1 string, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessUsingAccessToken", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -93,11 +93,11 @@
 type OAuthBlesserServerMethods interface {
 	// BlessUsingAccessToken uses the provided access token to obtain the email
 	// address and returns a blessing along with the email address.
-	BlessUsingAccessToken(call ipc.ServerCall, token string) (blessing security.Blessings, email string, err error)
+	BlessUsingAccessToken(call rpc.ServerCall, token string) (blessing security.Blessings, email string, err error)
 }
 
 // OAuthBlesserServerStubMethods is the server interface containing
-// OAuthBlesser methods, as expected by ipc.Server.
+// OAuthBlesser methods, as expected by rpc.Server.
 // There is no difference between this interface and OAuthBlesserServerMethods
 // since there are no streaming methods.
 type OAuthBlesserServerStubMethods OAuthBlesserServerMethods
@@ -106,21 +106,21 @@
 type OAuthBlesserServerStub interface {
 	OAuthBlesserServerStubMethods
 	// Describe the OAuthBlesser interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // OAuthBlesserServer returns a server stub for OAuthBlesser.
 // It converts an implementation of OAuthBlesserServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func OAuthBlesserServer(impl OAuthBlesserServerMethods) OAuthBlesserServerStub {
 	stub := implOAuthBlesserServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -128,37 +128,37 @@
 
 type implOAuthBlesserServerStub struct {
 	impl OAuthBlesserServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implOAuthBlesserServerStub) BlessUsingAccessToken(call ipc.ServerCall, i0 string) (security.Blessings, string, error) {
+func (s implOAuthBlesserServerStub) BlessUsingAccessToken(call rpc.ServerCall, i0 string) (security.Blessings, string, error) {
 	return s.impl.BlessUsingAccessToken(call, i0)
 }
 
-func (s implOAuthBlesserServerStub) Globber() *ipc.GlobState {
+func (s implOAuthBlesserServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implOAuthBlesserServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{OAuthBlesserDesc}
+func (s implOAuthBlesserServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{OAuthBlesserDesc}
 }
 
 // OAuthBlesserDesc describes the OAuthBlesser interface.
-var OAuthBlesserDesc ipc.InterfaceDesc = descOAuthBlesser
+var OAuthBlesserDesc rpc.InterfaceDesc = descOAuthBlesser
 
 // descOAuthBlesser hides the desc to keep godoc clean.
-var descOAuthBlesser = ipc.InterfaceDesc{
+var descOAuthBlesser = rpc.InterfaceDesc{
 	Name:    "OAuthBlesser",
 	PkgPath: "v.io/x/ref/services/identity",
 	Doc:     "// OAuthBlesser exchanges OAuth access tokens for\n// an email address from an OAuth-based identity provider and uses the email\n// address obtained to bless the client.\n//\n// OAuth is described in RFC 6749 (http://tools.ietf.org/html/rfc6749),\n// though the Google implementation also has informative documentation at\n// https://developers.google.com/accounts/docs/OAuth2\n//\n// WARNING: There is no binding between the channel over which the access token\n// was obtained (typically https) and the channel used to make the RPC (a\n// vanadium virtual circuit).\n// Thus, if Mallory possesses the access token associated with Alice's account,\n// she may be able to obtain a blessing with Alice's name on it.",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "BlessUsingAccessToken",
 			Doc:  "// BlessUsingAccessToken uses the provided access token to obtain the email\n// address and returns a blessing along with the email address.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"token", ``}, // string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"blessing", ``}, // security.Blessings
 				{"email", ``},    // string
 			},
@@ -173,20 +173,20 @@
 type MacaroonBlesserClientMethods interface {
 	// Bless uses the provided macaroon (which contains email and caveats)
 	// to return a blessing for the client.
-	Bless(ctx *context.T, macaroon string, opts ...ipc.CallOpt) (blessing security.Blessings, err error)
+	Bless(ctx *context.T, macaroon string, opts ...rpc.CallOpt) (blessing security.Blessings, err error)
 }
 
 // MacaroonBlesserClientStub adds universal methods to MacaroonBlesserClientMethods.
 type MacaroonBlesserClientStub interface {
 	MacaroonBlesserClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // MacaroonBlesserClient returns a client stub for MacaroonBlesser.
-func MacaroonBlesserClient(name string, opts ...ipc.BindOpt) MacaroonBlesserClientStub {
-	var client ipc.Client
+func MacaroonBlesserClient(name string, opts ...rpc.BindOpt) MacaroonBlesserClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -195,18 +195,18 @@
 
 type implMacaroonBlesserClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implMacaroonBlesserClientStub) c(ctx *context.T) ipc.Client {
+func (c implMacaroonBlesserClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implMacaroonBlesserClientStub) Bless(ctx *context.T, i0 string, opts ...ipc.CallOpt) (o0 security.Blessings, err error) {
-	var call ipc.ClientCall
+func (c implMacaroonBlesserClientStub) Bless(ctx *context.T, i0 string, opts ...rpc.CallOpt) (o0 security.Blessings, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Bless", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -221,11 +221,11 @@
 type MacaroonBlesserServerMethods interface {
 	// Bless uses the provided macaroon (which contains email and caveats)
 	// to return a blessing for the client.
-	Bless(call ipc.ServerCall, macaroon string) (blessing security.Blessings, err error)
+	Bless(call rpc.ServerCall, macaroon string) (blessing security.Blessings, err error)
 }
 
 // MacaroonBlesserServerStubMethods is the server interface containing
-// MacaroonBlesser methods, as expected by ipc.Server.
+// MacaroonBlesser methods, as expected by rpc.Server.
 // There is no difference between this interface and MacaroonBlesserServerMethods
 // since there are no streaming methods.
 type MacaroonBlesserServerStubMethods MacaroonBlesserServerMethods
@@ -234,21 +234,21 @@
 type MacaroonBlesserServerStub interface {
 	MacaroonBlesserServerStubMethods
 	// Describe the MacaroonBlesser interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // MacaroonBlesserServer returns a server stub for MacaroonBlesser.
 // It converts an implementation of MacaroonBlesserServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func MacaroonBlesserServer(impl MacaroonBlesserServerMethods) MacaroonBlesserServerStub {
 	stub := implMacaroonBlesserServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -256,37 +256,37 @@
 
 type implMacaroonBlesserServerStub struct {
 	impl MacaroonBlesserServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implMacaroonBlesserServerStub) Bless(call ipc.ServerCall, i0 string) (security.Blessings, error) {
+func (s implMacaroonBlesserServerStub) Bless(call rpc.ServerCall, i0 string) (security.Blessings, error) {
 	return s.impl.Bless(call, i0)
 }
 
-func (s implMacaroonBlesserServerStub) Globber() *ipc.GlobState {
+func (s implMacaroonBlesserServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implMacaroonBlesserServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{MacaroonBlesserDesc}
+func (s implMacaroonBlesserServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{MacaroonBlesserDesc}
 }
 
 // MacaroonBlesserDesc describes the MacaroonBlesser interface.
-var MacaroonBlesserDesc ipc.InterfaceDesc = descMacaroonBlesser
+var MacaroonBlesserDesc rpc.InterfaceDesc = descMacaroonBlesser
 
 // descMacaroonBlesser hides the desc to keep godoc clean.
-var descMacaroonBlesser = ipc.InterfaceDesc{
+var descMacaroonBlesser = rpc.InterfaceDesc{
 	Name:    "MacaroonBlesser",
 	PkgPath: "v.io/x/ref/services/identity",
 	Doc:     "// MacaroonBlesser returns a blessing given the provided macaroon string.",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Bless",
 			Doc:  "// Bless uses the provided macaroon (which contains email and caveats)\n// to return a blessing for the client.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"macaroon", ``}, // string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"blessing", ``}, // security.Blessings
 			},
 		},
diff --git a/services/identity/server/identityd.go b/services/identity/server/identityd.go
index e6360cf..72c62f2 100644
--- a/services/identity/server/identityd.go
+++ b/services/identity/server/identityd.go
@@ -16,8 +16,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
@@ -101,7 +101,7 @@
 	return 0, nil
 }
 
-func (s *IdentityServer) Serve(ctx *context.T, listenSpec *ipc.ListenSpec, host, httpaddr, tlsconfig string) {
+func (s *IdentityServer) Serve(ctx *context.T, listenSpec *rpc.ListenSpec, host, httpaddr, tlsconfig string) {
 	ctx, err := v23.SetPrincipal(ctx, audit.NewPrincipal(
 		v23.GetPrincipal(ctx), s.auditor))
 	if err != nil {
@@ -115,18 +115,18 @@
 		}
 		httpaddr = net.JoinHostPort(httphost, strconv.Itoa(httpportNum))
 	}
-	ipcServer, _, externalAddr := s.Listen(ctx, listenSpec, host, httpaddr, tlsconfig)
+	rpcServer, _, externalAddr := s.Listen(ctx, listenSpec, host, httpaddr, tlsconfig)
 	fmt.Printf("HTTP_ADDR=%s\n", externalAddr)
 	if len(s.rootedObjectAddrs) > 0 {
 		fmt.Printf("NAME=%s\n", s.rootedObjectAddrs[0].Name())
 	}
 	<-signals.ShutdownOnSignals(ctx)
-	if err := ipcServer.Stop(); err != nil {
-		vlog.Errorf("Failed to stop ipc server: %v", err)
+	if err := rpcServer.Stop(); err != nil {
+		vlog.Errorf("Failed to stop rpc server: %v", err)
 	}
 }
 
-func (s *IdentityServer) Listen(ctx *context.T, listenSpec *ipc.ListenSpec, host, httpaddr, tlsconfig string) (ipc.Server, []string, string) {
+func (s *IdentityServer) Listen(ctx *context.T, listenSpec *rpc.ListenSpec, host, httpaddr, tlsconfig string) (rpc.Server, []string, string) {
 	// Setup handlers
 
 	// json-encoded public key and blessing names of this server
@@ -138,7 +138,7 @@
 		vlog.Fatalf("macaroonKey generation failed: %v", err)
 	}
 
-	ipcServer, published, err := s.setupServices(ctx, listenSpec, macaroonKey)
+	rpcServer, published, err := s.setupServices(ctx, listenSpec, macaroonKey)
 	if err != nil {
 		vlog.Fatalf("Failed to setup vanadium services for blessing: %v", err)
 	}
@@ -187,7 +187,7 @@
 	})
 	vlog.Infof("Running HTTP server at: %v", externalHttpaddr)
 	go runHTTPSServer(httpaddr, tlsconfig)
-	return ipcServer, published, externalHttpaddr
+	return rpcServer, published, externalHttpaddr
 }
 
 func appendSuffixTo(objectname []string, suffix string) []string {
@@ -199,10 +199,10 @@
 }
 
 // Starts the blessing services and the discharging service on the same port.
-func (s *IdentityServer) setupServices(ctx *context.T, listenSpec *ipc.ListenSpec, macaroonKey []byte) (ipc.Server, []string, error) {
+func (s *IdentityServer) setupServices(ctx *context.T, listenSpec *rpc.ListenSpec, macaroonKey []byte) (rpc.Server, []string, error) {
 	server, err := v23.NewServer(ctx)
 	if err != nil {
-		return nil, nil, fmt.Errorf("failed to create new ipc.Server: %v", err)
+		return nil, nil, fmt.Errorf("failed to create new rpc.Server: %v", err)
 	}
 
 	principal := v23.GetPrincipal(ctx)
@@ -228,7 +228,7 @@
 
 // newDispatcher returns a dispatcher for both the blessing and the
 // discharging service.
-func newDispatcher(macaroonKey []byte, blesserParams blesser.OAuthBlesserParams) ipc.Dispatcher {
+func newDispatcher(macaroonKey []byte, blesserParams blesser.OAuthBlesserParams) rpc.Dispatcher {
 	d := dispatcher(map[string]interface{}{
 		macaroonService:     blesser.NewMacaroonBlesserServer(macaroonKey),
 		dischargerService:   services.DischargerServer(discharger.NewDischarger()),
@@ -239,7 +239,7 @@
 	for k, _ := range d {
 		children = append(children, k)
 	}
-	d[""] = ipc.ChildrenGlobberInvoker(children...)
+	d[""] = rpc.ChildrenGlobberInvoker(children...)
 	return d
 }
 
diff --git a/services/mgmt/application/impl/dispatcher.go b/services/mgmt/application/impl/dispatcher.go
index d1029b5..1eb4686 100644
--- a/services/mgmt/application/impl/dispatcher.go
+++ b/services/mgmt/application/impl/dispatcher.go
@@ -3,8 +3,8 @@
 import (
 	"path/filepath"
 
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/security/access"
 	"v.io/v23/verror"
@@ -22,7 +22,7 @@
 
 // NewDispatcher is the dispatcher factory. storeDir is a path to a directory in which to
 // serialize the applicationd state.
-func NewDispatcher(storeDir string) (ipc.Dispatcher, error) {
+func NewDispatcher(storeDir string) (rpc.Dispatcher, error) {
 	store, err := fs.NewMemstore(filepath.Join(storeDir, "applicationdstate.db"))
 	if err != nil {
 		return nil, err
diff --git a/services/mgmt/application/impl/service.go b/services/mgmt/application/impl/service.go
index f5a219d..24b5fef 100644
--- a/services/mgmt/application/impl/service.go
+++ b/services/mgmt/application/impl/service.go
@@ -7,8 +7,8 @@
 	"v.io/x/ref/services/mgmt/lib/fs"
 	"v.io/x/ref/services/mgmt/repository"
 
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/services/mgmt/application"
 	"v.io/v23/services/security/access"
 	"v.io/v23/verror"
@@ -42,7 +42,7 @@
 	return &appRepoService{store: store, storeRoot: storeRoot, suffix: suffix}
 }
 
-func parse(call ipc.ServerCall, suffix string) (string, string, error) {
+func parse(call rpc.ServerCall, suffix string) (string, string, error) {
 	tokens := strings.Split(suffix, "/")
 	switch len(tokens) {
 	case 2:
@@ -54,7 +54,7 @@
 	}
 }
 
-func (i *appRepoService) Match(call ipc.ServerCall, profiles []string) (application.Envelope, error) {
+func (i *appRepoService) Match(call rpc.ServerCall, profiles []string) (application.Envelope, error) {
 	vlog.VI(0).Infof("%v.Match(%v)", i.suffix, profiles)
 	empty := application.Envelope{}
 	name, version, err := parse(call, i.suffix)
@@ -83,7 +83,7 @@
 	return empty, verror.New(ErrNotFound, call.Context())
 }
 
-func (i *appRepoService) Put(call ipc.ServerCall, profiles []string, envelope application.Envelope) error {
+func (i *appRepoService) Put(call rpc.ServerCall, profiles []string, envelope application.Envelope) error {
 	vlog.VI(0).Infof("%v.Put(%v, %v)", i.suffix, profiles, envelope)
 	name, version, err := parse(call, i.suffix)
 	if err != nil {
@@ -115,7 +115,7 @@
 	return nil
 }
 
-func (i *appRepoService) Remove(call ipc.ServerCall, profile string) error {
+func (i *appRepoService) Remove(call rpc.ServerCall, profile string) error {
 	vlog.VI(0).Infof("%v.Remove(%v)", i.suffix, profile)
 	name, version, err := parse(call, i.suffix)
 	if err != nil {
@@ -181,7 +181,7 @@
 	return versions, nil
 }
 
-func (i *appRepoService) GlobChildren__(ipc.ServerCall) (<-chan string, error) {
+func (i *appRepoService) GlobChildren__(rpc.ServerCall) (<-chan string, error) {
 	vlog.VI(0).Infof("%v.GlobChildren__()", i.suffix)
 	i.store.Lock()
 	defer i.store.Unlock()
@@ -227,14 +227,14 @@
 	return ch, nil
 }
 
-func (i *appRepoService) GetPermissions(call ipc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (i *appRepoService) GetPermissions(call rpc.ServerCall) (acl access.Permissions, etag string, err error) {
 	i.store.Lock()
 	defer i.store.Unlock()
 	path := naming.Join("/acls", i.suffix, "data")
 	return getAccessList(i.store, path)
 }
 
-func (i *appRepoService) SetPermissions(call ipc.ServerCall, acl access.Permissions, etag string) error {
+func (i *appRepoService) SetPermissions(call rpc.ServerCall, acl access.Permissions, etag string) error {
 	i.store.Lock()
 	defer i.store.Unlock()
 	path := naming.Join("/acls", i.suffix, "data")
diff --git a/services/mgmt/binary/impl/dispatcher.go b/services/mgmt/binary/impl/dispatcher.go
index 3ad57f8..0adb0cf 100644
--- a/services/mgmt/binary/impl/dispatcher.go
+++ b/services/mgmt/binary/impl/dispatcher.go
@@ -3,7 +3,7 @@
 import (
 	"path/filepath"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/repository"
 
@@ -22,7 +22,7 @@
 }
 
 // NewDispatcher is the dispatcher factory.
-func NewDispatcher(principal security.Principal, state *state) (ipc.Dispatcher, error) {
+func NewDispatcher(principal security.Principal, state *state) (rpc.Dispatcher, error) {
 	return &dispatcher{
 		state:    state,
 		aclstore: acls.NewPathStore(principal),
diff --git a/services/mgmt/binary/impl/service.go b/services/mgmt/binary/impl/service.go
index 3271352..e18290a 100644
--- a/services/mgmt/binary/impl/service.go
+++ b/services/mgmt/binary/impl/service.go
@@ -36,7 +36,7 @@
 	"strings"
 	"syscall"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/binary"
 	"v.io/v23/services/mgmt/repository"
@@ -110,7 +110,7 @@
 	return aclstore.Set(dir, tam, "")
 }
 
-func (i *binaryService) Create(call ipc.ServerCall, nparts int32, mediaInfo repository.MediaInfo) error {
+func (i *binaryService) Create(call rpc.ServerCall, nparts int32, mediaInfo repository.MediaInfo) error {
 	vlog.Infof("%v.Create(%v, %v)", i.suffix, nparts, mediaInfo)
 	if nparts < 1 {
 		return verror.New(ErrInvalidParts, call.Context())
@@ -179,7 +179,7 @@
 	return nil
 }
 
-func (i *binaryService) Delete(call ipc.ServerCall) error {
+func (i *binaryService) Delete(call rpc.ServerCall) error {
 	vlog.Infof("%v.Delete()", i.suffix)
 	if _, err := os.Stat(i.path); err != nil {
 		if os.IsNotExist(err) {
@@ -251,12 +251,12 @@
 
 // TODO(jsimsa): Design and implement an access control mechanism for
 // the URL-based downloads.
-func (i *binaryService) DownloadUrl(ipc.ServerCall) (string, int64, error) {
+func (i *binaryService) DownloadUrl(rpc.ServerCall) (string, int64, error) {
 	vlog.Infof("%v.DownloadUrl()", i.suffix)
 	return i.state.rootURL + "/" + i.suffix, 0, nil
 }
 
-func (i *binaryService) Stat(call ipc.ServerCall) ([]binary.PartInfo, repository.MediaInfo, error) {
+func (i *binaryService) Stat(call rpc.ServerCall) ([]binary.PartInfo, repository.MediaInfo, error) {
 	vlog.Infof("%v.Stat()", i.suffix)
 	result := make([]binary.PartInfo, 0)
 	parts, err := getParts(i.path)
@@ -369,7 +369,7 @@
 	return nil
 }
 
-func (i *binaryService) GlobChildren__(call ipc.ServerCall) (<-chan string, error) {
+func (i *binaryService) GlobChildren__(call rpc.ServerCall) (<-chan string, error) {
 	elems := strings.Split(i.suffix, "/")
 	if len(elems) == 1 && elems[0] == "" {
 		elems = nil
@@ -388,7 +388,7 @@
 	return ch, nil
 }
 
-func (i *binaryService) GetPermissions(call ipc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (i *binaryService) GetPermissions(call rpc.ServerCall) (acl access.Permissions, etag string, err error) {
 
 	acl, etag, err = i.aclstore.Get(aclPath(i.state.rootDir, i.suffix))
 
@@ -410,6 +410,6 @@
 	return acl, etag, err
 }
 
-func (i *binaryService) SetPermissions(_ ipc.ServerCall, acl access.Permissions, etag string) error {
+func (i *binaryService) SetPermissions(_ rpc.ServerCall, acl access.Permissions, etag string) error {
 	return i.aclstore.Set(aclPath(i.state.rootDir, i.suffix), acl, etag)
 }
diff --git a/services/mgmt/build/impl/service.go b/services/mgmt/build/impl/service.go
index 757f987..d963529 100644
--- a/services/mgmt/build/impl/service.go
+++ b/services/mgmt/build/impl/service.go
@@ -9,7 +9,7 @@
 	"path/filepath"
 	"runtime"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/services/mgmt/binary"
 	"v.io/v23/services/mgmt/build"
 	"v.io/v23/verror"
@@ -123,7 +123,7 @@
 	return output.Bytes(), nil
 }
 
-func (i *builderService) Describe(_ ipc.ServerCall, name string) (binary.Description, error) {
+func (i *builderService) Describe(_ rpc.ServerCall, name string) (binary.Description, error) {
 	// TODO(jsimsa): Implement.
 	return binary.Description{}, nil
 }
diff --git a/services/mgmt/debug/dispatcher.go b/services/mgmt/debug/dispatcher.go
index 27b2a36..85b2dfb 100644
--- a/services/mgmt/debug/dispatcher.go
+++ b/services/mgmt/debug/dispatcher.go
@@ -4,7 +4,7 @@
 	"strings"
 	"time"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 
 	logreaderimpl "v.io/x/ref/services/mgmt/logreader/impl"
@@ -19,9 +19,9 @@
 	auth        security.Authorizer
 }
 
-var _ ipc.Dispatcher = (*dispatcher)(nil)
+var _ rpc.Dispatcher = (*dispatcher)(nil)
 
-func NewDispatcher(logsDirFunc func() string, authorizer security.Authorizer) ipc.Dispatcher {
+func NewDispatcher(logsDirFunc func() string, authorizer security.Authorizer) rpc.Dispatcher {
 	return &dispatcher{logsDirFunc, authorizer}
 }
 
@@ -30,7 +30,7 @@
 
 func (d *dispatcher) Lookup(suffix string) (interface{}, security.Authorizer, error) {
 	if suffix == "" {
-		return ipc.ChildrenGlobberInvoker(rootName), d.auth, nil
+		return rpc.ChildrenGlobberInvoker(rootName), d.auth, nil
 	}
 	if !strings.HasPrefix(suffix, rootName) {
 		return nil, nil, nil
@@ -39,7 +39,7 @@
 	suffix = strings.TrimLeft(suffix, "/")
 
 	if suffix == "" {
-		return ipc.ChildrenGlobberInvoker("logs", "pprof", "stats", "vtrace"), d.auth, nil
+		return rpc.ChildrenGlobberInvoker("logs", "pprof", "stats", "vtrace"), d.auth, nil
 	}
 	parts := strings.SplitN(suffix, "/", 2)
 	if len(parts) == 2 {
diff --git a/services/mgmt/debug/dispatcher_test.go b/services/mgmt/debug/dispatcher_test.go
index 9dba828..abc5a57 100644
--- a/services/mgmt/debug/dispatcher_test.go
+++ b/services/mgmt/debug/dispatcher_test.go
@@ -14,8 +14,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/services/mgmt/logreader"
 	"v.io/v23/services/mgmt/stats"
 	vtracesvc "v.io/v23/services/mgmt/vtrace"
@@ -30,7 +30,7 @@
 )
 
 // startDebugServer starts a debug server.
-func startDebugServer(ctx *context.T, listenSpec ipc.ListenSpec, logsDir string) (string, func(), error) {
+func startDebugServer(ctx *context.T, listenSpec rpc.ListenSpec, logsDir string) (string, func(), error) {
 	if len(logsDir) == 0 {
 		return "", nil, fmt.Errorf("logs directory missing")
 	}
diff --git a/services/mgmt/device/config.vdl.go b/services/mgmt/device/config.vdl.go
index 726445e..f907058 100644
--- a/services/mgmt/device/config.vdl.go
+++ b/services/mgmt/device/config.vdl.go
@@ -7,7 +7,7 @@
 	// VDL system imports
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 )
 
 // ConfigClientMethods is the client interface
@@ -16,20 +16,20 @@
 // Config is an RPC API to the config service.
 type ConfigClientMethods interface {
 	// Set sets the value for key.
-	Set(ctx *context.T, key string, value string, opts ...ipc.CallOpt) error
+	Set(ctx *context.T, key string, value string, opts ...rpc.CallOpt) error
 }
 
 // ConfigClientStub adds universal methods to ConfigClientMethods.
 type ConfigClientStub interface {
 	ConfigClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // ConfigClient returns a client stub for Config.
-func ConfigClient(name string, opts ...ipc.BindOpt) ConfigClientStub {
-	var client ipc.Client
+func ConfigClient(name string, opts ...rpc.BindOpt) ConfigClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -38,18 +38,18 @@
 
 type implConfigClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implConfigClientStub) c(ctx *context.T) ipc.Client {
+func (c implConfigClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implConfigClientStub) Set(ctx *context.T, i0 string, i1 string, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implConfigClientStub) Set(ctx *context.T, i0 string, i1 string, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Set", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -63,11 +63,11 @@
 // Config is an RPC API to the config service.
 type ConfigServerMethods interface {
 	// Set sets the value for key.
-	Set(call ipc.ServerCall, key string, value string) error
+	Set(call rpc.ServerCall, key string, value string) error
 }
 
 // ConfigServerStubMethods is the server interface containing
-// Config methods, as expected by ipc.Server.
+// Config methods, as expected by rpc.Server.
 // There is no difference between this interface and ConfigServerMethods
 // since there are no streaming methods.
 type ConfigServerStubMethods ConfigServerMethods
@@ -76,21 +76,21 @@
 type ConfigServerStub interface {
 	ConfigServerStubMethods
 	// Describe the Config interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // ConfigServer returns a server stub for Config.
 // It converts an implementation of ConfigServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func ConfigServer(impl ConfigServerMethods) ConfigServerStub {
 	stub := implConfigServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -98,34 +98,34 @@
 
 type implConfigServerStub struct {
 	impl ConfigServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implConfigServerStub) Set(call ipc.ServerCall, i0 string, i1 string) error {
+func (s implConfigServerStub) Set(call rpc.ServerCall, i0 string, i1 string) error {
 	return s.impl.Set(call, i0, i1)
 }
 
-func (s implConfigServerStub) Globber() *ipc.GlobState {
+func (s implConfigServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implConfigServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{ConfigDesc}
+func (s implConfigServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{ConfigDesc}
 }
 
 // ConfigDesc describes the Config interface.
-var ConfigDesc ipc.InterfaceDesc = descConfig
+var ConfigDesc rpc.InterfaceDesc = descConfig
 
 // descConfig hides the desc to keep godoc clean.
-var descConfig = ipc.InterfaceDesc{
+var descConfig = rpc.InterfaceDesc{
 	Name:    "Config",
 	PkgPath: "v.io/x/ref/services/mgmt/device",
 	Doc:     "// Config is an RPC API to the config service.",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Set",
 			Doc:  "// Set sets the value for key.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"key", ``},   // string
 				{"value", ``}, // string
 			},
diff --git a/services/mgmt/device/deviced/server.go b/services/mgmt/device/deviced/server.go
index c023c82..f11bfc3 100644
--- a/services/mgmt/device/deviced/server.go
+++ b/services/mgmt/device/deviced/server.go
@@ -20,8 +20,8 @@
 	"v.io/x/ref/services/mgmt/device/starter"
 
 	"v.io/v23"
-	"v.io/v23/ipc"
 	"v.io/v23/mgmt"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 )
 
@@ -68,7 +68,7 @@
 		AccessListFile: filepath.Join(mtAclDir, "acls"),
 	}
 	if testMode {
-		ns.ListenSpec = ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
+		ns.ListenSpec = rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
 	} else {
 		ns.ListenSpec = v23.GetListenSpec(ctx)
 		ns.Name = *publishAs
@@ -94,7 +94,7 @@
 		PairingToken:    pairingToken,
 	}
 	if testMode {
-		dev.ListenSpec = ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
+		dev.ListenSpec = rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
 	} else {
 		if dev.ListenSpec, err = derivedListenSpec(ns.ListenSpec, *dmPort); err != nil {
 			return err
@@ -124,7 +124,7 @@
 }
 
 // derivedListenSpec returns a copy of ls, with the ports changed to port.
-func derivedListenSpec(ls ipc.ListenSpec, port int) (ipc.ListenSpec, error) {
+func derivedListenSpec(ls rpc.ListenSpec, port int) (rpc.ListenSpec, error) {
 	orig := ls.Addrs
 	ls.Addrs = nil
 	for _, a := range orig {
diff --git a/services/mgmt/device/impl/app_service.go b/services/mgmt/device/impl/app_service.go
index e7bc4da..2d4881a 100644
--- a/services/mgmt/device/impl/app_service.go
+++ b/services/mgmt/device/impl/app_service.go
@@ -136,9 +136,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/mgmt"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/appcycle"
 	"v.io/v23/services/mgmt/application"
@@ -404,11 +404,11 @@
 	return versionDir, updateLink(versionDir, filepath.Join(installationDir, "current"))
 }
 
-func (i *appService) Install(call ipc.ServerCall, applicationVON string, config device.Config, packages application.Packages) (string, error) {
+func (i *appService) Install(call rpc.ServerCall, applicationVON string, config device.Config, packages application.Packages) (string, error) {
 	if len(i.suffix) > 0 {
 		return "", verror.New(ErrInvalidSuffix, call.Context())
 	}
-	ctx, cancel := context.WithTimeout(call.Context(), ipcContextLongTimeout)
+	ctx, cancel := context.WithTimeout(call.Context(), rpcContextLongTimeout)
 	defer cancel()
 	envelope, err := fetchAppEnvelope(ctx, applicationVON)
 	if err != nil {
@@ -471,12 +471,12 @@
 	return naming.Join(envelope.Title, installationID), nil
 }
 
-func (*appService) Refresh(ipc.ServerCall) error {
+func (*appService) Refresh(rpc.ServerCall) error {
 	// TODO(jsimsa): Implement.
 	return nil
 }
 
-func (*appService) Restart(ipc.ServerCall) error {
+func (*appService) Restart(rpc.ServerCall) error {
 	// TODO(jsimsa): Implement.
 	return nil
 }
@@ -960,7 +960,7 @@
 	return instanceDir(i.config.Root, i.suffix)
 }
 
-func (i *appService) Resume(call ipc.ServerCall) error {
+func (i *appService) Resume(call rpc.ServerCall) error {
 	instanceDir, err := i.instanceDir()
 	if err != nil {
 		return err
@@ -980,7 +980,7 @@
 
 func stopAppRemotely(ctx *context.T, appVON string) error {
 	appStub := appcycle.AppCycleClient(appVON)
-	ctx, cancel := context.WithTimeout(ctx, ipcContextLongTimeout)
+	ctx, cancel := context.WithTimeout(ctx, rpcContextLongTimeout)
 	defer cancel()
 	stream, err := appStub.Stop(ctx)
 	if err != nil {
@@ -1013,7 +1013,7 @@
 
 // TODO(caprita): implement deadline for Stop.
 
-func (i *appService) Stop(call ipc.ServerCall, deadline uint32) error {
+func (i *appService) Stop(call rpc.ServerCall, deadline uint32) error {
 	instanceDir, err := i.instanceDir()
 	if err != nil {
 		return err
@@ -1031,7 +1031,7 @@
 	return transitionInstance(instanceDir, stopping, stopped)
 }
 
-func (i *appService) Suspend(call ipc.ServerCall) error {
+func (i *appService) Suspend(call rpc.ServerCall) error {
 	instanceDir, err := i.instanceDir()
 	if err != nil {
 		return err
@@ -1046,7 +1046,7 @@
 	return transitionInstance(instanceDir, suspending, suspended)
 }
 
-func (i *appService) Uninstall(ipc.ServerCall) error {
+func (i *appService) Uninstall(rpc.ServerCall) error {
 	installationDir, err := i.installationDir()
 	if err != nil {
 		return err
@@ -1096,7 +1096,7 @@
 	if err != nil {
 		return err
 	}
-	ctx, cancel := context.WithTimeout(ctx, ipcContextLongTimeout)
+	ctx, cancel := context.WithTimeout(ctx, rpcContextLongTimeout)
 	defer cancel()
 	newEnvelope, err := fetchAppEnvelope(ctx, originVON)
 	if err != nil {
@@ -1133,7 +1133,7 @@
 	return nil
 }
 
-func (i *appService) Update(call ipc.ServerCall) error {
+func (i *appService) Update(call rpc.ServerCall) error {
 	if installationDir, err := i.installationDir(); err == nil {
 		return updateInstallation(call.Context(), installationDir)
 	}
@@ -1143,12 +1143,12 @@
 	return verror.New(ErrInvalidSuffix, nil)
 }
 
-func (*appService) UpdateTo(_ ipc.ServerCall, von string) error {
+func (*appService) UpdateTo(_ rpc.ServerCall, von string) error {
 	// TODO(jsimsa): Implement.
 	return nil
 }
 
-func (i *appService) Revert(call ipc.ServerCall) error {
+func (i *appService) Revert(call rpc.ServerCall) error {
 	installationDir, err := i.installationDir()
 	if err != nil {
 		return err
@@ -1280,7 +1280,7 @@
 	}
 }
 
-func (i *appService) GlobChildren__(call ipc.ServerCall) (<-chan string, error) {
+func (i *appService) GlobChildren__(call rpc.ServerCall) (<-chan string, error) {
 	tree := newTreeNode()
 	switch len(i.suffix) {
 	case 0:
@@ -1334,7 +1334,7 @@
 }
 
 // TODO(rjkroege): Consider maintaining an in-memory Permissions cache.
-func (i *appService) SetPermissions(call ipc.ServerCall, acl access.Permissions, etag string) error {
+func (i *appService) SetPermissions(call rpc.ServerCall, acl access.Permissions, etag string) error {
 	dir, isInstance, err := dirFromSuffix(i.suffix, i.config.Root)
 	if err != nil {
 		return err
@@ -1347,7 +1347,7 @@
 	return i.aclstore.Set(path.Join(dir, "acls"), acl, etag)
 }
 
-func (i *appService) GetPermissions(call ipc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (i *appService) GetPermissions(call rpc.ServerCall) (acl access.Permissions, etag string, err error) {
 	dir, _, err := dirFromSuffix(i.suffix, i.config.Root)
 	if err != nil {
 		return nil, "", err
@@ -1355,7 +1355,7 @@
 	return i.aclstore.Get(path.Join(dir, "acls"))
 }
 
-func (i *appService) Debug(call ipc.ServerCall) (string, error) {
+func (i *appService) Debug(call rpc.ServerCall) (string, error) {
 	switch len(i.suffix) {
 	case 2:
 		return i.installationDebug(call)
@@ -1366,7 +1366,7 @@
 	}
 }
 
-func (i *appService) installationDebug(call ipc.ServerCall) (string, error) {
+func (i *appService) installationDebug(call rpc.ServerCall) (string, error) {
 	const installationDebug = `Installation dir: {{.InstallationDir}}
 
 Origin: {{.Origin}}
@@ -1418,7 +1418,7 @@
 
 }
 
-func (i *appService) instanceDebug(call ipc.ServerCall) (string, error) {
+func (i *appService) instanceDebug(call rpc.ServerCall) (string, error) {
 	const instanceDebug = `Instance dir: {{.InstanceDir}}
 
 System name / start system name: {{.SystemName}} / {{.StartSystemName}}
diff --git a/services/mgmt/device/impl/callback.go b/services/mgmt/device/impl/callback.go
index d8e095b..b1d1b53 100644
--- a/services/mgmt/device/impl/callback.go
+++ b/services/mgmt/device/impl/callback.go
@@ -22,7 +22,7 @@
 			return
 		}
 		client := device.ConfigClient(callbackName)
-		ctx, cancel := context.WithTimeout(ctx, ipcContextTimeout)
+		ctx, cancel := context.WithTimeout(ctx, rpcContextTimeout)
 		defer cancel()
 		if err := client.Set(ctx, mgmt.ChildNameConfigKey, name); err != nil {
 			vlog.Fatalf("Set(%v, %v) failed: %v", mgmt.ChildNameConfigKey, name, err)
diff --git a/services/mgmt/device/impl/claim.go b/services/mgmt/device/impl/claim.go
index d577aff..1fb3dfd 100644
--- a/services/mgmt/device/impl/claim.go
+++ b/services/mgmt/device/impl/claim.go
@@ -5,7 +5,7 @@
 	"sync"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/security/access"
 	"v.io/v23/verror"
@@ -14,7 +14,7 @@
 )
 
 // claimable implements the device.Claimable RPC interface and the
-// ipc.Dispatcher and security.Authorizer to serve it.
+// rpc.Dispatcher and security.Authorizer to serve it.
 //
 // It allows the Claim RPC to be successfully invoked exactly once.
 type claimable struct {
@@ -29,7 +29,7 @@
 	mu sync.Mutex
 }
 
-func (c *claimable) Claim(call ipc.ServerCall, pairingToken string) error {
+func (c *claimable) Claim(call rpc.ServerCall, pairingToken string) error {
 	// Verify that the claimer pairing tokens match that of the device manager.
 	if subtle.ConstantTimeCompare([]byte(pairingToken), []byte(c.token)) != 1 {
 		return verror.New(ErrInvalidPairingToken, call.Context())
diff --git a/services/mgmt/device/impl/config_service.go b/services/mgmt/device/impl/config_service.go
index 819cf28..f4fdb29 100644
--- a/services/mgmt/device/impl/config_service.go
+++ b/services/mgmt/device/impl/config_service.go
@@ -11,8 +11,8 @@
 	"sync"
 	"time"
 
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/verror"
 )
 
@@ -133,7 +133,7 @@
 	suffix string
 }
 
-func (i *configService) Set(_ ipc.ServerCall, key, value string) error {
+func (i *configService) Set(_ rpc.ServerCall, key, value string) error {
 	id := i.suffix
 	i.callback.Lock()
 	if _, ok := i.callback.channels[id]; !ok {
diff --git a/services/mgmt/device/impl/device_service.go b/services/mgmt/device/impl/device_service.go
index 51adb75..784d029 100644
--- a/services/mgmt/device/impl/device_service.go
+++ b/services/mgmt/device/impl/device_service.go
@@ -49,9 +49,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/mgmt"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/application"
 	"v.io/v23/services/mgmt/binary"
@@ -231,11 +231,11 @@
 	return args, nil
 }
 
-func (*deviceService) Describe(ipc.ServerCall) (device.Description, error) {
+func (*deviceService) Describe(rpc.ServerCall) (device.Description, error) {
 	return Describe()
 }
 
-func (*deviceService) IsRunnable(_ ipc.ServerCall, description binary.Description) (bool, error) {
+func (*deviceService) IsRunnable(_ rpc.ServerCall, description binary.Description) (bool, error) {
 	deviceProfile, err := ComputeDeviceProfile()
 	if err != nil {
 		return false, err
@@ -252,7 +252,7 @@
 	return len(result.Profiles) > 0, nil
 }
 
-func (*deviceService) Reset(call ipc.ServerCall, deadline uint64) error {
+func (*deviceService) Reset(call rpc.ServerCall, deadline uint64) error {
 	// TODO(jsimsa): Implement.
 	return nil
 }
@@ -546,25 +546,25 @@
 	return nil
 }
 
-func (*deviceService) Install(call ipc.ServerCall, _ string, _ device.Config, _ application.Packages) (string, error) {
+func (*deviceService) Install(call rpc.ServerCall, _ string, _ device.Config, _ application.Packages) (string, error) {
 	return "", verror.New(ErrInvalidSuffix, call.Context())
 }
 
-func (*deviceService) Refresh(ipc.ServerCall) error {
+func (*deviceService) Refresh(rpc.ServerCall) error {
 	// TODO(jsimsa): Implement.
 	return nil
 }
 
-func (*deviceService) Restart(ipc.ServerCall) error {
+func (*deviceService) Restart(rpc.ServerCall) error {
 	// TODO(jsimsa): Implement.
 	return nil
 }
 
-func (*deviceService) Resume(call ipc.ServerCall) error {
+func (*deviceService) Resume(call rpc.ServerCall) error {
 	return verror.New(ErrInvalidSuffix, call.Context())
 }
 
-func (s *deviceService) Revert(call ipc.ServerCall) error {
+func (s *deviceService) Revert(call rpc.ServerCall) error {
 	if s.config.Previous == "" {
 		return verror.New(ErrUpdateNoOp, call.Context(), fmt.Sprintf("Revert failed: no previous version"))
 	}
@@ -583,12 +583,12 @@
 	return verror.New(ErrInvalidSuffix, call.Context())
 }
 
-func (*deviceService) Stop(call ipc.ServerCall, _ uint32) error {
+func (*deviceService) Stop(call rpc.ServerCall, _ uint32) error {
 	v23.GetAppCycle(call.Context()).Stop()
 	return nil
 }
 
-func (s *deviceService) Suspend(call ipc.ServerCall) error {
+func (s *deviceService) Suspend(call rpc.ServerCall) error {
 	// TODO(caprita): move this to Restart and disable Suspend for device
 	// manager?
 	if s.restartHandler != nil {
@@ -598,12 +598,12 @@
 	return nil
 }
 
-func (*deviceService) Uninstall(call ipc.ServerCall) error {
+func (*deviceService) Uninstall(call rpc.ServerCall) error {
 	return verror.New(ErrInvalidSuffix, call.Context())
 }
 
-func (s *deviceService) Update(call ipc.ServerCall) error {
-	ctx, cancel := context.WithTimeout(call.Context(), ipcContextLongTimeout)
+func (s *deviceService) Update(call rpc.ServerCall) error {
+	ctx, cancel := context.WithTimeout(call.Context(), rpcContextLongTimeout)
 	defer cancel()
 
 	updatingState := s.updating
@@ -618,24 +618,24 @@
 	return err
 }
 
-func (*deviceService) UpdateTo(ipc.ServerCall, string) error {
+func (*deviceService) UpdateTo(rpc.ServerCall, string) error {
 	// TODO(jsimsa): Implement.
 	return nil
 }
 
-func (s *deviceService) SetPermissions(_ ipc.ServerCall, acl access.Permissions, etag string) error {
+func (s *deviceService) SetPermissions(_ rpc.ServerCall, acl access.Permissions, etag string) error {
 	d := aclDir(s.disp.config)
 	return s.disp.aclstore.Set(d, acl, etag)
 }
 
-func (s *deviceService) GetPermissions(ipc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (s *deviceService) GetPermissions(rpc.ServerCall) (acl access.Permissions, etag string, err error) {
 	d := aclDir(s.disp.config)
 	return s.disp.aclstore.Get(d)
 }
 
 // TODO(rjkroege): Make it possible for users on the same system to also
 // associate their accounts with their identities.
-func (s *deviceService) AssociateAccount(call ipc.ServerCall, identityNames []string, accountName string) error {
+func (s *deviceService) AssociateAccount(call rpc.ServerCall, identityNames []string, accountName string) error {
 	if accountName == "" {
 		return s.uat.DisassociateSystemAccountForBlessings(identityNames)
 	}
@@ -643,7 +643,7 @@
 	return s.uat.AssociateSystemAccountForBlessings(identityNames, accountName)
 }
 
-func (s *deviceService) ListAssociations(call ipc.ServerCall) (associations []device.Association, err error) {
+func (s *deviceService) ListAssociations(call rpc.ServerCall) (associations []device.Association, err error) {
 	// Temporary code. Dump this.
 	if vlog.V(2) {
 		b, r := security.BlessingNames(call.Context(), security.CallSideRemote)
@@ -655,6 +655,6 @@
 	return s.uat.AllBlessingSystemAssociations()
 }
 
-func (*deviceService) Debug(ipc.ServerCall) (string, error) {
+func (*deviceService) Debug(rpc.ServerCall) (string, error) {
 	return "Not implemented", nil
 }
diff --git a/services/mgmt/device/impl/dispatcher.go b/services/mgmt/device/impl/dispatcher.go
index e8979b0..e27a0ca 100644
--- a/services/mgmt/device/impl/dispatcher.go
+++ b/services/mgmt/device/impl/dispatcher.go
@@ -17,8 +17,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/device"
 	"v.io/v23/services/mgmt/pprof"
@@ -58,7 +58,7 @@
 	reap reaper
 }
 
-var _ ipc.Dispatcher = (*dispatcher)(nil)
+var _ rpc.Dispatcher = (*dispatcher)(nil)
 
 const (
 	appsSuffix   = "apps"
@@ -81,12 +81,12 @@
 	ErrDeviceAlreadyClaimed = verror.Register(pkgPath+".AlreadyClaimed", verror.NoRetry, "{1:}{2:} device has already been claimed")
 )
 
-// NewClaimableDispatcher returns an ipc.Dispatcher that allows the device to
+// NewClaimableDispatcher returns an rpc.Dispatcher that allows the device to
 // be Claimed if it hasn't been already and a channel that will be closed once
 // the device has been claimed.
 //
 // It returns (nil, nil) if the device is no longer claimable.
-func NewClaimableDispatcher(ctx *context.T, config *config.State, pairingToken string) (ipc.Dispatcher, <-chan struct{}) {
+func NewClaimableDispatcher(ctx *context.T, config *config.State, pairingToken string) (rpc.Dispatcher, <-chan struct{}) {
 	var (
 		aclDir   = aclDir(config)
 		aclstore = acls.NewPathStore(v23.GetPrincipal(ctx))
@@ -102,7 +102,7 @@
 }
 
 // NewDispatcher is the device manager dispatcher factory.
-func NewDispatcher(ctx *context.T, config *config.State, mtAddress string, testMode bool, restartHandler func()) (ipc.Dispatcher, error) {
+func NewDispatcher(ctx *context.T, config *config.State, mtAddress string, testMode bool, restartHandler func()) (rpc.Dispatcher, error) {
 	if err := config.Validate(); err != nil {
 		return nil, fmt.Errorf("invalid config %v: %v", config, err)
 	}
@@ -145,32 +145,32 @@
 }
 
 // Shutdown the dispatcher.
-func Shutdown(ipcd ipc.Dispatcher) {
-	switch d := ipcd.(type) {
+func Shutdown(rpcd rpc.Dispatcher) {
+	switch d := rpcd.(type) {
 	case *dispatcher:
 		d.reap.shutdown()
 	case *testModeDispatcher:
 		Shutdown(d.realDispatcher)
 	default:
-		vlog.Panicf("%v not a supported dispatcher type.", ipcd)
+		vlog.Panicf("%v not a supported dispatcher type.", rpcd)
 	}
 }
 
 // Logging invoker that logs any error messages before returning.
-func newLoggingInvoker(obj interface{}) (ipc.Invoker, error) {
-	if invoker, ok := obj.(ipc.Invoker); ok {
+func newLoggingInvoker(obj interface{}) (rpc.Invoker, error) {
+	if invoker, ok := obj.(rpc.Invoker); ok {
 		return &loggingInvoker{invoker}, nil
 	}
-	invoker, err := ipc.ReflectInvoker(obj)
+	invoker, err := rpc.ReflectInvoker(obj)
 	if err != nil {
-		vlog.Errorf("ipc.ReflectInvoker returned error: %v", err)
+		vlog.Errorf("rpc.ReflectInvoker returned error: %v", err)
 		return nil, err
 	}
 	return &loggingInvoker{invoker}, nil
 }
 
 type loggingInvoker struct {
-	invoker ipc.Invoker
+	invoker rpc.Invoker
 }
 
 func (l *loggingInvoker) Prepare(method string, numArgs int) (argptrs []interface{}, tags []*vdl.Value, err error) {
@@ -181,7 +181,7 @@
 	return
 }
 
-func (l *loggingInvoker) Invoke(method string, inCall ipc.StreamServerCall, argptrs []interface{}) (results []interface{}, err error) {
+func (l *loggingInvoker) Invoke(method string, inCall rpc.StreamServerCall, argptrs []interface{}) (results []interface{}, err error) {
 	results, err = l.invoker.Invoke(method, inCall, argptrs)
 	if err != nil {
 		vlog.Errorf("Invoke(method:%s argptrs:%v) returned error: %v", method, argptrs, err)
@@ -189,7 +189,7 @@
 	return
 }
 
-func (l *loggingInvoker) Signature(call ipc.ServerCall) ([]signature.Interface, error) {
+func (l *loggingInvoker) Signature(call rpc.ServerCall) ([]signature.Interface, error) {
 	sig, err := l.invoker.Signature(call)
 	if err != nil {
 		vlog.Errorf("Signature returned error: %v", err)
@@ -197,7 +197,7 @@
 	return sig, err
 }
 
-func (l *loggingInvoker) MethodSignature(call ipc.ServerCall, method string) (signature.Method, error) {
+func (l *loggingInvoker) MethodSignature(call rpc.ServerCall, method string) (signature.Method, error) {
 	methodSig, err := l.invoker.MethodSignature(call, method)
 	if err != nil {
 		vlog.Errorf("MethodSignature(%s) returned error: %v", method, err)
@@ -205,7 +205,7 @@
 	return methodSig, err
 }
 
-func (l *loggingInvoker) Globber() *ipc.GlobState {
+func (l *loggingInvoker) Globber() *rpc.GlobState {
 	return l.invoker.Globber()
 }
 
@@ -251,7 +251,7 @@
 	}
 
 	if len(components) == 0 {
-		return ipc.ChildrenGlobberInvoker(deviceSuffix, appsSuffix), auth, nil
+		return rpc.ChildrenGlobberInvoker(deviceSuffix, appsSuffix), auth, nil
 	}
 	// The implementation of the device manager is split up into several
 	// invokers, which are instantiated depending on the receiver name
@@ -295,7 +295,7 @@
 				if !instanceStateIs(appInstanceDir, started) {
 					return nil, nil, verror.New(ErrInvalidSuffix, nil)
 				}
-				var desc []ipc.InterfaceDesc
+				var desc []rpc.InterfaceDesc
 				switch kind {
 				case "pprof":
 					desc = pprof.PProfServer(nil).Describe__()
@@ -353,7 +353,7 @@
 // exact same object as the real dispatcher, but the authorizer only allows
 // calls to "device".Stop().
 type testModeDispatcher struct {
-	realDispatcher ipc.Dispatcher
+	realDispatcher rpc.Dispatcher
 }
 
 func (d *testModeDispatcher) Lookup(suffix string) (interface{}, security.Authorizer, error) {
diff --git a/services/mgmt/device/impl/helper_manager.go b/services/mgmt/device/impl/helper_manager.go
index 231ec8c..870be30 100644
--- a/services/mgmt/device/impl/helper_manager.go
+++ b/services/mgmt/device/impl/helper_manager.go
@@ -5,7 +5,7 @@
 	"os"
 	"os/user"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
@@ -58,7 +58,7 @@
 // devicemanager will use to invoke apps.
 // TODO(rjkroege): This code assumes a desktop target and will need
 // to be reconsidered for embedded contexts.
-func (i suidHelperState) usernameForPrincipal(call ipc.ServerCall, uat BlessingSystemAssociationStore) string {
+func (i suidHelperState) usernameForPrincipal(call rpc.ServerCall, uat BlessingSystemAssociationStore) string {
 	identityNames, _ := security.BlessingNames(call.Context(), security.CallSideRemote)
 	systemName, present := uat.SystemAccountForBlessings(identityNames)
 
diff --git a/services/mgmt/device/impl/impl_test.go b/services/mgmt/device/impl/impl_test.go
index b3978bd..c2cdca1 100644
--- a/services/mgmt/device/impl/impl_test.go
+++ b/services/mgmt/device/impl/impl_test.go
@@ -29,9 +29,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/mgmt"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/application"
 	"v.io/v23/services/mgmt/device"
@@ -173,11 +173,11 @@
 	shutdownChan := signals.ShutdownOnSignals(ctx)
 	stop, err := starter.Start(ctx, starter.Args{
 		Namespace: starter.NamespaceArgs{
-			ListenSpec: ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}},
+			ListenSpec: rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}},
 		},
 		Device: starter.DeviceArgs{
 			Name:            publishName,
-			ListenSpec:      ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}},
+			ListenSpec:      rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}},
 			ConfigState:     configState,
 			TestMode:        strings.HasSuffix(fmt.Sprint(v23.GetPrincipal(ctx).BlessingStore().Default()), "/testdm"),
 			RestartCallback: func() { fmt.Println("restart handler") },
@@ -217,11 +217,11 @@
 // interact with an active service.
 type appService struct{}
 
-func (appService) Echo(_ ipc.ServerCall, message string) (string, error) {
+func (appService) Echo(_ rpc.ServerCall, message string) (string, error) {
 	return message, nil
 }
 
-func (appService) Cat(_ ipc.ServerCall, file string) (string, error) {
+func (appService) Cat(_ rpc.ServerCall, file string) (string, error) {
 	if file == "" || file[0] == filepath.Separator || file[0] == '.' {
 		return "", fmt.Errorf("illegal file name: %q", file)
 	}
@@ -535,7 +535,7 @@
 // TODO(caprita): Set the timeout in a more principled manner.
 const pingTimeout = 60 * time.Second
 
-func (p pingServer) Ping(_ ipc.ServerCall, arg pingArgs) error {
+func (p pingServer) Ping(_ rpc.ServerCall, arg pingArgs) error {
 	p <- arg
 	return nil
 }
@@ -1175,7 +1175,7 @@
 			"apps/google naps/" + install1ID + "/" + instance1ID + "/logs/" + appName + ".<*>.INFO.<timestamp>",
 			"apps/google naps/" + install1ID + "/" + instance1ID + "/pprof",
 			"apps/google naps/" + install1ID + "/" + instance1ID + "/stats",
-			"apps/google naps/" + install1ID + "/" + instance1ID + "/stats/ipc",
+			"apps/google naps/" + install1ID + "/" + instance1ID + "/stats/rpc",
 			"apps/google naps/" + install1ID + "/" + instance1ID + "/stats/system",
 			"apps/google naps/" + install1ID + "/" + instance1ID + "/stats/system/start-time-rfc1123",
 			"apps/google naps/" + install1ID + "/" + instance1ID + "/stats/system/start-time-unix",
diff --git a/services/mgmt/device/impl/mock_repo_test.go b/services/mgmt/device/impl/mock_repo_test.go
index 90f39c4..be0d8ce 100644
--- a/services/mgmt/device/impl/mock_repo_test.go
+++ b/services/mgmt/device/impl/mock_repo_test.go
@@ -11,7 +11,7 @@
 	"testing"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/services/mgmt/application"
 	"v.io/v23/services/mgmt/binary"
 	"v.io/v23/services/mgmt/repository"
@@ -64,7 +64,7 @@
 }
 
 // APPLICATION REPOSITORY INTERFACE IMPLEMENTATION
-func (i *arInvoker) Match(_ ipc.ServerCall, profiles []string) (application.Envelope, error) {
+func (i *arInvoker) Match(_ rpc.ServerCall, profiles []string) (application.Envelope, error) {
 	vlog.VI(1).Infof("Match()")
 	if want := []string{"test-profile"}; !reflect.DeepEqual(profiles, want) {
 		return application.Envelope{}, fmt.Errorf("Expected profiles %v, got %v", want, profiles)
@@ -72,11 +72,11 @@
 	return i.envelope, nil
 }
 
-func (i *arInvoker) GetPermissions(ipc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (i *arInvoker) GetPermissions(rpc.ServerCall) (acl access.Permissions, etag string, err error) {
 	return nil, "", nil
 }
 
-func (i *arInvoker) SetPermissions(_ ipc.ServerCall, acl access.Permissions, etag string) error {
+func (i *arInvoker) SetPermissions(_ rpc.ServerCall, acl access.Permissions, etag string) error {
 	return nil
 }
 
@@ -106,12 +106,12 @@
 
 var ErrOperationFailed = verror.Register(pkgPath+".OperationFailed", verror.NoRetry, "")
 
-func (*brInvoker) Create(ipc.ServerCall, int32, repository.MediaInfo) error {
+func (*brInvoker) Create(rpc.ServerCall, int32, repository.MediaInfo) error {
 	vlog.VI(1).Infof("Create()")
 	return nil
 }
 
-func (i *brInvoker) Delete(ipc.ServerCall) error {
+func (i *brInvoker) Delete(rpc.ServerCall) error {
 	vlog.VI(1).Infof("Delete()")
 	return nil
 }
@@ -144,12 +144,12 @@
 	}
 }
 
-func (*brInvoker) DownloadUrl(ipc.ServerCall) (string, int64, error) {
+func (*brInvoker) DownloadUrl(rpc.ServerCall) (string, int64, error) {
 	vlog.VI(1).Infof("DownloadUrl()")
 	return "", 0, nil
 }
 
-func (*brInvoker) Stat(call ipc.ServerCall) ([]binary.PartInfo, repository.MediaInfo, error) {
+func (*brInvoker) Stat(call rpc.ServerCall) ([]binary.PartInfo, repository.MediaInfo, error) {
 	vlog.VI(1).Infof("Stat()")
 	h := md5.New()
 	bytes, err := ioutil.ReadFile(os.Args[0])
@@ -166,10 +166,10 @@
 	return nil
 }
 
-func (i *brInvoker) GetPermissions(call ipc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (i *brInvoker) GetPermissions(call rpc.ServerCall) (acl access.Permissions, etag string, err error) {
 	return nil, "", nil
 }
 
-func (i *brInvoker) SetPermissions(call ipc.ServerCall, acl access.Permissions, etag string) error {
+func (i *brInvoker) SetPermissions(call rpc.ServerCall, acl access.Permissions, etag string) error {
 	return nil
 }
diff --git a/services/mgmt/device/impl/only_for_test.go b/services/mgmt/device/impl/only_for_test.go
index bcda135..ac65b44 100644
--- a/services/mgmt/device/impl/only_for_test.go
+++ b/services/mgmt/device/impl/only_for_test.go
@@ -6,7 +6,7 @@
 	"os"
 	"path/filepath"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/services/mgmt/device"
 	"v.io/x/lib/vlog"
 )
@@ -22,7 +22,7 @@
 	return len(c.channels) > 0
 }
 
-func DispatcherLeaking(d ipc.Dispatcher) bool {
+func DispatcherLeaking(d rpc.Dispatcher) bool {
 	switch obj := d.(type) {
 	case *dispatcher:
 		return obj.internal.callback.leaking()
diff --git a/services/mgmt/device/impl/proxy_invoker.go b/services/mgmt/device/impl/proxy_invoker.go
index 8399efa..107377a 100644
--- a/services/mgmt/device/impl/proxy_invoker.go
+++ b/services/mgmt/device/impl/proxy_invoker.go
@@ -6,8 +6,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/services/security/access"
 	"v.io/v23/vdl"
 	"v.io/v23/vdlroot/signature"
@@ -15,7 +15,7 @@
 )
 
 var (
-	errCantUpgradeServerCall = verror.Register(pkgPath+".errCantUpgradeServerCall", verror.NoRetry, "{1:}{2:} couldn't upgrade ipc.ServerCall to ipc.StreamServerCall{:_}")
+	errCantUpgradeServerCall = verror.Register(pkgPath+".errCantUpgradeServerCall", verror.NoRetry, "{1:}{2:} couldn't upgrade rpc.ServerCall to rpc.StreamServerCall{:_}")
 	errBadNumberOfResults    = verror.Register(pkgPath+".errBadNumberOfResults", verror.NoRetry, "{1:}{2:} unexpected number of result values. Got {3}, want 2.{:_}")
 	errBadErrorType          = verror.Register(pkgPath+".errBadErrorType", verror.NoRetry, "{1:}{2:} unexpected error type. Got {3}, want error.{:_}")
 	errWantSigInterfaceSlice = verror.Register(pkgPath+".errWantSigInterfaceSlice", verror.NoRetry, "{1:}{2:} unexpected result value type. Got {3}, want []signature.Interface.{:_}")
@@ -23,14 +23,14 @@
 	errUnknownMethod         = verror.Register(pkgPath+".errUnknownMethod", verror.NoRetry, "{1:}{2:} unknown method{:_}")
 )
 
-// proxyInvoker is an ipc.Invoker implementation that proxies all requests
+// proxyInvoker is an rpc.Invoker implementation that proxies all requests
 // to a remote object, i.e. requests to <suffix> are forwarded to
 // <remote> transparently.
 //
 // remote is the name of the remote object.
 // access is the access tag require to access the object.
 // desc is used to determine the number of results for a given method.
-func newProxyInvoker(remote string, access access.Tag, desc []ipc.InterfaceDesc) *proxyInvoker {
+func newProxyInvoker(remote string, access access.Tag, desc []rpc.InterfaceDesc) *proxyInvoker {
 	methodNumResults := make(map[string]int)
 	for _, iface := range desc {
 		for _, method := range iface.Methods {
@@ -46,7 +46,7 @@
 	methodNumResults map[string]int
 }
 
-var _ ipc.Invoker = (*proxyInvoker)(nil)
+var _ rpc.Invoker = (*proxyInvoker)(nil)
 
 func (p *proxyInvoker) Prepare(method string, numArgs int) (argptrs []interface{}, tags []*vdl.Value, _ error) {
 	// TODO(toddw): Change argptrs to be filled in with *vdl.Value, to avoid
@@ -60,7 +60,7 @@
 	return
 }
 
-func (p *proxyInvoker) Invoke(method string, inCall ipc.StreamServerCall, argptrs []interface{}) (results []interface{}, err error) {
+func (p *proxyInvoker) Invoke(method string, inCall rpc.StreamServerCall, argptrs []interface{}) (results []interface{}, err error) {
 	// We accept any values as argument and pass them through to the remote
 	// server.
 	args := make([]interface{}, len(argptrs))
@@ -96,12 +96,12 @@
 	// the client could successfully Send() data that the server doesn't
 	// actually receive if the server terminates the RPC while the data is
 	// in the proxy.
-	fwd := func(src, dst ipc.Stream, errors chan<- error) {
+	fwd := func(src, dst rpc.Stream, errors chan<- error) {
 		for {
 			var obj interface{}
 			switch err := src.Recv(&obj); err {
 			case io.EOF:
-				if call, ok := src.(ipc.ClientCall); ok {
+				if call, ok := src.(rpc.ClientCall); ok {
 					if err := call.CloseSend(); err != nil {
 						errors <- err
 					}
@@ -150,12 +150,12 @@
 
 // TODO(toddw): Expose a helper function that performs all error checking based
 // on reflection, to simplify the repeated logic processing results.
-func (p *proxyInvoker) Signature(call ipc.ServerCall) ([]signature.Interface, error) {
-	streamCall, ok := call.(ipc.StreamServerCall)
+func (p *proxyInvoker) Signature(call rpc.ServerCall) ([]signature.Interface, error) {
+	streamCall, ok := call.(rpc.StreamServerCall)
 	if !ok {
 		return nil, verror.New(errCantUpgradeServerCall, call.Context())
 	}
-	results, err := p.Invoke(ipc.ReservedSignature, streamCall, nil)
+	results, err := p.Invoke(rpc.ReservedSignature, streamCall, nil)
 	if err != nil {
 		return nil, err
 	}
@@ -179,13 +179,13 @@
 	return res, nil
 }
 
-func (p *proxyInvoker) MethodSignature(call ipc.ServerCall, method string) (signature.Method, error) {
+func (p *proxyInvoker) MethodSignature(call rpc.ServerCall, method string) (signature.Method, error) {
 	empty := signature.Method{}
-	streamCall, ok := call.(ipc.StreamServerCall)
+	streamCall, ok := call.(rpc.StreamServerCall)
 	if !ok {
 		return empty, verror.New(errCantUpgradeServerCall, call.Context())
 	}
-	results, err := p.Invoke(ipc.ReservedMethodSignature, streamCall, []interface{}{&method})
+	results, err := p.Invoke(rpc.ReservedMethodSignature, streamCall, []interface{}{&method})
 	if err != nil {
 		return empty, err
 	}
@@ -209,12 +209,12 @@
 	return res, nil
 }
 
-func (p *proxyInvoker) Globber() *ipc.GlobState {
-	return &ipc.GlobState{AllGlobber: p}
+func (p *proxyInvoker) Globber() *rpc.GlobState {
+	return &rpc.GlobState{AllGlobber: p}
 }
 
 type call struct {
-	ipc.ServerCall
+	rpc.ServerCall
 	ch chan<- naming.GlobReply
 }
 
@@ -227,10 +227,10 @@
 	return nil
 }
 
-func (p *proxyInvoker) Glob__(serverCall ipc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
+func (p *proxyInvoker) Glob__(serverCall rpc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
 	ch := make(chan naming.GlobReply)
 	go func() {
-		p.Invoke(ipc.GlobMethod, &call{serverCall, ch}, []interface{}{&pattern})
+		p.Invoke(rpc.GlobMethod, &call{serverCall, ch}, []interface{}{&pattern})
 		close(ch)
 	}()
 	return ch, nil
@@ -239,9 +239,9 @@
 // numResults returns the number of result values for the given method.
 func (p *proxyInvoker) numResults(ctx *context.T, method string) (int, error) {
 	switch method {
-	case ipc.GlobMethod:
+	case rpc.GlobMethod:
 		return 1, nil
-	case ipc.ReservedSignature, ipc.ReservedMethodSignature:
+	case rpc.ReservedSignature, rpc.ReservedMethodSignature:
 		return 2, nil
 	}
 	num, ok := p.methodNumResults[method]
diff --git a/services/mgmt/device/impl/proxy_invoker_test.go b/services/mgmt/device/impl/proxy_invoker_test.go
index eed3fc5..a299b76 100644
--- a/services/mgmt/device/impl/proxy_invoker_test.go
+++ b/services/mgmt/device/impl/proxy_invoker_test.go
@@ -5,8 +5,8 @@
 	"testing"
 
 	"v.io/v23"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/stats"
 	"v.io/v23/services/security/access"
@@ -30,7 +30,7 @@
 	if err != nil {
 		t.Fatalf("NewServer: %v", err)
 	}
-	localSpec := ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
+	localSpec := rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
 	eps1, err := server1.Listen(localSpec)
 	if err != nil {
 		t.Fatalf("Listen: %v", err)
@@ -80,11 +80,11 @@
 
 type dummy struct{}
 
-func (*dummy) Method(_ ipc.ServerCall) error { return nil }
+func (*dummy) Method(_ rpc.ServerCall) error { return nil }
 
 type proxyDispatcher struct {
 	remote string
-	desc   []ipc.InterfaceDesc
+	desc   []rpc.InterfaceDesc
 }
 
 func (d *proxyDispatcher) Lookup(suffix string) (interface{}, security.Authorizer, error) {
diff --git a/services/mgmt/device/impl/util.go b/services/mgmt/device/impl/util.go
index ea4f83b..3cdea6c 100644
--- a/services/mgmt/device/impl/util.go
+++ b/services/mgmt/device/impl/util.go
@@ -25,8 +25,8 @@
 const (
 	childReadyTimeout     = 40 * time.Second
 	childWaitTimeout      = 40 * time.Second
-	ipcContextTimeout     = time.Minute
-	ipcContextLongTimeout = 5 * time.Minute
+	rpcContextTimeout     = time.Minute
+	rpcContextLongTimeout = 5 * time.Minute
 )
 
 func verifySignature(data []byte, publisher security.Blessings, sig security.Signature) error {
diff --git a/services/mgmt/device/impl/util_test.go b/services/mgmt/device/impl/util_test.go
index 7af1e08..78f8e2d 100644
--- a/services/mgmt/device/impl/util_test.go
+++ b/services/mgmt/device/impl/util_test.go
@@ -17,9 +17,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/application"
 	"v.io/v23/services/mgmt/device"
@@ -210,7 +210,7 @@
 }
 
 type granter struct {
-	ipc.CallOpt
+	rpc.CallOpt
 	p         security.Principal
 	extension string
 }
@@ -468,7 +468,7 @@
 		logFileTimeStampRE:               regexp.MustCompile("(STDOUT|STDERR)-[0-9]+$"),
 		logFileTrimInfoRE:                regexp.MustCompile(appName + `\..*\.INFO\.[0-9.-]+$`),
 		logFileRemoveErrorFatalWarningRE: regexp.MustCompile("(ERROR|FATAL|WARNING)"),
-		statsTrimRE:                      regexp.MustCompile("/stats/(ipc|system(/start-time.*)?)$"),
+		statsTrimRE:                      regexp.MustCompile("/stats/(rpc|system(/start-time.*)?)$"),
 	}
 }
 
diff --git a/services/mgmt/device/starter/starter.go b/services/mgmt/device/starter/starter.go
index 1770400..be3d0e0 100644
--- a/services/mgmt/device/starter/starter.go
+++ b/services/mgmt/device/starter/starter.go
@@ -19,15 +19,15 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 )
 
 type NamespaceArgs struct {
 	Name           string         // Name to publish the mounttable service under.
-	ListenSpec     ipc.ListenSpec // ListenSpec for the server.
+	ListenSpec     rpc.ListenSpec // ListenSpec for the server.
 	AccessListFile string         // Path to the AccessList file used by the mounttable.
 	// Name in the local neighborhood on which to make the mounttable
 	// visible. If empty, the mounttable will not be visible in the local
@@ -37,7 +37,7 @@
 
 type DeviceArgs struct {
 	Name            string         // Name to publish the device service under.
-	ListenSpec      ipc.ListenSpec // ListenSpec for the device server.
+	ListenSpec      rpc.ListenSpec // ListenSpec for the device server.
 	ConfigState     *config.State  // Configuration for the device.
 	TestMode        bool           // Whether the device is running in test mode or not.
 	RestartCallback func()         // Callback invoked when the device service is restarted.
@@ -116,7 +116,7 @@
 	}, nil
 }
 
-func startClaimableDevice(ctx *context.T, dispatcher ipc.Dispatcher, args Args) (func(), error) {
+func startClaimableDevice(ctx *context.T, dispatcher rpc.Dispatcher, args Args) (func(), error) {
 	ctx, err := setNamespaceRootsForUnclaimedDevice(ctx)
 	if err != nil {
 		return nil, err
@@ -203,7 +203,7 @@
 	}
 	// TODO(caprita): We link in a proxy server into the device manager so
 	// that we can bootstrap with install-local before we can install an
-	// actual proxy app.  Once support is added to the IPC layer to allow
+	// actual proxy app.  Once support is added to the RPC layer to allow
 	// install-local to serve on the same connection it established to the
 	// device manager (see TODO in
 	// veyron/tools/mgmt/device/impl/local_install.go), we can get rid of
@@ -281,7 +281,7 @@
 	}, err
 }
 
-// startDeviceServer creates an ipc.Server and sets it up to server the Device service.
+// startDeviceServer creates an rpc.Server and sets it up to server the Device service.
 //
 // ls: ListenSpec for the server
 // configState: configuration for the Device service dispatcher
@@ -358,7 +358,7 @@
 	ctx, cancel := context.WithCancel(ctx)
 	defer cancel()
 	client := v23.GetClient(ctx)
-	call, err := client.StartCall(ctx, server, ipc.ReservedSignature, nil, options.NoResolve{})
+	call, err := client.StartCall(ctx, server, rpc.ReservedSignature, nil, options.NoResolve{})
 	if err != nil {
 		return nil, err
 	}
@@ -398,7 +398,7 @@
 			origep.Addr().Network(),
 			origep.Addr().String(),
 			origep.RoutingID(),
-			origep.IPCVersionRange(),
+			origep.RPCVersionRange(),
 			naming.ServesMountTableOpt(origep.ServesMountTable()))
 		roots[i] = naming.JoinAddressName(ep, suffix)
 	}
diff --git a/services/mgmt/lib/testutil/modules.go b/services/mgmt/lib/testutil/modules.go
index 915f26f..6ae79c2 100644
--- a/services/mgmt/lib/testutil/modules.go
+++ b/services/mgmt/lib/testutil/modules.go
@@ -9,7 +9,7 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
 
@@ -106,12 +106,12 @@
 }
 
 // NewServer creates a new server.
-func NewServer(ctx *context.T) (ipc.Server, string) {
+func NewServer(ctx *context.T) (rpc.Server, string) {
 	server, err := v23.NewServer(ctx)
 	if err != nil {
 		vlog.Fatalf("NewServer() failed: %v", err)
 	}
-	spec := ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
+	spec := rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
 	endpoints, err := server.Listen(spec)
 	if err != nil {
 		vlog.Fatalf("Listen(%s) failed: %v", spec, err)
diff --git a/services/mgmt/logreader/impl/logfile.go b/services/mgmt/logreader/impl/logfile.go
index b3f536b..12c5548 100644
--- a/services/mgmt/logreader/impl/logfile.go
+++ b/services/mgmt/logreader/impl/logfile.go
@@ -11,7 +11,7 @@
 	"path/filepath"
 	"strings"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/services/mgmt/logreader"
 	"v.io/v23/services/mgmt/logreader/types"
 	"v.io/v23/verror"
@@ -53,7 +53,7 @@
 }
 
 // Size returns the size of the log file, in bytes.
-func (i *logfileService) Size(call ipc.ServerCall) (int64, error) {
+func (i *logfileService) Size(call rpc.ServerCall) (int64, error) {
 	vlog.VI(1).Infof("%v.Size()", i.suffix)
 	fname, err := translateNameToFilename(i.root, i.suffix)
 	if err != nil {
@@ -111,7 +111,7 @@
 
 // GlobChildren__ returns the list of files in a directory streamed on a
 // channel. The list is empty if the object is a file.
-func (i *logfileService) GlobChildren__(call ipc.ServerCall) (<-chan string, error) {
+func (i *logfileService) GlobChildren__(call rpc.ServerCall) (<-chan string, error) {
 	vlog.VI(1).Infof("%v.GlobChildren__()", i.suffix)
 	dirName, err := translateNameToFilename(i.root, i.suffix)
 	if err != nil {
diff --git a/services/mgmt/logreader/impl/logfile_test.go b/services/mgmt/logreader/impl/logfile_test.go
index ea88d66..8a940b5 100644
--- a/services/mgmt/logreader/impl/logfile_test.go
+++ b/services/mgmt/logreader/impl/logfile_test.go
@@ -8,8 +8,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mgmt/logreader"
 	"v.io/v23/services/mgmt/logreader/types"
@@ -20,7 +20,7 @@
 	"v.io/x/ref/test"
 )
 
-func startServer(t *testing.T, ctx *context.T, disp ipc.Dispatcher) (ipc.Server, string, error) {
+func startServer(t *testing.T, ctx *context.T, disp rpc.Dispatcher) (rpc.Server, string, error) {
 	server, err := v23.NewServer(ctx)
 	if err != nil {
 		t.Fatalf("NewServer failed: %v", err)
@@ -38,7 +38,7 @@
 	return server, endpoints[0].String(), nil
 }
 
-func stopServer(t *testing.T, server ipc.Server) {
+func stopServer(t *testing.T, server rpc.Server) {
 	if err := server.Stop(); err != nil {
 		t.Errorf("server.Stop failed: %v", err)
 	}
diff --git a/services/mgmt/logreader/impl/reader.go b/services/mgmt/logreader/impl/reader.go
index ea06336..2f1259c 100644
--- a/services/mgmt/logreader/impl/reader.go
+++ b/services/mgmt/logreader/impl/reader.go
@@ -6,7 +6,7 @@
 	"strings"
 	"time"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/verror"
 )
 
@@ -15,7 +15,7 @@
 // - it aborts when the parent RPC is canceled.
 type followReader struct {
 	reader io.ReadSeeker
-	call   ipc.ServerCall
+	call   rpc.ServerCall
 	offset int64
 	follow bool
 	err    error
@@ -23,7 +23,7 @@
 }
 
 // newFollowReader is the factory for followReader.
-func newFollowReader(call ipc.ServerCall, reader io.ReadSeeker, startpos int64, follow bool) *followReader {
+func newFollowReader(call rpc.ServerCall, reader io.ReadSeeker, startpos int64, follow bool) *followReader {
 	_, err := reader.Seek(startpos, 0)
 	return &followReader{
 		reader: reader,
diff --git a/services/mgmt/pprof/impl/server.go b/services/mgmt/pprof/impl/server.go
index d984c60..76a13b6 100644
--- a/services/mgmt/pprof/impl/server.go
+++ b/services/mgmt/pprof/impl/server.go
@@ -7,7 +7,7 @@
 	"runtime/pprof"
 	"time"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	spprof "v.io/v23/services/mgmt/pprof"
 	"v.io/v23/verror"
 )
@@ -29,12 +29,12 @@
 }
 
 // CmdLine returns the command-line argument of the server.
-func (pprofService) CmdLine(ipc.ServerCall) ([]string, error) {
+func (pprofService) CmdLine(rpc.ServerCall) ([]string, error) {
 	return os.Args, nil
 }
 
 // Profiles returns the list of available profiles.
-func (pprofService) Profiles(ipc.ServerCall) ([]string, error) {
+func (pprofService) Profiles(rpc.ServerCall) ([]string, error) {
 	profiles := pprof.Profiles()
 	results := make([]string, len(profiles))
 	for i, v := range profiles {
@@ -75,7 +75,7 @@
 
 // Symbol looks up the program counters and returns their respective
 // function names.
-func (pprofService) Symbol(_ ipc.ServerCall, programCounters []uint64) ([]string, error) {
+func (pprofService) Symbol(_ rpc.ServerCall, programCounters []uint64) ([]string, error) {
 	results := make([]string, len(programCounters))
 	for i, v := range programCounters {
 		f := runtime.FuncForPC(uintptr(v))
diff --git a/services/mgmt/profile/impl/dispatcher.go b/services/mgmt/profile/impl/dispatcher.go
index b271ef7..6b24bd7 100644
--- a/services/mgmt/profile/impl/dispatcher.go
+++ b/services/mgmt/profile/impl/dispatcher.go
@@ -3,7 +3,7 @@
 import (
 	"path/filepath"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 
 	"v.io/x/ref/services/mgmt/lib/fs"
@@ -17,11 +17,11 @@
 	storeRoot string
 }
 
-var _ ipc.Dispatcher = (*dispatcher)(nil)
+var _ rpc.Dispatcher = (*dispatcher)(nil)
 
 // NewDispatcher is the dispatcher factory. storeDir is a path to a
 // directory in which the profile state is persisted.
-func NewDispatcher(storeDir string, authorizer security.Authorizer) (ipc.Dispatcher, error) {
+func NewDispatcher(storeDir string, authorizer security.Authorizer) (rpc.Dispatcher, error) {
 	store, err := fs.NewMemstore(filepath.Join(storeDir, "profilestate.db"))
 	if err != nil {
 		return nil, err
diff --git a/services/mgmt/profile/impl/service.go b/services/mgmt/profile/impl/service.go
index 400cbc9..df402e0 100644
--- a/services/mgmt/profile/impl/service.go
+++ b/services/mgmt/profile/impl/service.go
@@ -7,8 +7,8 @@
 	"v.io/x/ref/services/mgmt/profile"
 	"v.io/x/ref/services/mgmt/repository"
 
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 )
 
@@ -34,7 +34,7 @@
 
 // STORE MANAGEMENT INTERFACE IMPLEMENTATION
 
-func (i *profileService) Put(call ipc.ServerCall, profile profile.Specification) error {
+func (i *profileService) Put(call rpc.ServerCall, profile profile.Specification) error {
 	vlog.VI(0).Infof("%v.Put(%v)", i.suffix, profile)
 	// Transaction is rooted at "", so tname == tid.
 	i.store.Lock()
@@ -54,7 +54,7 @@
 	return nil
 }
 
-func (i *profileService) Remove(call ipc.ServerCall) error {
+func (i *profileService) Remove(call rpc.ServerCall) error {
 	vlog.VI(0).Infof("%v.Remove()", i.suffix)
 	i.store.Lock()
 	defer i.store.Unlock()
@@ -83,7 +83,7 @@
 
 // PROFILE INTERACE IMPLEMENTATION
 
-func (i *profileService) lookup(call ipc.ServerCall) (profile.Specification, error) {
+func (i *profileService) lookup(call rpc.ServerCall) (profile.Specification, error) {
 	empty := profile.Specification{}
 	path := naming.Join("/profiles", i.suffix)
 
@@ -101,7 +101,7 @@
 	return s, nil
 }
 
-func (i *profileService) Label(call ipc.ServerCall) (string, error) {
+func (i *profileService) Label(call rpc.ServerCall) (string, error) {
 	vlog.VI(0).Infof("%v.Label()", i.suffix)
 	s, err := i.lookup(call)
 	if err != nil {
@@ -110,7 +110,7 @@
 	return s.Label, nil
 }
 
-func (i *profileService) Description(call ipc.ServerCall) (string, error) {
+func (i *profileService) Description(call rpc.ServerCall) (string, error) {
 	vlog.VI(0).Infof("%v.Description()", i.suffix)
 	s, err := i.lookup(call)
 	if err != nil {
@@ -119,7 +119,7 @@
 	return s.Description, nil
 }
 
-func (i *profileService) Specification(call ipc.ServerCall) (profile.Specification, error) {
+func (i *profileService) Specification(call rpc.ServerCall) (profile.Specification, error) {
 	vlog.VI(0).Infof("%v.Specification()", i.suffix)
 	return i.lookup(call)
 }
diff --git a/services/mgmt/repository/repository.vdl.go b/services/mgmt/repository/repository.vdl.go
index 29701eb..c69ab2e 100644
--- a/services/mgmt/repository/repository.vdl.go
+++ b/services/mgmt/repository/repository.vdl.go
@@ -9,7 +9,7 @@
 	// VDL system imports
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/vdl"
 
 	// VDL user imports
@@ -41,7 +41,7 @@
 	// Put adds the given tuple of application version (specified
 	// through the object name suffix) and application envelope to all
 	// of the given application profiles.
-	Put(ctx *context.T, Profiles []string, Envelope application.Envelope, opts ...ipc.CallOpt) error
+	Put(ctx *context.T, Profiles []string, Envelope application.Envelope, opts ...rpc.CallOpt) error
 	// Remove removes the application envelope for the given profile
 	// name and application version (specified through the object name
 	// suffix). If no version is specified as part of the suffix, the
@@ -49,20 +49,20 @@
 	//
 	// TODO(jsimsa): Add support for using "*" to specify all profiles
 	// when Matt implements Globing (or Ken implements querying).
-	Remove(ctx *context.T, Profile string, opts ...ipc.CallOpt) error
+	Remove(ctx *context.T, Profile string, opts ...rpc.CallOpt) error
 }
 
 // ApplicationClientStub adds universal methods to ApplicationClientMethods.
 type ApplicationClientStub interface {
 	ApplicationClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // ApplicationClient returns a client stub for Application.
-func ApplicationClient(name string, opts ...ipc.BindOpt) ApplicationClientStub {
-	var client ipc.Client
+func ApplicationClient(name string, opts ...rpc.BindOpt) ApplicationClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -71,20 +71,20 @@
 
 type implApplicationClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 
 	repository.ApplicationClientStub
 }
 
-func (c implApplicationClientStub) c(ctx *context.T) ipc.Client {
+func (c implApplicationClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implApplicationClientStub) Put(ctx *context.T, i0 []string, i1 application.Envelope, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implApplicationClientStub) Put(ctx *context.T, i0 []string, i1 application.Envelope, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Put", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -92,8 +92,8 @@
 	return
 }
 
-func (c implApplicationClientStub) Remove(ctx *context.T, i0 string, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implApplicationClientStub) Remove(ctx *context.T, i0 string, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Remove", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -122,7 +122,7 @@
 	// Put adds the given tuple of application version (specified
 	// through the object name suffix) and application envelope to all
 	// of the given application profiles.
-	Put(call ipc.ServerCall, Profiles []string, Envelope application.Envelope) error
+	Put(call rpc.ServerCall, Profiles []string, Envelope application.Envelope) error
 	// Remove removes the application envelope for the given profile
 	// name and application version (specified through the object name
 	// suffix). If no version is specified as part of the suffix, the
@@ -130,11 +130,11 @@
 	//
 	// TODO(jsimsa): Add support for using "*" to specify all profiles
 	// when Matt implements Globing (or Ken implements querying).
-	Remove(call ipc.ServerCall, Profile string) error
+	Remove(call rpc.ServerCall, Profile string) error
 }
 
 // ApplicationServerStubMethods is the server interface containing
-// Application methods, as expected by ipc.Server.
+// Application methods, as expected by rpc.Server.
 // There is no difference between this interface and ApplicationServerMethods
 // since there are no streaming methods.
 type ApplicationServerStubMethods ApplicationServerMethods
@@ -143,12 +143,12 @@
 type ApplicationServerStub interface {
 	ApplicationServerStubMethods
 	// Describe the Application interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // ApplicationServer returns a server stub for Application.
 // It converts an implementation of ApplicationServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func ApplicationServer(impl ApplicationServerMethods) ApplicationServerStub {
 	stub := implApplicationServerStub{
 		impl: impl,
@@ -156,9 +156,9 @@
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -167,41 +167,41 @@
 type implApplicationServerStub struct {
 	impl ApplicationServerMethods
 	repository.ApplicationServerStub
-	gs *ipc.GlobState
+	gs *rpc.GlobState
 }
 
-func (s implApplicationServerStub) Put(call ipc.ServerCall, i0 []string, i1 application.Envelope) error {
+func (s implApplicationServerStub) Put(call rpc.ServerCall, i0 []string, i1 application.Envelope) error {
 	return s.impl.Put(call, i0, i1)
 }
 
-func (s implApplicationServerStub) Remove(call ipc.ServerCall, i0 string) error {
+func (s implApplicationServerStub) Remove(call rpc.ServerCall, i0 string) error {
 	return s.impl.Remove(call, i0)
 }
 
-func (s implApplicationServerStub) Globber() *ipc.GlobState {
+func (s implApplicationServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implApplicationServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{ApplicationDesc, repository.ApplicationDesc, object.ObjectDesc}
+func (s implApplicationServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{ApplicationDesc, repository.ApplicationDesc, object.ObjectDesc}
 }
 
 // ApplicationDesc describes the Application interface.
-var ApplicationDesc ipc.InterfaceDesc = descApplication
+var ApplicationDesc rpc.InterfaceDesc = descApplication
 
 // descApplication hides the desc to keep godoc clean.
-var descApplication = ipc.InterfaceDesc{
+var descApplication = rpc.InterfaceDesc{
 	Name:    "Application",
 	PkgPath: "v.io/x/ref/services/mgmt/repository",
 	Doc:     "// Application describes an application repository internally. Besides\n// the public Application interface, it allows to add and remove\n// application envelopes.",
-	Embeds: []ipc.EmbedDesc{
+	Embeds: []rpc.EmbedDesc{
 		{"Application", "v.io/v23/services/mgmt/repository", "// Application provides access to application envelopes. An\n// application envelope is identified by an application name and an\n// application version, which are specified through the object name,\n// and a profile name, which is specified using a method argument.\n//\n// Example:\n// /apps/search/v1.Match([]string{\"base\", \"media\"})\n//   returns an application envelope that can be used for downloading\n//   and executing the \"search\" application, version \"v1\", runnable\n//   on either the \"base\" or \"media\" profile."},
 	},
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Put",
 			Doc:  "// Put adds the given tuple of application version (specified\n// through the object name suffix) and application envelope to all\n// of the given application profiles.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"Profiles", ``}, // []string
 				{"Envelope", ``}, // application.Envelope
 			},
@@ -210,7 +210,7 @@
 		{
 			Name: "Remove",
 			Doc:  "// Remove removes the application envelope for the given profile\n// name and application version (specified through the object name\n// suffix). If no version is specified as part of the suffix, the\n// method removes all versions for the given profile.\n//\n// TODO(jsimsa): Add support for using \"*\" to specify all profiles\n// when Matt implements Globing (or Ken implements querying).",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"Profile", ``}, // string
 			},
 			Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Write"))},
@@ -231,26 +231,26 @@
 	repository.ProfileClientMethods
 	// Specification returns the profile specification for the profile
 	// identified through the object name suffix.
-	Specification(*context.T, ...ipc.CallOpt) (profile.Specification, error)
+	Specification(*context.T, ...rpc.CallOpt) (profile.Specification, error)
 	// Put sets the profile specification for the profile identified
 	// through the object name suffix.
-	Put(ctx *context.T, Specification profile.Specification, opts ...ipc.CallOpt) error
+	Put(ctx *context.T, Specification profile.Specification, opts ...rpc.CallOpt) error
 	// Remove removes the profile specification for the profile
 	// identified through the object name suffix.
-	Remove(*context.T, ...ipc.CallOpt) error
+	Remove(*context.T, ...rpc.CallOpt) error
 }
 
 // ProfileClientStub adds universal methods to ProfileClientMethods.
 type ProfileClientStub interface {
 	ProfileClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // ProfileClient returns a client stub for Profile.
-func ProfileClient(name string, opts ...ipc.BindOpt) ProfileClientStub {
-	var client ipc.Client
+func ProfileClient(name string, opts ...rpc.BindOpt) ProfileClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -259,20 +259,20 @@
 
 type implProfileClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 
 	repository.ProfileClientStub
 }
 
-func (c implProfileClientStub) c(ctx *context.T) ipc.Client {
+func (c implProfileClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implProfileClientStub) Specification(ctx *context.T, opts ...ipc.CallOpt) (o0 profile.Specification, err error) {
-	var call ipc.ClientCall
+func (c implProfileClientStub) Specification(ctx *context.T, opts ...rpc.CallOpt) (o0 profile.Specification, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Specification", nil, opts...); err != nil {
 		return
 	}
@@ -280,8 +280,8 @@
 	return
 }
 
-func (c implProfileClientStub) Put(ctx *context.T, i0 profile.Specification, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implProfileClientStub) Put(ctx *context.T, i0 profile.Specification, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Put", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -289,8 +289,8 @@
 	return
 }
 
-func (c implProfileClientStub) Remove(ctx *context.T, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implProfileClientStub) Remove(ctx *context.T, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Remove", nil, opts...); err != nil {
 		return
 	}
@@ -311,17 +311,17 @@
 	repository.ProfileServerMethods
 	// Specification returns the profile specification for the profile
 	// identified through the object name suffix.
-	Specification(ipc.ServerCall) (profile.Specification, error)
+	Specification(rpc.ServerCall) (profile.Specification, error)
 	// Put sets the profile specification for the profile identified
 	// through the object name suffix.
-	Put(call ipc.ServerCall, Specification profile.Specification) error
+	Put(call rpc.ServerCall, Specification profile.Specification) error
 	// Remove removes the profile specification for the profile
 	// identified through the object name suffix.
-	Remove(ipc.ServerCall) error
+	Remove(rpc.ServerCall) error
 }
 
 // ProfileServerStubMethods is the server interface containing
-// Profile methods, as expected by ipc.Server.
+// Profile methods, as expected by rpc.Server.
 // There is no difference between this interface and ProfileServerMethods
 // since there are no streaming methods.
 type ProfileServerStubMethods ProfileServerMethods
@@ -330,12 +330,12 @@
 type ProfileServerStub interface {
 	ProfileServerStubMethods
 	// Describe the Profile interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // ProfileServer returns a server stub for Profile.
 // It converts an implementation of ProfileServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func ProfileServer(impl ProfileServerMethods) ProfileServerStub {
 	stub := implProfileServerStub{
 		impl:              impl,
@@ -343,9 +343,9 @@
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -354,45 +354,45 @@
 type implProfileServerStub struct {
 	impl ProfileServerMethods
 	repository.ProfileServerStub
-	gs *ipc.GlobState
+	gs *rpc.GlobState
 }
 
-func (s implProfileServerStub) Specification(call ipc.ServerCall) (profile.Specification, error) {
+func (s implProfileServerStub) Specification(call rpc.ServerCall) (profile.Specification, error) {
 	return s.impl.Specification(call)
 }
 
-func (s implProfileServerStub) Put(call ipc.ServerCall, i0 profile.Specification) error {
+func (s implProfileServerStub) Put(call rpc.ServerCall, i0 profile.Specification) error {
 	return s.impl.Put(call, i0)
 }
 
-func (s implProfileServerStub) Remove(call ipc.ServerCall) error {
+func (s implProfileServerStub) Remove(call rpc.ServerCall) error {
 	return s.impl.Remove(call)
 }
 
-func (s implProfileServerStub) Globber() *ipc.GlobState {
+func (s implProfileServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implProfileServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{ProfileDesc, repository.ProfileDesc}
+func (s implProfileServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{ProfileDesc, repository.ProfileDesc}
 }
 
 // ProfileDesc describes the Profile interface.
-var ProfileDesc ipc.InterfaceDesc = descProfile
+var ProfileDesc rpc.InterfaceDesc = descProfile
 
 // descProfile hides the desc to keep godoc clean.
-var descProfile = ipc.InterfaceDesc{
+var descProfile = rpc.InterfaceDesc{
 	Name:    "Profile",
 	PkgPath: "v.io/x/ref/services/mgmt/repository",
 	Doc:     "// Profile describes a profile internally. Besides the public Profile\n// interface, it allows to add and remove profile specifications.",
-	Embeds: []ipc.EmbedDesc{
+	Embeds: []rpc.EmbedDesc{
 		{"Profile", "v.io/v23/services/mgmt/repository", "// Profile abstracts a device's ability to run binaries, and hides\n// specifics such as the operating system, hardware architecture, and\n// the set of installed libraries. Profiles describe binaries and\n// devices, and are used to match them."},
 	},
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Specification",
 			Doc:  "// Specification returns the profile specification for the profile\n// identified through the object name suffix.",
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // profile.Specification
 			},
 			Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Read"))},
@@ -400,7 +400,7 @@
 		{
 			Name: "Put",
 			Doc:  "// Put sets the profile specification for the profile identified\n// through the object name suffix.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"Specification", ``}, // profile.Specification
 			},
 			Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Write"))},
diff --git a/services/mgmt/stats/impl/stats.go b/services/mgmt/stats/impl/stats.go
index 779a88f..1f6f203 100644
--- a/services/mgmt/stats/impl/stats.go
+++ b/services/mgmt/stats/impl/stats.go
@@ -8,8 +8,8 @@
 
 	libstats "v.io/x/ref/lib/stats"
 
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/services/mgmt/stats"
 	"v.io/v23/services/watch"
 	watchtypes "v.io/v23/services/watch/types"
@@ -36,7 +36,7 @@
 }
 
 // Glob__ returns the name of all objects that match pattern.
-func (i *statsService) Glob__(call ipc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
+func (i *statsService) Glob__(call rpc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
 	vlog.VI(1).Infof("%v.Glob__(%q)", i.suffix, pattern)
 
 	ch := make(chan naming.GlobReply)
@@ -95,7 +95,7 @@
 }
 
 // Value returns the value of the receiver object.
-func (i *statsService) Value(call ipc.ServerCall) (*vdl.Value, error) {
+func (i *statsService) Value(call rpc.ServerCall) (*vdl.Value, error) {
 	vlog.VI(1).Infof("%v.Value()", i.suffix)
 
 	rv, err := libstats.Value(i.suffix)
diff --git a/services/mgmt/vtrace/impl/vtrace.go b/services/mgmt/vtrace/impl/vtrace.go
index c344825..7f0da93 100644
--- a/services/mgmt/vtrace/impl/vtrace.go
+++ b/services/mgmt/vtrace/impl/vtrace.go
@@ -1,7 +1,7 @@
 package impl
 
 import (
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	svtrace "v.io/v23/services/mgmt/vtrace"
 	"v.io/v23/uniqueid"
 	"v.io/v23/verror"
@@ -10,7 +10,7 @@
 
 type vtraceService struct{}
 
-func (v *vtraceService) Trace(call ipc.ServerCall, id uniqueid.Id) (vtrace.TraceRecord, error) {
+func (v *vtraceService) Trace(call rpc.ServerCall, id uniqueid.Id) (vtrace.TraceRecord, error) {
 	store := vtrace.GetStore(call.Context())
 	tr := store.TraceRecord(id)
 	if tr == nil {
diff --git a/services/mounttable/lib/collection_test_interface.vdl.go b/services/mounttable/lib/collection_test_interface.vdl.go
index 0d15ca5..00b288d 100644
--- a/services/mounttable/lib/collection_test_interface.vdl.go
+++ b/services/mounttable/lib/collection_test_interface.vdl.go
@@ -7,7 +7,7 @@
 	// VDL system imports
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 )
 
 // CollectionClientMethods is the client interface
@@ -17,23 +17,23 @@
 	// an entry exists, if Overwrite is true, then the binding is replaced,
 	// otherwise the call fails with an error.  The Val must be no larger than
 	// MaxSize bytes.
-	Export(ctx *context.T, Val string, Overwrite bool, opts ...ipc.CallOpt) error
+	Export(ctx *context.T, Val string, Overwrite bool, opts ...rpc.CallOpt) error
 	// Lookup retrieves the value associated with a name.  Returns an error if
 	// there is no such binding.
-	Lookup(*context.T, ...ipc.CallOpt) ([]byte, error)
+	Lookup(*context.T, ...rpc.CallOpt) ([]byte, error)
 }
 
 // CollectionClientStub adds universal methods to CollectionClientMethods.
 type CollectionClientStub interface {
 	CollectionClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // CollectionClient returns a client stub for Collection.
-func CollectionClient(name string, opts ...ipc.BindOpt) CollectionClientStub {
-	var client ipc.Client
+func CollectionClient(name string, opts ...rpc.BindOpt) CollectionClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -42,18 +42,18 @@
 
 type implCollectionClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implCollectionClientStub) c(ctx *context.T) ipc.Client {
+func (c implCollectionClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implCollectionClientStub) Export(ctx *context.T, i0 string, i1 bool, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implCollectionClientStub) Export(ctx *context.T, i0 string, i1 bool, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Export", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -61,8 +61,8 @@
 	return
 }
 
-func (c implCollectionClientStub) Lookup(ctx *context.T, opts ...ipc.CallOpt) (o0 []byte, err error) {
-	var call ipc.ClientCall
+func (c implCollectionClientStub) Lookup(ctx *context.T, opts ...rpc.CallOpt) (o0 []byte, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Lookup", nil, opts...); err != nil {
 		return
 	}
@@ -77,14 +77,14 @@
 	// an entry exists, if Overwrite is true, then the binding is replaced,
 	// otherwise the call fails with an error.  The Val must be no larger than
 	// MaxSize bytes.
-	Export(call ipc.ServerCall, Val string, Overwrite bool) error
+	Export(call rpc.ServerCall, Val string, Overwrite bool) error
 	// Lookup retrieves the value associated with a name.  Returns an error if
 	// there is no such binding.
-	Lookup(ipc.ServerCall) ([]byte, error)
+	Lookup(rpc.ServerCall) ([]byte, error)
 }
 
 // CollectionServerStubMethods is the server interface containing
-// Collection methods, as expected by ipc.Server.
+// Collection methods, as expected by rpc.Server.
 // There is no difference between this interface and CollectionServerMethods
 // since there are no streaming methods.
 type CollectionServerStubMethods CollectionServerMethods
@@ -93,21 +93,21 @@
 type CollectionServerStub interface {
 	CollectionServerStubMethods
 	// Describe the Collection interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // CollectionServer returns a server stub for Collection.
 // It converts an implementation of CollectionServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func CollectionServer(impl CollectionServerMethods) CollectionServerStub {
 	stub := implCollectionServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -115,37 +115,37 @@
 
 type implCollectionServerStub struct {
 	impl CollectionServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implCollectionServerStub) Export(call ipc.ServerCall, i0 string, i1 bool) error {
+func (s implCollectionServerStub) Export(call rpc.ServerCall, i0 string, i1 bool) error {
 	return s.impl.Export(call, i0, i1)
 }
 
-func (s implCollectionServerStub) Lookup(call ipc.ServerCall) ([]byte, error) {
+func (s implCollectionServerStub) Lookup(call rpc.ServerCall) ([]byte, error) {
 	return s.impl.Lookup(call)
 }
 
-func (s implCollectionServerStub) Globber() *ipc.GlobState {
+func (s implCollectionServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implCollectionServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{CollectionDesc}
+func (s implCollectionServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{CollectionDesc}
 }
 
 // CollectionDesc describes the Collection interface.
-var CollectionDesc ipc.InterfaceDesc = descCollection
+var CollectionDesc rpc.InterfaceDesc = descCollection
 
 // descCollection hides the desc to keep godoc clean.
-var descCollection = ipc.InterfaceDesc{
+var descCollection = rpc.InterfaceDesc{
 	Name:    "Collection",
 	PkgPath: "v.io/x/ref/services/mounttable/lib",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Export",
 			Doc:  "// Export sets the value for a name.  Overwrite controls the behavior when\n// an entry exists, if Overwrite is true, then the binding is replaced,\n// otherwise the call fails with an error.  The Val must be no larger than\n// MaxSize bytes.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"Val", ``},       // string
 				{"Overwrite", ``}, // bool
 			},
@@ -153,7 +153,7 @@
 		{
 			Name: "Lookup",
 			Doc:  "// Lookup retrieves the value associated with a name.  Returns an error if\n// there is no such binding.",
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // []byte
 			},
 		},
diff --git a/services/mounttable/lib/collectionserver_test.go b/services/mounttable/lib/collectionserver_test.go
index eebcd99..6528fa5 100644
--- a/services/mounttable/lib/collectionserver_test.go
+++ b/services/mounttable/lib/collectionserver_test.go
@@ -4,8 +4,8 @@
 	"sync"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 )
@@ -30,7 +30,7 @@
 	return &collectionDispatcher{collectionServer: &collectionServer{contents: make(map[string][]byte)}}
 }
 
-// Lookup implements ipc.Dispatcher.Lookup.
+// Lookup implements rpc.Dispatcher.Lookup.
 func (d *collectionDispatcher) Lookup(name string) (interface{}, security.Authorizer, error) {
 	rpcc := &rpcContext{name: name, collectionServer: d.collectionServer}
 	return rpcc, d, nil
@@ -41,7 +41,7 @@
 }
 
 // Export implements CollectionServerMethods.Export.
-func (c *rpcContext) Export(call ipc.ServerCall, val []byte, overwrite bool) error {
+func (c *rpcContext) Export(call rpc.ServerCall, val []byte, overwrite bool) error {
 	c.Lock()
 	defer c.Unlock()
 	if b := c.contents[c.name]; overwrite || b == nil {
@@ -52,7 +52,7 @@
 }
 
 // Lookup implements CollectionServerMethods.Lookup.
-func (c *rpcContext) Lookup(call ipc.ServerCall) ([]byte, error) {
+func (c *rpcContext) Lookup(call rpc.ServerCall) ([]byte, error) {
 	c.Lock()
 	defer c.Unlock()
 	if val := c.contents[c.name]; val != nil {
diff --git a/services/mounttable/lib/mounttable.go b/services/mounttable/lib/mounttable.go
index 6e5fc0c..a1b6a34 100644
--- a/services/mounttable/lib/mounttable.go
+++ b/services/mounttable/lib/mounttable.go
@@ -13,8 +13,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mounttable"
 	"v.io/v23/services/security/access"
@@ -41,7 +41,7 @@
 	superUsers access.AccessList
 }
 
-var _ ipc.Dispatcher = (*mountTable)(nil)
+var _ rpc.Dispatcher = (*mountTable)(nil)
 
 // mountContext represents a client bind.  The name is the name that was bound to.
 type mountContext struct {
@@ -77,7 +77,7 @@
 // aclfile is a JSON-encoded mapping from paths in the mounttable to the
 // access.Permissions for that path. The tags used in the map are the typical
 // access tags (the Tag type defined in veyron2/services/security/access).
-func NewMountTableDispatcher(aclfile string) (ipc.Dispatcher, error) {
+func NewMountTableDispatcher(aclfile string) (rpc.Dispatcher, error) {
 	mt := &mountTable{
 		root: new(node),
 	}
@@ -141,7 +141,7 @@
 	return nil
 }
 
-// Lookup implements ipc.Dispatcher.Lookup.
+// Lookup implements rpc.Dispatcher.Lookup.
 func (mt *mountTable) Lookup(name string) (interface{}, security.Authorizer, error) {
 	vlog.VI(2).Infof("*********************Lookup %s", name)
 	ms := &mountContext{
@@ -163,7 +163,7 @@
 }
 
 // satisfies returns no error if the ctx + n.acls satisfies the associated one of the required Tags.
-func (n *node) satisfies(mt *mountTable, call ipc.ServerCall, tags []mounttable.Tag) error {
+func (n *node) satisfies(mt *mountTable, call rpc.ServerCall, tags []mounttable.Tag) error {
 	// No AccessLists means everything (for now).
 	if call == nil || tags == nil || n.acls == nil {
 		return nil
@@ -201,7 +201,7 @@
 
 // satisfiesTemplate returns no error if the ctx + n.amTemplate satisfies the associated one of
 // the required Tags.
-func (n *node) satisfiesTemplate(call ipc.ServerCall, tags []mounttable.Tag, name string) error {
+func (n *node) satisfiesTemplate(call rpc.ServerCall, tags []mounttable.Tag, name string) error {
 	if n.amTemplate == nil {
 		return nil
 	}
@@ -217,7 +217,7 @@
 
 // copyAccessLists copies one nodes AccessLists to another and adds the clients blessings as
 // patterns to the Admin tag.
-func copyAccessLists(call ipc.ServerCall, cur *node) *TAMG {
+func copyAccessLists(call rpc.ServerCall, cur *node) *TAMG {
 	if call == nil {
 		return nil
 	}
@@ -246,7 +246,7 @@
 // while following the path, return that node and any remaining elems.
 //
 // If it returns a node, both the node and its parent are locked.
-func (mt *mountTable) traverse(call ipc.ServerCall, elems []string, create bool) (*node, []string, error) {
+func (mt *mountTable) traverse(call rpc.ServerCall, elems []string, create bool) (*node, []string, error) {
 	// Invariant is that the current node and its parent are both locked.
 	cur := mt.root
 	cur.parent.Lock()
@@ -312,7 +312,7 @@
 // findNode finds a node in the table and optionally creates a path to it.
 //
 // If a node is found, on return it and its parent are locked.
-func (mt *mountTable) findNode(call ipc.ServerCall, elems []string, create bool, tags []mounttable.Tag) (*node, error) {
+func (mt *mountTable) findNode(call rpc.ServerCall, elems []string, create bool, tags []mounttable.Tag) (*node, error) {
 	n, nelems, err := mt.traverse(call, elems, create)
 	if err != nil {
 		return nil, err
@@ -337,7 +337,7 @@
 // any elements remaining of the path.
 //
 // If a mountpoint is found, on return it and its parent are locked.
-func (mt *mountTable) findMountPoint(call ipc.ServerCall, elems []string) (*node, []string, error) {
+func (mt *mountTable) findMountPoint(call rpc.ServerCall, elems []string) (*node, []string, error) {
 	n, nelems, err := mt.traverse(call, elems, false)
 	if err != nil {
 		return nil, nil, err
@@ -373,13 +373,13 @@
 
 // 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) ResolveStepX(call ipc.ServerCall) (entry naming.MountEntry, err error) {
+func (ms *mountContext) ResolveStepX(call rpc.ServerCall) (entry naming.MountEntry, err error) {
 	return ms.ResolveStep(call)
 }
 
 // ResolveStep 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) ResolveStep(call ipc.ServerCall) (entry naming.MountEntry, err error) {
+func (ms *mountContext) ResolveStep(call rpc.ServerCall) (entry naming.MountEntry, err error) {
 	vlog.VI(2).Infof("ResolveStep %q", ms.name)
 	mt := ms.mt
 	// Find the next mount point for the name.
@@ -414,11 +414,11 @@
 }
 
 // Mount a server onto the name in the receiver.
-func (ms *mountContext) Mount(call ipc.ServerCall, server string, ttlsecs uint32, flags naming.MountFlag) error {
+func (ms *mountContext) Mount(call rpc.ServerCall, server string, ttlsecs uint32, flags naming.MountFlag) error {
 	return ms.MountX(call, server, nil, ttlsecs, flags)
 }
 
-func (ms *mountContext) MountX(call ipc.ServerCall, server string, patterns []security.BlessingPattern, ttlsecs uint32, flags naming.MountFlag) error {
+func (ms *mountContext) MountX(call rpc.ServerCall, server string, patterns []security.BlessingPattern, ttlsecs uint32, flags naming.MountFlag) error {
 	if len(patterns) == 0 {
 		// No patterns provided in the request, take the conservative
 		// approach and assume that the server being mounted will
@@ -522,7 +522,7 @@
 
 // Unmount removes servers from the name in the receiver. If server is specified, only that
 // server is removed.
-func (ms *mountContext) Unmount(call ipc.ServerCall, server string) error {
+func (ms *mountContext) Unmount(call rpc.ServerCall, server string) error {
 	vlog.VI(2).Infof("*********************Unmount %q, %s", ms.name, server)
 	mt := ms.mt
 	n, err := mt.findNode(call, ms.elems, false, mountTags)
@@ -549,7 +549,7 @@
 }
 
 // Delete removes the receiver.  If all is true, any subtree is also removed.
-func (ms *mountContext) Delete(call ipc.ServerCall, deleteSubTree bool) error {
+func (ms *mountContext) Delete(call rpc.ServerCall, deleteSubTree bool) error {
 	vlog.VI(2).Infof("*********************Delete %q, %v", ms.name, deleteSubTree)
 	if len(ms.elems) == 0 {
 		// We can't delete the root.
@@ -580,7 +580,7 @@
 }
 
 // globStep is called with n and n.parent locked.  Returns with both unlocked.
-func (mt *mountTable) globStep(n *node, name string, pattern *glob.Glob, call ipc.ServerCall, ch chan<- naming.GlobReply) {
+func (mt *mountTable) globStep(n *node, name string, pattern *glob.Glob, call rpc.ServerCall, ch chan<- naming.GlobReply) {
 	vlog.VI(2).Infof("globStep(%s, %s)", name, pattern)
 
 	// If this is a mount point, we're done.
@@ -677,7 +677,7 @@
 // a state that never existed in the mounttable.  For example, if someone removes c/d and later
 // adds a/b while a Glob is in progress, the Glob may return a set of nodes that includes both
 // c/d and a/b.
-func (ms *mountContext) Glob__(call ipc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
+func (ms *mountContext) Glob__(call rpc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
 	vlog.VI(2).Infof("mt.Glob %v", ms.elems)
 
 	g, err := glob.Parse(pattern)
@@ -706,7 +706,7 @@
 	return ch, nil
 }
 
-func (ms *mountContext) linkToLeaf(call ipc.ServerCall, ch chan<- naming.GlobReply) {
+func (ms *mountContext) linkToLeaf(call rpc.ServerCall, ch chan<- naming.GlobReply) {
 	n, elems, err := ms.mt.findMountPoint(call, ms.elems)
 	if err != nil || n == nil {
 		return
@@ -720,7 +720,7 @@
 	ch <- naming.GlobReplyEntry{naming.MountEntry{Name: "", Servers: servers}}
 }
 
-func (ms *mountContext) SetPermissions(call ipc.ServerCall, tam access.Permissions, etag string) error {
+func (ms *mountContext) SetPermissions(call rpc.ServerCall, tam access.Permissions, etag string) error {
 	vlog.VI(2).Infof("SetPermissions %q", ms.name)
 	mt := ms.mt
 
@@ -742,7 +742,7 @@
 	return err
 }
 
-func (ms *mountContext) GetPermissions(call ipc.ServerCall) (access.Permissions, string, error) {
+func (ms *mountContext) GetPermissions(call rpc.ServerCall) (access.Permissions, string, error) {
 	vlog.VI(2).Infof("GetPermissions %q", ms.name)
 	mt := ms.mt
 
diff --git a/services/mounttable/lib/mounttable_test.go b/services/mounttable/lib/mounttable_test.go
index a158be2..1a5cb88 100644
--- a/services/mounttable/lib/mounttable_test.go
+++ b/services/mounttable/lib/mounttable_test.go
@@ -11,9 +11,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/security/access"
 	"v.io/x/lib/vlog"
@@ -220,7 +220,7 @@
 	}
 }
 
-func newMT(t *testing.T, acl string, rootCtx *context.T) (ipc.Server, string) {
+func newMT(t *testing.T, acl string, rootCtx *context.T) (rpc.Server, string) {
 	server, err := v23.NewServer(rootCtx, options.ServesMountTable(true))
 	if err != nil {
 		boom(t, "r.NewServer: %s", err)
@@ -243,7 +243,7 @@
 	return server, estr
 }
 
-func newCollection(t *testing.T, acl string, rootCtx *context.T) (ipc.Server, string) {
+func newCollection(t *testing.T, acl string, rootCtx *context.T) (rpc.Server, string) {
 	server, err := v23.NewServer(rootCtx)
 	if err != nil {
 		boom(t, "r.NewServer: %s", err)
@@ -351,7 +351,7 @@
 func doGlobX(t *testing.T, ctx *context.T, ep, suffix, pattern string, joinServer bool) []string {
 	name := naming.JoinAddressName(ep, suffix)
 	client := v23.GetClient(ctx)
-	call, err := client.StartCall(ctx, name, ipc.GlobMethod, []interface{}{pattern}, options.NoResolve{})
+	call, err := client.StartCall(ctx, name, rpc.GlobMethod, []interface{}{pattern}, options.NoResolve{})
 	if err != nil {
 		boom(t, "Glob.StartCall %s %s: %s", name, pattern, err)
 	}
diff --git a/services/mounttable/lib/neighborhood.go b/services/mounttable/lib/neighborhood.go
index 51d6a4e..e5f0aa9 100644
--- a/services/mounttable/lib/neighborhood.go
+++ b/services/mounttable/lib/neighborhood.go
@@ -12,8 +12,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/mounttable"
 	"v.io/v23/services/security/access"
@@ -33,7 +33,7 @@
 	nw     netconfig.NetConfigWatcher
 }
 
-var _ ipc.Dispatcher = (*neighborhood)(nil)
+var _ rpc.Dispatcher = (*neighborhood)(nil)
 
 type neighborhoodService struct {
 	name  string
@@ -120,17 +120,17 @@
 
 // NewLoopbackNeighborhoodDispatcher creates a new instance of a dispatcher for
 // a neighborhood service provider on loopback interfaces (meant for testing).
-func NewLoopbackNeighborhoodDispatcher(host string, addresses ...string) (ipc.Dispatcher, error) {
+func NewLoopbackNeighborhoodDispatcher(host string, addresses ...string) (rpc.Dispatcher, error) {
 	return newNeighborhood(host, addresses, true)
 }
 
 // NewNeighborhoodDispatcher creates a new instance of a dispatcher for a
 // neighborhood service provider.
-func NewNeighborhoodDispatcher(host string, addresses ...string) (ipc.Dispatcher, error) {
+func NewNeighborhoodDispatcher(host string, addresses ...string) (rpc.Dispatcher, error) {
 	return newNeighborhood(host, addresses, false)
 }
 
-// Lookup implements ipc.Dispatcher.Lookup.
+// Lookup implements rpc.Dispatcher.Lookup.
 func (nh *neighborhood) Lookup(name string) (interface{}, security.Authorizer, error) {
 	vlog.VI(1).Infof("*********************LookupServer '%s'\n", name)
 	elems := strings.Split(name, "/")[nh.nelems:]
@@ -217,12 +217,12 @@
 }
 
 // ResolveStepX implements ResolveStepX
-func (ns *neighborhoodService) ResolveStepX(call ipc.ServerCall) (entry naming.MountEntry, err error) {
+func (ns *neighborhoodService) ResolveStepX(call rpc.ServerCall) (entry naming.MountEntry, err error) {
 	return ns.ResolveStep(call)
 }
 
 // ResolveStep implements ResolveStep
-func (ns *neighborhoodService) ResolveStep(call ipc.ServerCall) (entry naming.MountEntry, err error) {
+func (ns *neighborhoodService) ResolveStep(call rpc.ServerCall) (entry naming.MountEntry, err error) {
 	nh := ns.nh
 	vlog.VI(2).Infof("ResolveStep %v\n", ns.elems)
 	if len(ns.elems) == 0 {
@@ -245,25 +245,25 @@
 }
 
 // Mount not implemented.
-func (ns *neighborhoodService) Mount(call ipc.ServerCall, server string, ttlsecs uint32, opts naming.MountFlag) error {
+func (ns *neighborhoodService) Mount(call rpc.ServerCall, server string, ttlsecs uint32, opts naming.MountFlag) error {
 	return ns.MountX(call, server, nil, ttlsecs, opts)
 }
-func (ns *neighborhoodService) MountX(_ ipc.ServerCall, _ string, _ []security.BlessingPattern, _ uint32, _ naming.MountFlag) error {
+func (ns *neighborhoodService) MountX(_ rpc.ServerCall, _ string, _ []security.BlessingPattern, _ uint32, _ naming.MountFlag) error {
 	return errors.New("this server does not implement Mount")
 }
 
 // Unmount not implemented.
-func (*neighborhoodService) Unmount(_ ipc.ServerCall, _ string) error {
+func (*neighborhoodService) Unmount(_ rpc.ServerCall, _ string) error {
 	return errors.New("this server does not implement Unmount")
 }
 
 // Delete not implemented.
-func (*neighborhoodService) Delete(_ ipc.ServerCall, _ bool) error {
+func (*neighborhoodService) Delete(_ rpc.ServerCall, _ bool) error {
 	return errors.New("this server does not implement Delete")
 }
 
-// Glob__ implements ipc.AllGlobber
-func (ns *neighborhoodService) Glob__(call ipc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
+// Glob__ implements rpc.AllGlobber
+func (ns *neighborhoodService) Glob__(call rpc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
 	g, err := glob.Parse(pattern)
 	if err != nil {
 		return nil, err
@@ -299,10 +299,10 @@
 	}
 }
 
-func (*neighborhoodService) SetPermissions(call ipc.ServerCall, acl access.Permissions, etag string) error {
+func (*neighborhoodService) SetPermissions(call rpc.ServerCall, acl access.Permissions, etag string) error {
 	return errors.New("this server does not implement SetPermissions")
 }
 
-func (*neighborhoodService) GetPermissions(call ipc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (*neighborhoodService) GetPermissions(call rpc.ServerCall) (acl access.Permissions, etag string, err error) {
 	return nil, "", nil
 }
diff --git a/services/mounttable/lib/servers.go b/services/mounttable/lib/servers.go
index 66b3b4c..ffe0e7d 100644
--- a/services/mounttable/lib/servers.go
+++ b/services/mounttable/lib/servers.go
@@ -5,13 +5,13 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 )
 
-func StartServers(ctx *context.T, listenSpec ipc.ListenSpec, mountName, nhName, aclFile string) (string, func(), error) {
+func StartServers(ctx *context.T, listenSpec rpc.ListenSpec, mountName, nhName, aclFile string) (string, func(), error) {
 	var stopFuncs []func() error
 	stop := func() {
 		for i := len(stopFuncs) - 1; i >= 0; i-- {
@@ -71,7 +71,7 @@
 		for _, ep := range mtEndpoints {
 			addresses = append(addresses, ep.Name())
 		}
-		var nh ipc.Dispatcher
+		var nh rpc.Dispatcher
 		if host == "127.0.0.1" || host == "localhost" {
 			nh, err = NewLoopbackNeighborhoodDispatcher(nhName, addresses...)
 		} else {
diff --git a/services/proxy/proxyd/main.go b/services/proxy/proxyd/main.go
index ac768bf..210fb5a 100644
--- a/services/proxy/proxyd/main.go
+++ b/services/proxy/proxyd/main.go
@@ -10,7 +10,7 @@
 	"time"
 
 	"v.io/v23"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
 
@@ -51,14 +51,14 @@
 		go startHealthzServer(*healthzAddr)
 	}
 
-	// Start an IPC Server that listens through the proxy itself. This
+	// Start an RPC Server that listens through the proxy itself. This
 	// server will serve reserved methods only.
 	server, err := v23.NewServer(ctx)
 	if err != nil {
 		vlog.Fatalf("NewServer failed: %v", err)
 	}
 	defer server.Stop()
-	ls := ipc.ListenSpec{Proxy: proxyEndpoint.Name()}
+	ls := rpc.ListenSpec{Proxy: proxyEndpoint.Name()}
 	if _, err := server.Listen(ls); err != nil {
 		vlog.Fatalf("Listen(%v) failed: %v", ls, err)
 	}
diff --git a/services/security/discharger.vdl.go b/services/security/discharger.vdl.go
index 03b1f4d..aff5267 100644
--- a/services/security/discharger.vdl.go
+++ b/services/security/discharger.vdl.go
@@ -7,7 +7,7 @@
 	// VDL system imports
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 
 	// VDL user imports
 	"v.io/v23/security"
@@ -21,20 +21,20 @@
 	// Discharge is called by a principal that holds a blessing with a third
 	// party caveat and seeks to get a discharge that proves the fulfillment of
 	// this caveat.
-	Discharge(ctx *context.T, Caveat security.Caveat, Impetus security.DischargeImpetus, opts ...ipc.CallOpt) (Discharge security.Discharge, err error)
+	Discharge(ctx *context.T, Caveat security.Caveat, Impetus security.DischargeImpetus, opts ...rpc.CallOpt) (Discharge security.Discharge, err error)
 }
 
 // DischargerClientStub adds universal methods to DischargerClientMethods.
 type DischargerClientStub interface {
 	DischargerClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // DischargerClient returns a client stub for Discharger.
-func DischargerClient(name string, opts ...ipc.BindOpt) DischargerClientStub {
-	var client ipc.Client
+func DischargerClient(name string, opts ...rpc.BindOpt) DischargerClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -43,18 +43,18 @@
 
 type implDischargerClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implDischargerClientStub) c(ctx *context.T) ipc.Client {
+func (c implDischargerClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implDischargerClientStub) Discharge(ctx *context.T, i0 security.Caveat, i1 security.DischargeImpetus, opts ...ipc.CallOpt) (o0 security.Discharge, err error) {
-	var call ipc.ClientCall
+func (c implDischargerClientStub) Discharge(ctx *context.T, i0 security.Caveat, i1 security.DischargeImpetus, opts ...rpc.CallOpt) (o0 security.Discharge, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Discharge", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -70,11 +70,11 @@
 	// Discharge is called by a principal that holds a blessing with a third
 	// party caveat and seeks to get a discharge that proves the fulfillment of
 	// this caveat.
-	Discharge(call ipc.ServerCall, Caveat security.Caveat, Impetus security.DischargeImpetus) (Discharge security.Discharge, err error)
+	Discharge(call rpc.ServerCall, Caveat security.Caveat, Impetus security.DischargeImpetus) (Discharge security.Discharge, err error)
 }
 
 // DischargerServerStubMethods is the server interface containing
-// Discharger methods, as expected by ipc.Server.
+// Discharger methods, as expected by rpc.Server.
 // There is no difference between this interface and DischargerServerMethods
 // since there are no streaming methods.
 type DischargerServerStubMethods DischargerServerMethods
@@ -83,21 +83,21 @@
 type DischargerServerStub interface {
 	DischargerServerStubMethods
 	// Describe the Discharger interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // DischargerServer returns a server stub for Discharger.
 // It converts an implementation of DischargerServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func DischargerServer(impl DischargerServerMethods) DischargerServerStub {
 	stub := implDischargerServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -105,38 +105,38 @@
 
 type implDischargerServerStub struct {
 	impl DischargerServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implDischargerServerStub) Discharge(call ipc.ServerCall, i0 security.Caveat, i1 security.DischargeImpetus) (security.Discharge, error) {
+func (s implDischargerServerStub) Discharge(call rpc.ServerCall, i0 security.Caveat, i1 security.DischargeImpetus) (security.Discharge, error) {
 	return s.impl.Discharge(call, i0, i1)
 }
 
-func (s implDischargerServerStub) Globber() *ipc.GlobState {
+func (s implDischargerServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implDischargerServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{DischargerDesc}
+func (s implDischargerServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{DischargerDesc}
 }
 
 // DischargerDesc describes the Discharger interface.
-var DischargerDesc ipc.InterfaceDesc = descDischarger
+var DischargerDesc rpc.InterfaceDesc = descDischarger
 
 // descDischarger hides the desc to keep godoc clean.
-var descDischarger = ipc.InterfaceDesc{
+var descDischarger = rpc.InterfaceDesc{
 	Name:    "Discharger",
 	PkgPath: "v.io/x/ref/services/security",
 	Doc:     "// Discharger is the interface for obtaining discharges for ThirdPartyCaveats.",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Discharge",
 			Doc:  "// Discharge is called by a principal that holds a blessing with a third\n// party caveat and seeks to get a discharge that proves the fulfillment of\n// this caveat.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"Caveat", ``},  // security.Caveat
 				{"Impetus", ``}, // security.DischargeImpetus
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"Discharge", ``}, // security.Discharge
 			},
 		},
diff --git a/services/security/discharger/discharger.go b/services/security/discharger/discharger.go
index 3ec0814..68a5100 100644
--- a/services/security/discharger/discharger.go
+++ b/services/security/discharger/discharger.go
@@ -4,7 +4,7 @@
 	"fmt"
 	"time"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	services "v.io/x/ref/services/security"
 )
@@ -13,7 +13,7 @@
 // namespace with no additional caveats iff the caveat is valid.
 type dischargerd struct{}
 
-func (dischargerd) Discharge(call ipc.ServerCall, caveat security.Caveat, _ security.DischargeImpetus) (security.Discharge, error) {
+func (dischargerd) Discharge(call rpc.ServerCall, caveat security.Caveat, _ security.DischargeImpetus) (security.Discharge, error) {
 	tp := caveat.ThirdPartyDetails()
 	if tp == nil {
 		return security.Discharge{}, fmt.Errorf("Caveat %v does not represent a third party caveat", caveat)
diff --git a/services/security/groups/server/group.go b/services/security/groups/server/group.go
index 3b627e0..6b1311d 100644
--- a/services/security/groups/server/group.go
+++ b/services/security/groups/server/group.go
@@ -1,7 +1,7 @@
 package server
 
 import (
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/security/access"
 	"v.io/v23/services/security/groups"
@@ -22,7 +22,7 @@
 // It seems we need either (a) identity providers to manage group servers and
 // reserve buckets for users they've blessed, or (b) some way to determine the
 // user name from a blessing and enforce that group names start with user names.
-func (g *group) Create(call ipc.ServerCall, acl access.Permissions, entries []groups.BlessingPatternChunk) error {
+func (g *group) Create(call rpc.ServerCall, acl access.Permissions, entries []groups.BlessingPatternChunk) error {
 	// Perform AccessList check.
 	// TODO(sadovsky): Enable this AccessList check and acquire a lock on the group
 	// server AccessList.
@@ -64,26 +64,26 @@
 	return nil
 }
 
-func (g *group) Delete(call ipc.ServerCall, etag string) error {
+func (g *group) Delete(call rpc.ServerCall, etag string) error {
 	return g.readModifyWrite(call, etag, func(gd *groupData, etagSt string) error {
 		return g.m.st.Delete(g.name, etagSt)
 	})
 }
 
-func (g *group) Add(call ipc.ServerCall, entry groups.BlessingPatternChunk, etag string) error {
+func (g *group) Add(call rpc.ServerCall, entry groups.BlessingPatternChunk, etag string) error {
 	return g.update(call, etag, func(gd *groupData) {
 		gd.Entries[entry] = struct{}{}
 	})
 }
 
-func (g *group) Remove(call ipc.ServerCall, entry groups.BlessingPatternChunk, etag string) error {
+func (g *group) Remove(call rpc.ServerCall, entry groups.BlessingPatternChunk, etag string) error {
 	return g.update(call, etag, func(gd *groupData) {
 		delete(gd.Entries, entry)
 	})
 }
 
 // TODO(sadovsky): Replace fake implementation with real implementation.
-func (g *group) Get(call ipc.ServerCall, req groups.GetRequest, reqEtag string) (res groups.GetResponse, etag string, err error) {
+func (g *group) Get(call rpc.ServerCall, req groups.GetRequest, reqEtag string) (res groups.GetResponse, etag string, err error) {
 	gd, etag, err := g.getInternal(call)
 	if err != nil {
 		return groups.GetResponse{}, "", err
@@ -92,7 +92,7 @@
 }
 
 // TODO(sadovsky): Replace fake implementation with real implementation.
-func (g *group) Rest(call ipc.ServerCall, req groups.RestRequest, reqEtag string) (res groups.RestResponse, etag string, err error) {
+func (g *group) Rest(call rpc.ServerCall, req groups.RestRequest, reqEtag string) (res groups.RestResponse, etag string, err error) {
 	_, etag, err = g.getInternal(call)
 	if err != nil {
 		return groups.RestResponse{}, "", err
@@ -100,13 +100,13 @@
 	return groups.RestResponse{}, etag, nil
 }
 
-func (g *group) SetPermissions(call ipc.ServerCall, acl access.Permissions, etag string) error {
+func (g *group) SetPermissions(call rpc.ServerCall, acl access.Permissions, etag string) error {
 	return g.update(call, etag, func(gd *groupData) {
 		gd.AccessList = acl
 	})
 }
 
-func (g *group) GetPermissions(call ipc.ServerCall) (acl access.Permissions, etag string, err error) {
+func (g *group) GetPermissions(call rpc.ServerCall) (acl access.Permissions, etag string, err error) {
 	gd, etag, err := g.getInternal(call)
 	if err != nil {
 		return nil, "", err
@@ -118,7 +118,7 @@
 // Internal helpers
 
 // Returns a VDL-compatible error.
-func (g *group) authorize(call ipc.ServerCall, acl access.Permissions) error {
+func (g *group) authorize(call rpc.ServerCall, acl access.Permissions) error {
 	// TODO(sadovsky): We ignore the returned error since TypicalTagType is
 	// guaranteed to return a valid tagType. It would be nice to have an
 	// alternative function that assumes TypicalTagType, since presumably that's
@@ -132,7 +132,7 @@
 }
 
 // Returns a VDL-compatible error. Performs access check.
-func (g *group) getInternal(call ipc.ServerCall) (gd groupData, etag string, err error) {
+func (g *group) getInternal(call rpc.ServerCall) (gd groupData, etag string, err error) {
 	v, etag, err := g.m.st.Get(g.name)
 	if err != nil {
 		if _, ok := err.(*ErrUnknownKey); ok {
@@ -152,7 +152,7 @@
 }
 
 // Returns a VDL-compatible error. Performs access check.
-func (g *group) update(call ipc.ServerCall, etag string, fn func(gd *groupData)) error {
+func (g *group) update(call rpc.ServerCall, etag string, fn func(gd *groupData)) error {
 	return g.readModifyWrite(call, etag, func(gd *groupData, etagSt string) error {
 		fn(gd)
 		return g.m.st.Update(g.name, *gd, etagSt)
@@ -162,7 +162,7 @@
 // Returns a VDL-compatible error. Performs access check.
 // fn should perform the "modify, write" part of "read, modify, write", and
 // should return a Store error.
-func (g *group) readModifyWrite(call ipc.ServerCall, etag string, fn func(gd *groupData, etagSt string) error) error {
+func (g *group) readModifyWrite(call rpc.ServerCall, etag string, fn func(gd *groupData, etagSt string) error) error {
 	// Transaction retry loop.
 	for i := 0; i < 3; i++ {
 		gd, etagSt, err := g.getInternal(call)
diff --git a/services/security/groups/server/manager.go b/services/security/groups/server/manager.go
index d68b77a..9110c59 100644
--- a/services/security/groups/server/manager.go
+++ b/services/security/groups/server/manager.go
@@ -3,7 +3,7 @@
 import (
 	"strings"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/services/security/access"
 	"v.io/v23/services/security/groups"
@@ -14,7 +14,7 @@
 	acl access.Permissions
 }
 
-var _ ipc.Dispatcher = (*manager)(nil)
+var _ rpc.Dispatcher = (*manager)(nil)
 
 func NewManager(st Store, acl access.Permissions) *manager {
 	return &manager{st: st, acl: acl}
diff --git a/services/wsprd/account/account.go b/services/wsprd/account/account.go
index 3d0a477..ec1d9e9 100644
--- a/services/wsprd/account/account.go
+++ b/services/wsprd/account/account.go
@@ -8,23 +8,23 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/services/wsprd/principal"
 )
 
 type BlesserService interface {
-	BlessUsingAccessToken(ctx *context.T, token string, opts ...ipc.CallOpt) (blessingObj security.Blessings, account string, err error)
+	BlessUsingAccessToken(ctx *context.T, token string, opts ...rpc.CallOpt) (blessingObj security.Blessings, account string, err error)
 }
 
 type bs struct {
 	name string
 }
 
-func (s *bs) BlessUsingAccessToken(ctx *context.T, token string, opts ...ipc.CallOpt) (blessingObj security.Blessings, account string, err error) {
+func (s *bs) BlessUsingAccessToken(ctx *context.T, token string, opts ...rpc.CallOpt) (blessingObj security.Blessings, account string, err error) {
 	client := v23.GetClient(ctx)
-	var call ipc.ClientCall
+	var call rpc.ClientCall
 	if call, err = client.StartCall(ctx, s.name, "BlessUsingAccessToken", []interface{}{token}, opts...); err != nil {
 		return
 	}
diff --git a/services/wsprd/app/app.go b/services/wsprd/app/app.go
index 81d3e49..ce64c62 100644
--- a/services/wsprd/app/app.go
+++ b/services/wsprd/app/app.go
@@ -14,9 +14,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vdl"
 	"v.io/v23/vdlroot/signature"
@@ -25,10 +25,10 @@
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
 	vsecurity "v.io/x/ref/security"
-	"v.io/x/ref/services/wsprd/ipc/server"
 	"v.io/x/ref/services/wsprd/lib"
 	"v.io/x/ref/services/wsprd/namespace"
 	"v.io/x/ref/services/wsprd/principal"
+	"v.io/x/ref/services/wsprd/rpc/server"
 )
 
 // pkgPath is the prefix os errors in this package.
@@ -73,8 +73,8 @@
 	// The cleanup function for this controller.
 	cancel context.CancelFunc
 
-	// The ipc.ListenSpec to use with server.Listen
-	listenSpec *ipc.ListenSpec
+	// The rpc.ListenSpec to use with server.Listen
+	listenSpec *rpc.ListenSpec
 
 	// Used to generate unique ids for requests initiated by the proxy.
 	// These ids will be even so they don't collide with the ids generated
@@ -105,12 +105,12 @@
 	// reservedServices contains a map of reserved service names.  These
 	// are objects that serve requests in wspr without actually making
 	// an outgoing rpc call.
-	reservedServices map[string]ipc.Invoker
+	reservedServices map[string]rpc.Invoker
 }
 
 // NewController creates a new Controller.  writerCreator will be used to create a new flow for rpcs to
 // javascript server.
-func NewController(ctx *context.T, writerCreator func(id int32) lib.ClientWriter, listenSpec *ipc.ListenSpec, namespaceRoots []string, p security.Principal) (*Controller, error) {
+func NewController(ctx *context.T, writerCreator func(id int32) lib.ClientWriter, listenSpec *rpc.ListenSpec, namespaceRoots []string, p security.Principal) (*Controller, error) {
 	ctx, cancel := context.WithCancel(ctx)
 
 	if namespaceRoots != nil {
@@ -136,15 +136,15 @@
 		blessingsStore: principal.NewJSBlessingsHandles(),
 	}
 
-	controllerInvoker, err := ipc.ReflectInvoker(ControllerServer(controller))
+	controllerInvoker, err := rpc.ReflectInvoker(ControllerServer(controller))
 	if err != nil {
 		return nil, err
 	}
-	namespaceInvoker, err := ipc.ReflectInvoker(namespace.New(ctx))
+	namespaceInvoker, err := rpc.ReflectInvoker(namespace.New(ctx))
 	if err != nil {
 		return nil, err
 	}
-	controller.reservedServices = map[string]ipc.Invoker{
+	controller.reservedServices = map[string]rpc.Invoker{
 		"__controller": controllerInvoker,
 		"__namespace":  namespaceInvoker,
 	}
@@ -154,7 +154,7 @@
 }
 
 // finishCall waits for the call to finish and write out the response to w.
-func (c *Controller) finishCall(ctx *context.T, w lib.ClientWriter, clientCall ipc.ClientCall, msg *RpcRequest, span vtrace.Span) {
+func (c *Controller) finishCall(ctx *context.T, w lib.ClientWriter, clientCall rpc.ClientCall, msg *RpcRequest, span vtrace.Span) {
 	if msg.IsStreaming {
 		for {
 			var item interface{}
@@ -208,7 +208,7 @@
 	}
 }
 
-func (c *Controller) startCall(ctx *context.T, w lib.ClientWriter, msg *RpcRequest, inArgs []interface{}) (ipc.ClientCall, error) {
+func (c *Controller) startCall(ctx *context.T, w lib.ClientWriter, msg *RpcRequest, inArgs []interface{}) (rpc.ClientCall, error) {
 	methodName := lib.UppercaseFirstCharacter(msg.Method)
 	retryTimeoutOpt := options.RetryTimeout(time.Duration(*retryTimeout) * time.Second)
 	clientCall, err := v23.GetClient(ctx).StartCall(ctx, msg.Name, methodName, inArgs, retryTimeoutOpt)
@@ -223,7 +223,7 @@
 
 // CreateNewFlow creats a new server flow that will be used to write out
 // streaming messages to Javascript.
-func (c *Controller) CreateNewFlow(s *server.Server, stream ipc.Stream) *server.Flow {
+func (c *Controller) CreateNewFlow(s *server.Server, stream rpc.Stream) *server.Flow {
 	c.Lock()
 	defer c.Unlock()
 	id := c.lastGeneratedId
@@ -382,7 +382,7 @@
 }
 func (l *localCall) Recv(interface{}) error                          { return nil }
 func (l *localCall) GrantedBlessings() security.Blessings            { return security.Blessings{} }
-func (l *localCall) Server() ipc.Server                              { return nil }
+func (l *localCall) Server() rpc.Server                              { return nil }
 func (l *localCall) Context() *context.T                             { return l.ctx }
 func (l *localCall) Timestamp() (t time.Time)                        { return }
 func (l *localCall) Method() string                                  { return l.vrpc.Method }
@@ -398,7 +398,7 @@
 func (l *localCall) RemoteEndpoint() naming.Endpoint                 { return nil }
 func (l *localCall) VanadiumContext() *context.T                     { return l.ctx }
 
-func (c *Controller) handleInternalCall(ctx *context.T, invoker ipc.Invoker, msg *RpcRequest, decoder *vom.Decoder, w lib.ClientWriter, span vtrace.Span) {
+func (c *Controller) handleInternalCall(ctx *context.T, invoker rpc.Invoker, msg *RpcRequest, decoder *vom.Decoder, w lib.ClientWriter, span vtrace.Span) {
 	argptrs, tags, err := invoker.Prepare(msg.Method, int(msg.NumInArgs))
 	if err != nil {
 		w.Error(verror.Convert(verror.ErrInternal, ctx, err))
@@ -581,7 +581,7 @@
 
 // Serve instructs WSPR to start listening for calls on behalf
 // of a javascript server.
-func (c *Controller) Serve(_ ipc.ServerCall, name string, serverId uint32) error {
+func (c *Controller) Serve(_ rpc.ServerCall, name string, serverId uint32) error {
 	server, err := c.maybeCreateServer(serverId)
 	if err != nil {
 		return verror.Convert(verror.ErrInternal, nil, err)
@@ -595,7 +595,7 @@
 
 // Stop instructs WSPR to stop listening for calls for the
 // given javascript server.
-func (c *Controller) Stop(_ ipc.ServerCall, serverId uint32) error {
+func (c *Controller) Stop(_ rpc.ServerCall, serverId uint32) error {
 	c.Lock()
 	server := c.servers[serverId]
 	if server == nil {
@@ -610,7 +610,7 @@
 }
 
 // AddName adds a published name to an existing server.
-func (c *Controller) AddName(_ ipc.ServerCall, serverId uint32, name string) error {
+func (c *Controller) AddName(_ rpc.ServerCall, serverId uint32, name string) error {
 	// Create a server for the pipe, if it does not exist already
 	server, err := c.maybeCreateServer(serverId)
 	if err != nil {
@@ -624,7 +624,7 @@
 }
 
 // RemoveName removes a published name from an existing server.
-func (c *Controller) RemoveName(_ ipc.ServerCall, serverId uint32, name string) error {
+func (c *Controller) RemoveName(_ rpc.ServerCall, serverId uint32, name string) error {
 	// Create a server for the pipe, if it does not exist already
 	server, err := c.maybeCreateServer(serverId)
 	if err != nil {
@@ -669,18 +669,18 @@
 }
 
 // Signature uses the signature manager to get and cache the signature of a remote server.
-func (c *Controller) Signature(call ipc.ServerCall, name string) ([]signature.Interface, error) {
+func (c *Controller) Signature(call rpc.ServerCall, name string) ([]signature.Interface, error) {
 	return c.getSignature(call.Context(), name)
 }
 
 // UnlinkBlessings removes the given blessings from the blessings store.
-func (c *Controller) UnlinkBlessings(_ ipc.ServerCall, handle int32) error {
+func (c *Controller) UnlinkBlessings(_ rpc.ServerCall, handle int32) error {
 	c.blessingsStore.Remove(handle)
 	return nil
 }
 
 // BlessPublicKey creates a new blessing.
-func (c *Controller) BlessPublicKey(_ ipc.ServerCall,
+func (c *Controller) BlessPublicKey(_ rpc.ServerCall,
 	handle int32,
 	caveats []security.Caveat,
 	duration time.Duration,
@@ -716,7 +716,7 @@
 }
 
 // CreateBlessings creates a new principal self-blessed with the given extension.
-func (c *Controller) CreateBlessings(_ ipc.ServerCall,
+func (c *Controller) CreateBlessings(_ rpc.ServerCall,
 	extension string) (int32, string, error) {
 	p, err := vsecurity.NewPrincipal()
 	if err != nil {
@@ -735,7 +735,7 @@
 	return handle, encodedKey, nil
 }
 
-func (c *Controller) RemoteBlessings(call ipc.ServerCall, name, method string) ([]string, error) {
+func (c *Controller) RemoteBlessings(call rpc.ServerCall, name, method string) ([]string, error) {
 	vlog.VI(2).Infof("requesting remote blessings for %q", name)
 
 	cctx, cancel := context.WithTimeout(call.Context(), 5*time.Second)
diff --git a/services/wsprd/app/app_test.go b/services/wsprd/app/app_test.go
index 70f7055..aa9c8ee 100644
--- a/services/wsprd/app/app_test.go
+++ b/services/wsprd/app/app_test.go
@@ -10,9 +10,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vdl"
 	"v.io/v23/vdlroot/signature"
@@ -24,9 +24,9 @@
 	"v.io/x/ref/profiles"
 	vsecurity "v.io/x/ref/security"
 	mounttable "v.io/x/ref/services/mounttable/lib"
-	"v.io/x/ref/services/wsprd/ipc/server"
 	"v.io/x/ref/services/wsprd/lib"
 	"v.io/x/ref/services/wsprd/lib/testwriter"
+	"v.io/x/ref/services/wsprd/rpc/server"
 	"v.io/x/ref/test"
 	tsecurity "v.io/x/ref/test/security"
 	"v.io/x/ref/test/testutil"
@@ -73,18 +73,18 @@
 
 type simpleAdder struct{}
 
-func (s simpleAdder) Add(_ ipc.ServerCall, a, b int32) (int32, error) {
+func (s simpleAdder) Add(_ rpc.ServerCall, a, b int32) (int32, error) {
 	return a + b, nil
 }
 
-func (s simpleAdder) Divide(_ ipc.ServerCall, a, b int32) (int32, error) {
+func (s simpleAdder) Divide(_ rpc.ServerCall, a, b int32) (int32, error) {
 	if b == 0 {
 		return 0, verror.New(verror.ErrBadArg, nil, "div 0")
 	}
 	return a / b, nil
 }
 
-func (s simpleAdder) StreamingAdd(call ipc.StreamServerCall) (int32, error) {
+func (s simpleAdder) StreamingAdd(call rpc.StreamServerCall) (int32, error) {
 	total := int32(0)
 	var value int32
 	for err := call.Recv(&value); err == nil; err = call.Recv(&value) {
@@ -116,7 +116,7 @@
 	},
 }
 
-func startAnyServer(ctx *context.T, servesMT bool, dispatcher ipc.Dispatcher) (ipc.Server, naming.Endpoint, error) {
+func startAnyServer(ctx *context.T, servesMT bool, dispatcher rpc.Dispatcher) (rpc.Server, naming.Endpoint, error) {
 	// Create a new server instance.
 	s, err := v23.NewServer(ctx, options.ServesMountTable(servesMT))
 	if err != nil {
@@ -134,11 +134,11 @@
 	return s, endpoints[0], nil
 }
 
-func startAdderServer(ctx *context.T) (ipc.Server, naming.Endpoint, error) {
+func startAdderServer(ctx *context.T) (rpc.Server, naming.Endpoint, error) {
 	return startAnyServer(ctx, false, testutil.LeafDispatcher(simpleAdder{}, nil))
 }
 
-func startMountTableServer(ctx *context.T) (ipc.Server, naming.Endpoint, error) {
+func startMountTableServer(ctx *context.T) (rpc.Server, naming.Endpoint, error) {
 	mt, err := mounttable.NewMountTableDispatcher("")
 	if err != nil {
 		return nil, nil, err
@@ -306,7 +306,7 @@
 type runningTest struct {
 	controller       *Controller
 	writer           *testwriter.Writer
-	mounttableServer ipc.Server
+	mounttableServer rpc.Server
 	proxyShutdown    func()
 }
 
diff --git a/services/wsprd/app/controller.vdl.go b/services/wsprd/app/controller.vdl.go
index 32938d0..d523156 100644
--- a/services/wsprd/app/controller.vdl.go
+++ b/services/wsprd/app/controller.vdl.go
@@ -7,7 +7,7 @@
 	// VDL system imports
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 
 	// VDL user imports
 	"time"
@@ -21,37 +21,37 @@
 type ControllerClientMethods interface {
 	// Serve instructs WSPR to start listening for calls on behalf
 	// of a javascript server.
-	Serve(ctx *context.T, name string, serverId uint32, opts ...ipc.CallOpt) error
+	Serve(ctx *context.T, name string, serverId uint32, opts ...rpc.CallOpt) error
 	// Stop instructs WSPR to stop listening for calls for the
 	// given javascript server.
-	Stop(ctx *context.T, serverId uint32, opts ...ipc.CallOpt) error
+	Stop(ctx *context.T, serverId uint32, opts ...rpc.CallOpt) error
 	// AddName adds a published name to an existing server.
-	AddName(ctx *context.T, serverId uint32, name string, opts ...ipc.CallOpt) error
+	AddName(ctx *context.T, serverId uint32, name string, opts ...rpc.CallOpt) error
 	// RemoveName removes a published name from an existing server.
-	RemoveName(ctx *context.T, serverId uint32, name string, opts ...ipc.CallOpt) error
+	RemoveName(ctx *context.T, serverId uint32, name string, opts ...rpc.CallOpt) error
 	// UnlinkBlessings removes the given blessings from the blessings store.
-	UnlinkBlessings(ctx *context.T, handle int32, opts ...ipc.CallOpt) error
+	UnlinkBlessings(ctx *context.T, handle int32, opts ...rpc.CallOpt) error
 	// BlessPublicKey creates a new blessing.
-	BlessPublicKey(ctx *context.T, fromHandle int32, caveats []security.Caveat, durationMs time.Duration, extension string, opts ...ipc.CallOpt) (handle int32, publicKey string, err error)
+	BlessPublicKey(ctx *context.T, fromHandle int32, caveats []security.Caveat, durationMs time.Duration, extension string, opts ...rpc.CallOpt) (handle int32, publicKey string, err error)
 	// CreateBlessings creates a new principal self-blessed with the given extension.
-	CreateBlessings(ctx *context.T, extension string, opts ...ipc.CallOpt) (handle int32, publicKey string, err error)
+	CreateBlessings(ctx *context.T, extension string, opts ...rpc.CallOpt) (handle int32, publicKey string, err error)
 	// RemoteBlessings fetches the remote blessings for a given name and method.
-	RemoteBlessings(ctx *context.T, name string, method string, opts ...ipc.CallOpt) ([]string, error)
+	RemoteBlessings(ctx *context.T, name string, method string, opts ...rpc.CallOpt) ([]string, error)
 	// Signature fetches the signature for a given name.
-	Signature(ctx *context.T, name string, opts ...ipc.CallOpt) ([]signature.Interface, error)
+	Signature(ctx *context.T, name string, opts ...rpc.CallOpt) ([]signature.Interface, error)
 }
 
 // ControllerClientStub adds universal methods to ControllerClientMethods.
 type ControllerClientStub interface {
 	ControllerClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // ControllerClient returns a client stub for Controller.
-func ControllerClient(name string, opts ...ipc.BindOpt) ControllerClientStub {
-	var client ipc.Client
+func ControllerClient(name string, opts ...rpc.BindOpt) ControllerClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -60,18 +60,18 @@
 
 type implControllerClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implControllerClientStub) c(ctx *context.T) ipc.Client {
+func (c implControllerClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implControllerClientStub) Serve(ctx *context.T, i0 string, i1 uint32, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implControllerClientStub) Serve(ctx *context.T, i0 string, i1 uint32, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Serve", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -79,8 +79,8 @@
 	return
 }
 
-func (c implControllerClientStub) Stop(ctx *context.T, i0 uint32, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implControllerClientStub) Stop(ctx *context.T, i0 uint32, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Stop", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -88,8 +88,8 @@
 	return
 }
 
-func (c implControllerClientStub) AddName(ctx *context.T, i0 uint32, i1 string, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implControllerClientStub) AddName(ctx *context.T, i0 uint32, i1 string, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "AddName", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -97,8 +97,8 @@
 	return
 }
 
-func (c implControllerClientStub) RemoveName(ctx *context.T, i0 uint32, i1 string, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implControllerClientStub) RemoveName(ctx *context.T, i0 uint32, i1 string, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "RemoveName", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -106,8 +106,8 @@
 	return
 }
 
-func (c implControllerClientStub) UnlinkBlessings(ctx *context.T, i0 int32, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implControllerClientStub) UnlinkBlessings(ctx *context.T, i0 int32, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "UnlinkBlessings", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -115,8 +115,8 @@
 	return
 }
 
-func (c implControllerClientStub) BlessPublicKey(ctx *context.T, i0 int32, i1 []security.Caveat, i2 time.Duration, i3 string, opts ...ipc.CallOpt) (o0 int32, o1 string, err error) {
-	var call ipc.ClientCall
+func (c implControllerClientStub) BlessPublicKey(ctx *context.T, i0 int32, i1 []security.Caveat, i2 time.Duration, i3 string, opts ...rpc.CallOpt) (o0 int32, o1 string, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "BlessPublicKey", []interface{}{i0, i1, i2, i3}, opts...); err != nil {
 		return
 	}
@@ -124,8 +124,8 @@
 	return
 }
 
-func (c implControllerClientStub) CreateBlessings(ctx *context.T, i0 string, opts ...ipc.CallOpt) (o0 int32, o1 string, err error) {
-	var call ipc.ClientCall
+func (c implControllerClientStub) CreateBlessings(ctx *context.T, i0 string, opts ...rpc.CallOpt) (o0 int32, o1 string, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "CreateBlessings", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -133,8 +133,8 @@
 	return
 }
 
-func (c implControllerClientStub) RemoteBlessings(ctx *context.T, i0 string, i1 string, opts ...ipc.CallOpt) (o0 []string, err error) {
-	var call ipc.ClientCall
+func (c implControllerClientStub) RemoteBlessings(ctx *context.T, i0 string, i1 string, opts ...rpc.CallOpt) (o0 []string, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "RemoteBlessings", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -142,8 +142,8 @@
 	return
 }
 
-func (c implControllerClientStub) Signature(ctx *context.T, i0 string, opts ...ipc.CallOpt) (o0 []signature.Interface, err error) {
-	var call ipc.ClientCall
+func (c implControllerClientStub) Signature(ctx *context.T, i0 string, opts ...rpc.CallOpt) (o0 []signature.Interface, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Signature", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -156,28 +156,28 @@
 type ControllerServerMethods interface {
 	// Serve instructs WSPR to start listening for calls on behalf
 	// of a javascript server.
-	Serve(call ipc.ServerCall, name string, serverId uint32) error
+	Serve(call rpc.ServerCall, name string, serverId uint32) error
 	// Stop instructs WSPR to stop listening for calls for the
 	// given javascript server.
-	Stop(call ipc.ServerCall, serverId uint32) error
+	Stop(call rpc.ServerCall, serverId uint32) error
 	// AddName adds a published name to an existing server.
-	AddName(call ipc.ServerCall, serverId uint32, name string) error
+	AddName(call rpc.ServerCall, serverId uint32, name string) error
 	// RemoveName removes a published name from an existing server.
-	RemoveName(call ipc.ServerCall, serverId uint32, name string) error
+	RemoveName(call rpc.ServerCall, serverId uint32, name string) error
 	// UnlinkBlessings removes the given blessings from the blessings store.
-	UnlinkBlessings(call ipc.ServerCall, handle int32) error
+	UnlinkBlessings(call rpc.ServerCall, handle int32) error
 	// BlessPublicKey creates a new blessing.
-	BlessPublicKey(call ipc.ServerCall, fromHandle int32, caveats []security.Caveat, durationMs time.Duration, extension string) (handle int32, publicKey string, err error)
+	BlessPublicKey(call rpc.ServerCall, fromHandle int32, caveats []security.Caveat, durationMs time.Duration, extension string) (handle int32, publicKey string, err error)
 	// CreateBlessings creates a new principal self-blessed with the given extension.
-	CreateBlessings(call ipc.ServerCall, extension string) (handle int32, publicKey string, err error)
+	CreateBlessings(call rpc.ServerCall, extension string) (handle int32, publicKey string, err error)
 	// RemoteBlessings fetches the remote blessings for a given name and method.
-	RemoteBlessings(call ipc.ServerCall, name string, method string) ([]string, error)
+	RemoteBlessings(call rpc.ServerCall, name string, method string) ([]string, error)
 	// Signature fetches the signature for a given name.
-	Signature(call ipc.ServerCall, name string) ([]signature.Interface, error)
+	Signature(call rpc.ServerCall, name string) ([]signature.Interface, error)
 }
 
 // ControllerServerStubMethods is the server interface containing
-// Controller methods, as expected by ipc.Server.
+// Controller methods, as expected by rpc.Server.
 // There is no difference between this interface and ControllerServerMethods
 // since there are no streaming methods.
 type ControllerServerStubMethods ControllerServerMethods
@@ -186,21 +186,21 @@
 type ControllerServerStub interface {
 	ControllerServerStubMethods
 	// Describe the Controller interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // ControllerServer returns a server stub for Controller.
 // It converts an implementation of ControllerServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func ControllerServer(impl ControllerServerMethods) ControllerServerStub {
 	stub := implControllerServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -208,65 +208,65 @@
 
 type implControllerServerStub struct {
 	impl ControllerServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
-func (s implControllerServerStub) Serve(call ipc.ServerCall, i0 string, i1 uint32) error {
+func (s implControllerServerStub) Serve(call rpc.ServerCall, i0 string, i1 uint32) error {
 	return s.impl.Serve(call, i0, i1)
 }
 
-func (s implControllerServerStub) Stop(call ipc.ServerCall, i0 uint32) error {
+func (s implControllerServerStub) Stop(call rpc.ServerCall, i0 uint32) error {
 	return s.impl.Stop(call, i0)
 }
 
-func (s implControllerServerStub) AddName(call ipc.ServerCall, i0 uint32, i1 string) error {
+func (s implControllerServerStub) AddName(call rpc.ServerCall, i0 uint32, i1 string) error {
 	return s.impl.AddName(call, i0, i1)
 }
 
-func (s implControllerServerStub) RemoveName(call ipc.ServerCall, i0 uint32, i1 string) error {
+func (s implControllerServerStub) RemoveName(call rpc.ServerCall, i0 uint32, i1 string) error {
 	return s.impl.RemoveName(call, i0, i1)
 }
 
-func (s implControllerServerStub) UnlinkBlessings(call ipc.ServerCall, i0 int32) error {
+func (s implControllerServerStub) UnlinkBlessings(call rpc.ServerCall, i0 int32) error {
 	return s.impl.UnlinkBlessings(call, i0)
 }
 
-func (s implControllerServerStub) BlessPublicKey(call ipc.ServerCall, i0 int32, i1 []security.Caveat, i2 time.Duration, i3 string) (int32, string, error) {
+func (s implControllerServerStub) BlessPublicKey(call rpc.ServerCall, i0 int32, i1 []security.Caveat, i2 time.Duration, i3 string) (int32, string, error) {
 	return s.impl.BlessPublicKey(call, i0, i1, i2, i3)
 }
 
-func (s implControllerServerStub) CreateBlessings(call ipc.ServerCall, i0 string) (int32, string, error) {
+func (s implControllerServerStub) CreateBlessings(call rpc.ServerCall, i0 string) (int32, string, error) {
 	return s.impl.CreateBlessings(call, i0)
 }
 
-func (s implControllerServerStub) RemoteBlessings(call ipc.ServerCall, i0 string, i1 string) ([]string, error) {
+func (s implControllerServerStub) RemoteBlessings(call rpc.ServerCall, i0 string, i1 string) ([]string, error) {
 	return s.impl.RemoteBlessings(call, i0, i1)
 }
 
-func (s implControllerServerStub) Signature(call ipc.ServerCall, i0 string) ([]signature.Interface, error) {
+func (s implControllerServerStub) Signature(call rpc.ServerCall, i0 string) ([]signature.Interface, error) {
 	return s.impl.Signature(call, i0)
 }
 
-func (s implControllerServerStub) Globber() *ipc.GlobState {
+func (s implControllerServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implControllerServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{ControllerDesc}
+func (s implControllerServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{ControllerDesc}
 }
 
 // ControllerDesc describes the Controller interface.
-var ControllerDesc ipc.InterfaceDesc = descController
+var ControllerDesc rpc.InterfaceDesc = descController
 
 // descController hides the desc to keep godoc clean.
-var descController = ipc.InterfaceDesc{
+var descController = rpc.InterfaceDesc{
 	Name:    "Controller",
 	PkgPath: "v.io/x/ref/services/wsprd/app",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Serve",
 			Doc:  "// Serve instructs WSPR to start listening for calls on behalf\n// of a javascript server.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"name", ``},     // string
 				{"serverId", ``}, // uint32
 			},
@@ -274,14 +274,14 @@
 		{
 			Name: "Stop",
 			Doc:  "// Stop instructs WSPR to stop listening for calls for the\n// given javascript server.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"serverId", ``}, // uint32
 			},
 		},
 		{
 			Name: "AddName",
 			Doc:  "// AddName adds a published name to an existing server.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"serverId", ``}, // uint32
 				{"name", ``},     // string
 			},
@@ -289,7 +289,7 @@
 		{
 			Name: "RemoveName",
 			Doc:  "// RemoveName removes a published name from an existing server.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"serverId", ``}, // uint32
 				{"name", ``},     // string
 			},
@@ -297,20 +297,20 @@
 		{
 			Name: "UnlinkBlessings",
 			Doc:  "// UnlinkBlessings removes the given blessings from the blessings store.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"handle", ``}, // int32
 			},
 		},
 		{
 			Name: "BlessPublicKey",
 			Doc:  "// BlessPublicKey creates a new blessing.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"fromHandle", ``}, // int32
 				{"caveats", ``},    // []security.Caveat
 				{"durationMs", ``}, // time.Duration
 				{"extension", ``},  // string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"handle", ``},    // int32
 				{"publicKey", ``}, // string
 			},
@@ -318,10 +318,10 @@
 		{
 			Name: "CreateBlessings",
 			Doc:  "// CreateBlessings creates a new principal self-blessed with the given extension.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"extension", ``}, // string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"handle", ``},    // int32
 				{"publicKey", ``}, // string
 			},
@@ -329,21 +329,21 @@
 		{
 			Name: "RemoteBlessings",
 			Doc:  "// RemoteBlessings fetches the remote blessings for a given name and method.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"name", ``},   // string
 				{"method", ``}, // string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // []string
 			},
 		},
 		{
 			Name: "Signature",
 			Doc:  "// Signature fetches the signature for a given name.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"name", ``}, // string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // []signature.Interface
 			},
 		},
diff --git a/services/wsprd/app/mock_jsServer_test.go b/services/wsprd/app/mock_jsServer_test.go
index 6bf089f..23eb405 100644
--- a/services/wsprd/app/mock_jsServer_test.go
+++ b/services/wsprd/app/mock_jsServer_test.go
@@ -11,9 +11,9 @@
 	"v.io/v23/vdl"
 	"v.io/v23/vdlroot/signature"
 	"v.io/v23/vom"
-	"v.io/x/ref/services/wsprd/ipc/server"
 	"v.io/x/ref/services/wsprd/lib"
 	"v.io/x/ref/services/wsprd/principal"
+	"v.io/x/ref/services/wsprd/rpc/server"
 )
 
 type mockJSServer struct {
diff --git a/services/wsprd/app/stream.go b/services/wsprd/app/stream.go
index 822e2ac..2ab0156 100644
--- a/services/wsprd/app/stream.go
+++ b/services/wsprd/app/stream.go
@@ -3,12 +3,12 @@
 import (
 	"fmt"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/x/ref/services/wsprd/lib"
 )
 
 type initConfig struct {
-	stream ipc.Stream
+	stream rpc.Stream
 }
 
 type Closer interface {
@@ -87,6 +87,6 @@
 	}
 }
 
-func (os *outstandingStream) init(stream ipc.Stream) {
+func (os *outstandingStream) init(stream rpc.Stream) {
 	os.initChan <- &initConfig{stream}
 }
diff --git a/services/wsprd/browspr/browspr.go b/services/wsprd/browspr/browspr.go
index f5e83d8..74b722d 100644
--- a/services/wsprd/browspr/browspr.go
+++ b/services/wsprd/browspr/browspr.go
@@ -8,7 +8,7 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/vdl"
 	"v.io/v23/vtrace"
 	"v.io/x/lib/vlog"
@@ -20,7 +20,7 @@
 // network that allows our javascript library to use veyron.
 type Browspr struct {
 	ctx              *context.T
-	listenSpec       *ipc.ListenSpec
+	listenSpec       *rpc.ListenSpec
 	namespaceRoots   []string
 	accountManager   *account.AccountManager
 	postMessage      func(instanceId int32, ty, msg string)
@@ -34,7 +34,7 @@
 // Create a new Browspr instance.
 func NewBrowspr(ctx *context.T,
 	postMessage func(instanceId int32, ty, msg string),
-	listenSpec *ipc.ListenSpec,
+	listenSpec *rpc.ListenSpec,
 	identd string,
 	wsNamespaceRoots []string) *Browspr {
 	if listenSpec.Proxy == "" {
diff --git a/services/wsprd/browspr/browspr_account_test.go b/services/wsprd/browspr/browspr_account_test.go
index a8dfac5..eee0ae8 100644
--- a/services/wsprd/browspr/browspr_account_test.go
+++ b/services/wsprd/browspr/browspr_account_test.go
@@ -6,7 +6,7 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vdl"
 
@@ -28,7 +28,7 @@
 	}
 }
 
-func (m *mockBlesserService) BlessUsingAccessToken(c *context.T, accessToken string, co ...ipc.CallOpt) (security.Blessings, string, error) {
+func (m *mockBlesserService) BlessUsingAccessToken(c *context.T, accessToken string, co ...rpc.CallOpt) (security.Blessings, string, error) {
 	m.count++
 	name := fmt.Sprintf("%s%s%d", topLevelName, security.ChainSeparator, m.count)
 	blessing, err := m.p.BlessSelf(name)
diff --git a/services/wsprd/browspr/browspr_test.go b/services/wsprd/browspr/browspr_test.go
index 9a886c2..4464cd4 100644
--- a/services/wsprd/browspr/browspr_test.go
+++ b/services/wsprd/browspr/browspr_test.go
@@ -10,9 +10,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/options"
+	"v.io/v23/rpc"
 	"v.io/v23/vdl"
 	vdltime "v.io/v23/vdlroot/time"
 	"v.io/v23/vom"
@@ -24,7 +24,7 @@
 	"v.io/x/ref/test"
 )
 
-func startMounttable(ctx *context.T) (ipc.Server, naming.Endpoint, error) {
+func startMounttable(ctx *context.T) (rpc.Server, naming.Endpoint, error) {
 	mt, err := mounttable.NewMountTableDispatcher("")
 	if err != nil {
 		return nil, nil, err
@@ -49,11 +49,11 @@
 
 type mockServer struct{}
 
-func (s mockServer) BasicCall(_ ipc.StreamServerCall, txt string) (string, error) {
+func (s mockServer) BasicCall(_ rpc.StreamServerCall, txt string) (string, error) {
 	return "[" + txt + "]", nil
 }
 
-func startMockServer(ctx *context.T, desiredName string) (ipc.Server, naming.Endpoint, error) {
+func startMockServer(ctx *context.T, desiredName string) (rpc.Server, naming.Endpoint, error) {
 	// Create a new server instance.
 	s, err := v23.NewServer(ctx)
 	if err != nil {
diff --git a/services/wsprd/lib/signature_manager.go b/services/wsprd/lib/signature_manager.go
index b516dfa..a0bfad7 100644
--- a/services/wsprd/lib/signature_manager.go
+++ b/services/wsprd/lib/signature_manager.go
@@ -5,14 +5,14 @@
 	"time"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc"
-	"v.io/v23/ipc/reserved"
+	"v.io/v23/rpc"
+	"v.io/v23/rpc/reserved"
 	"v.io/v23/vdlroot/signature"
 	"v.io/v23/verror"
 )
 
 type SignatureManager interface {
-	Signature(ctx *context.T, name string, opts ...ipc.CallOpt) ([]signature.Interface, error)
+	Signature(ctx *context.T, name string, opts ...rpc.CallOpt) ([]signature.Interface, error)
 	FlushCacheEntry(name string)
 }
 
@@ -67,7 +67,7 @@
 // Signature fetches the signature for the given service name.  It either
 // returns the signature from the cache, or blocks until it fetches the
 // signature from the remote server.
-func (sm *signatureManager) Signature(ctx *context.T, name string, opts ...ipc.CallOpt) ([]signature.Interface, error) {
+func (sm *signatureManager) Signature(ctx *context.T, name string, opts ...rpc.CallOpt) ([]signature.Interface, error) {
 	sm.Lock()
 
 	if sigs := sm.lookupCacheLocked(name); sigs != nil {
diff --git a/services/wsprd/lib/simple_client.go b/services/wsprd/lib/simple_client.go
index 931fba1..58b8c74 100644
--- a/services/wsprd/lib/simple_client.go
+++ b/services/wsprd/lib/simple_client.go
@@ -6,7 +6,7 @@
 	"sync"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vdl"
 	"v.io/v23/vom"
@@ -14,11 +14,11 @@
 )
 
 type clientWithTimesCalled interface {
-	ipc.Client
+	rpc.Client
 	TimesCalled(method string) int
 }
 
-// NewSimpleClient creates a new mocked ipc client where the given map of method name
+// NewSimpleClient creates a new mocked rpc client where the given map of method name
 // to outputs is used for evaluating the method calls.
 // It also adds some testing features such as counters for number of times a method is called
 func newSimpleClient(methodsResults map[string][]interface{}) clientWithTimesCalled {
@@ -28,7 +28,7 @@
 	}
 }
 
-// simpleMockClient implements ipc.Client
+// simpleMockClient implements rpc.Client
 type simpleMockClient struct {
 	// Protects timesCalled
 	sync.Mutex
@@ -44,8 +44,8 @@
 	return c.timesCalled[method]
 }
 
-// StartCall Implements ipc.Client
-func (c *simpleMockClient) StartCall(ctx *context.T, name, method string, args []interface{}, opts ...ipc.CallOpt) (ipc.ClientCall, error) {
+// StartCall Implements rpc.Client
+func (c *simpleMockClient) StartCall(ctx *context.T, name, method string, args []interface{}, opts ...rpc.CallOpt) (rpc.ClientCall, error) {
 	defer vlog.LogCall()()
 	results, ok := c.results[method]
 	if !ok {
@@ -76,29 +76,29 @@
 	return &clientCall, nil
 }
 
-// Close implements ipc.Client
+// Close implements rpc.Client
 func (*simpleMockClient) Close() {
 	defer vlog.LogCall()()
 }
 
-// mockCall implements ipc.ClientCall
+// mockCall implements rpc.ClientCall
 type mockCall struct {
 	mockStream
 	results []interface{}
 }
 
-// Cancel implements ipc.ClientCall
+// Cancel implements rpc.ClientCall
 func (*mockCall) Cancel() {
 	defer vlog.LogCall()()
 }
 
-// CloseSend implements ipc.ClientCall
+// CloseSend implements rpc.ClientCall
 func (*mockCall) CloseSend() error {
 	defer vlog.LogCall()()
 	return nil
 }
 
-// Finish implements ipc.ClientCall
+// Finish implements rpc.ClientCall
 func (mc *mockCall) Finish(resultptrs ...interface{}) error {
 	defer vlog.LogCall()()
 	if got, want := len(resultptrs), len(mc.results); got != want {
@@ -114,21 +114,21 @@
 	return nil
 }
 
-// RemoteBlessings implements ipc.ClientCall
+// RemoteBlessings implements rpc.ClientCall
 func (*mockCall) RemoteBlessings() ([]string, security.Blessings) {
 	return []string{}, security.Blessings{}
 }
 
-//mockStream implements ipc.Stream
+//mockStream implements rpc.Stream
 type mockStream struct{}
 
-//Send implements ipc.Stream
+//Send implements rpc.Stream
 func (*mockStream) Send(interface{}) error {
 	defer vlog.LogCall()()
 	return nil
 }
 
-//Recv implements ipc.Stream
+//Recv implements rpc.Stream
 func (*mockStream) Recv(interface{}) error {
 	defer vlog.LogCall()()
 	return nil
diff --git a/services/wsprd/lib/time.go b/services/wsprd/lib/time.go
index 715112c..9529bff 100644
--- a/services/wsprd/lib/time.go
+++ b/services/wsprd/lib/time.go
@@ -8,7 +8,7 @@
 //
 // TODO(bjornick,toddw): Pick a better sentry for no timeout, or change to using
 // VDL time.WireDeadline.
-const JSIPCNoTimeout = int64(6307200000000) // 200 years in milliseconds
+const JSRPCNoTimeout = int64(6307200000000) // 200 years in milliseconds
 
 func GoToJSDuration(d time.Duration) int64 {
 	return int64(d / time.Millisecond)
diff --git a/services/wsprd/namespace/namespace.vdl.go b/services/wsprd/namespace/namespace.vdl.go
index 1d931a5..538edca 100644
--- a/services/wsprd/namespace/namespace.vdl.go
+++ b/services/wsprd/namespace/namespace.vdl.go
@@ -12,7 +12,7 @@
 	"io"
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 
 	// VDL user imports
 	"time"
@@ -25,43 +25,43 @@
 // containing Namespace methods.
 type NamespaceClientMethods interface {
 	// Run a glob query and stream the results.
-	Glob(ctx *context.T, pattern string, opts ...ipc.CallOpt) (NamespaceGlobClientCall, error)
+	Glob(ctx *context.T, pattern string, opts ...rpc.CallOpt) (NamespaceGlobClientCall, error)
 	// Mount mounts a server under the given name.
-	Mount(ctx *context.T, name string, server string, ttl time.Duration, replace bool, opts ...ipc.CallOpt) error
+	Mount(ctx *context.T, name string, server string, ttl time.Duration, replace bool, opts ...rpc.CallOpt) error
 	// Unmount removes an existing mount point.
-	Unmount(ctx *context.T, name string, server string, opts ...ipc.CallOpt) error
+	Unmount(ctx *context.T, name string, server string, opts ...rpc.CallOpt) error
 	// Resolve resolves a name to an address.
-	Resolve(ctx *context.T, name string, opts ...ipc.CallOpt) ([]string, error)
+	Resolve(ctx *context.T, name string, opts ...rpc.CallOpt) ([]string, error)
 	// ResolveToMt resolves a name to the address of the mounttable directly
 	// hosting it.
-	ResolveToMT(ctx *context.T, name string, opts ...ipc.CallOpt) ([]string, error)
+	ResolveToMT(ctx *context.T, name string, opts ...rpc.CallOpt) ([]string, error)
 	// FlushCacheEntry removes the namespace cache entry for a given name.
-	FlushCacheEntry(ctx *context.T, name string, opts ...ipc.CallOpt) (bool, error)
+	FlushCacheEntry(ctx *context.T, name string, opts ...rpc.CallOpt) (bool, error)
 	// DisableCache disables the naming cache.
-	DisableCache(ctx *context.T, disable bool, opts ...ipc.CallOpt) error
+	DisableCache(ctx *context.T, disable bool, opts ...rpc.CallOpt) error
 	// Roots returns the addresses of the current mounttable roots.
-	Roots(*context.T, ...ipc.CallOpt) ([]string, error)
+	Roots(*context.T, ...rpc.CallOpt) ([]string, error)
 	// SetRoots sets the current mounttable roots.
-	SetRoots(ctx *context.T, roots []string, opts ...ipc.CallOpt) error
+	SetRoots(ctx *context.T, roots []string, opts ...rpc.CallOpt) error
 	// SetPermissions sets the AccessList in a node in a mount table.
-	SetPermissions(ctx *context.T, name string, acl access.Permissions, etag string, opts ...ipc.CallOpt) error
+	SetPermissions(ctx *context.T, name string, acl access.Permissions, etag string, opts ...rpc.CallOpt) error
 	// GetPermissions returns the AccessList in a node in a mount table.
-	GetPermissions(ctx *context.T, name string, opts ...ipc.CallOpt) (acl access.Permissions, etag string, err error)
+	GetPermissions(ctx *context.T, name string, opts ...rpc.CallOpt) (acl access.Permissions, etag string, err error)
 	// Delete deletes the name from the mounttable and, if requested, any subtree.
-	Delete(ctx *context.T, name string, deleteSubtree bool, opts ...ipc.CallOpt) error
+	Delete(ctx *context.T, name string, deleteSubtree bool, opts ...rpc.CallOpt) error
 }
 
 // NamespaceClientStub adds universal methods to NamespaceClientMethods.
 type NamespaceClientStub interface {
 	NamespaceClientMethods
-	ipc.UniversalServiceMethods
+	rpc.UniversalServiceMethods
 }
 
 // NamespaceClient returns a client stub for Namespace.
-func NamespaceClient(name string, opts ...ipc.BindOpt) NamespaceClientStub {
-	var client ipc.Client
+func NamespaceClient(name string, opts ...rpc.BindOpt) NamespaceClientStub {
+	var client rpc.Client
 	for _, opt := range opts {
-		if clientOpt, ok := opt.(ipc.Client); ok {
+		if clientOpt, ok := opt.(rpc.Client); ok {
 			client = clientOpt
 		}
 	}
@@ -70,18 +70,18 @@
 
 type implNamespaceClientStub struct {
 	name   string
-	client ipc.Client
+	client rpc.Client
 }
 
-func (c implNamespaceClientStub) c(ctx *context.T) ipc.Client {
+func (c implNamespaceClientStub) c(ctx *context.T) rpc.Client {
 	if c.client != nil {
 		return c.client
 	}
 	return v23.GetClient(ctx)
 }
 
-func (c implNamespaceClientStub) Glob(ctx *context.T, i0 string, opts ...ipc.CallOpt) (ocall NamespaceGlobClientCall, err error) {
-	var call ipc.ClientCall
+func (c implNamespaceClientStub) Glob(ctx *context.T, i0 string, opts ...rpc.CallOpt) (ocall NamespaceGlobClientCall, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Glob", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -89,8 +89,8 @@
 	return
 }
 
-func (c implNamespaceClientStub) Mount(ctx *context.T, i0 string, i1 string, i2 time.Duration, i3 bool, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implNamespaceClientStub) Mount(ctx *context.T, i0 string, i1 string, i2 time.Duration, i3 bool, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Mount", []interface{}{i0, i1, i2, i3}, opts...); err != nil {
 		return
 	}
@@ -98,8 +98,8 @@
 	return
 }
 
-func (c implNamespaceClientStub) Unmount(ctx *context.T, i0 string, i1 string, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implNamespaceClientStub) Unmount(ctx *context.T, i0 string, i1 string, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Unmount", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -107,8 +107,8 @@
 	return
 }
 
-func (c implNamespaceClientStub) Resolve(ctx *context.T, i0 string, opts ...ipc.CallOpt) (o0 []string, err error) {
-	var call ipc.ClientCall
+func (c implNamespaceClientStub) Resolve(ctx *context.T, i0 string, opts ...rpc.CallOpt) (o0 []string, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Resolve", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -116,8 +116,8 @@
 	return
 }
 
-func (c implNamespaceClientStub) ResolveToMT(ctx *context.T, i0 string, opts ...ipc.CallOpt) (o0 []string, err error) {
-	var call ipc.ClientCall
+func (c implNamespaceClientStub) ResolveToMT(ctx *context.T, i0 string, opts ...rpc.CallOpt) (o0 []string, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "ResolveToMT", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -125,8 +125,8 @@
 	return
 }
 
-func (c implNamespaceClientStub) FlushCacheEntry(ctx *context.T, i0 string, opts ...ipc.CallOpt) (o0 bool, err error) {
-	var call ipc.ClientCall
+func (c implNamespaceClientStub) FlushCacheEntry(ctx *context.T, i0 string, opts ...rpc.CallOpt) (o0 bool, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "FlushCacheEntry", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -134,8 +134,8 @@
 	return
 }
 
-func (c implNamespaceClientStub) DisableCache(ctx *context.T, i0 bool, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implNamespaceClientStub) DisableCache(ctx *context.T, i0 bool, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "DisableCache", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -143,8 +143,8 @@
 	return
 }
 
-func (c implNamespaceClientStub) Roots(ctx *context.T, opts ...ipc.CallOpt) (o0 []string, err error) {
-	var call ipc.ClientCall
+func (c implNamespaceClientStub) Roots(ctx *context.T, opts ...rpc.CallOpt) (o0 []string, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Roots", nil, opts...); err != nil {
 		return
 	}
@@ -152,8 +152,8 @@
 	return
 }
 
-func (c implNamespaceClientStub) SetRoots(ctx *context.T, i0 []string, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implNamespaceClientStub) SetRoots(ctx *context.T, i0 []string, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "SetRoots", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -161,8 +161,8 @@
 	return
 }
 
-func (c implNamespaceClientStub) SetPermissions(ctx *context.T, i0 string, i1 access.Permissions, i2 string, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implNamespaceClientStub) SetPermissions(ctx *context.T, i0 string, i1 access.Permissions, i2 string, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "SetPermissions", []interface{}{i0, i1, i2}, opts...); err != nil {
 		return
 	}
@@ -170,8 +170,8 @@
 	return
 }
 
-func (c implNamespaceClientStub) GetPermissions(ctx *context.T, i0 string, opts ...ipc.CallOpt) (o0 access.Permissions, o1 string, err error) {
-	var call ipc.ClientCall
+func (c implNamespaceClientStub) GetPermissions(ctx *context.T, i0 string, opts ...rpc.CallOpt) (o0 access.Permissions, o1 string, err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "GetPermissions", []interface{}{i0}, opts...); err != nil {
 		return
 	}
@@ -179,8 +179,8 @@
 	return
 }
 
-func (c implNamespaceClientStub) Delete(ctx *context.T, i0 string, i1 bool, opts ...ipc.CallOpt) (err error) {
-	var call ipc.ClientCall
+func (c implNamespaceClientStub) Delete(ctx *context.T, i0 string, i1 bool, opts ...rpc.CallOpt) (err error) {
+	var call rpc.ClientCall
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Delete", []interface{}{i0, i1}, opts...); err != nil {
 		return
 	}
@@ -221,7 +221,7 @@
 }
 
 type implNamespaceGlobClientCall struct {
-	ipc.ClientCall
+	rpc.ClientCall
 	valRecv naming.GlobReply
 	errRecv error
 }
@@ -262,81 +262,81 @@
 	// Run a glob query and stream the results.
 	Glob(call NamespaceGlobServerCall, pattern string) error
 	// Mount mounts a server under the given name.
-	Mount(call ipc.ServerCall, name string, server string, ttl time.Duration, replace bool) error
+	Mount(call rpc.ServerCall, name string, server string, ttl time.Duration, replace bool) error
 	// Unmount removes an existing mount point.
-	Unmount(call ipc.ServerCall, name string, server string) error
+	Unmount(call rpc.ServerCall, name string, server string) error
 	// Resolve resolves a name to an address.
-	Resolve(call ipc.ServerCall, name string) ([]string, error)
+	Resolve(call rpc.ServerCall, name string) ([]string, error)
 	// ResolveToMt resolves a name to the address of the mounttable directly
 	// hosting it.
-	ResolveToMT(call ipc.ServerCall, name string) ([]string, error)
+	ResolveToMT(call rpc.ServerCall, name string) ([]string, error)
 	// FlushCacheEntry removes the namespace cache entry for a given name.
-	FlushCacheEntry(call ipc.ServerCall, name string) (bool, error)
+	FlushCacheEntry(call rpc.ServerCall, name string) (bool, error)
 	// DisableCache disables the naming cache.
-	DisableCache(call ipc.ServerCall, disable bool) error
+	DisableCache(call rpc.ServerCall, disable bool) error
 	// Roots returns the addresses of the current mounttable roots.
-	Roots(ipc.ServerCall) ([]string, error)
+	Roots(rpc.ServerCall) ([]string, error)
 	// SetRoots sets the current mounttable roots.
-	SetRoots(call ipc.ServerCall, roots []string) error
+	SetRoots(call rpc.ServerCall, roots []string) error
 	// SetPermissions sets the AccessList in a node in a mount table.
-	SetPermissions(call ipc.ServerCall, name string, acl access.Permissions, etag string) error
+	SetPermissions(call rpc.ServerCall, name string, acl access.Permissions, etag string) error
 	// GetPermissions returns the AccessList in a node in a mount table.
-	GetPermissions(call ipc.ServerCall, name string) (acl access.Permissions, etag string, err error)
+	GetPermissions(call rpc.ServerCall, name string) (acl access.Permissions, etag string, err error)
 	// Delete deletes the name from the mounttable and, if requested, any subtree.
-	Delete(call ipc.ServerCall, name string, deleteSubtree bool) error
+	Delete(call rpc.ServerCall, name string, deleteSubtree bool) error
 }
 
 // NamespaceServerStubMethods is the server interface containing
-// Namespace methods, as expected by ipc.Server.
+// Namespace methods, as expected by rpc.Server.
 // The only difference between this interface and NamespaceServerMethods
 // is the streaming methods.
 type NamespaceServerStubMethods interface {
 	// Run a glob query and stream the results.
 	Glob(call *NamespaceGlobServerCallStub, pattern string) error
 	// Mount mounts a server under the given name.
-	Mount(call ipc.ServerCall, name string, server string, ttl time.Duration, replace bool) error
+	Mount(call rpc.ServerCall, name string, server string, ttl time.Duration, replace bool) error
 	// Unmount removes an existing mount point.
-	Unmount(call ipc.ServerCall, name string, server string) error
+	Unmount(call rpc.ServerCall, name string, server string) error
 	// Resolve resolves a name to an address.
-	Resolve(call ipc.ServerCall, name string) ([]string, error)
+	Resolve(call rpc.ServerCall, name string) ([]string, error)
 	// ResolveToMt resolves a name to the address of the mounttable directly
 	// hosting it.
-	ResolveToMT(call ipc.ServerCall, name string) ([]string, error)
+	ResolveToMT(call rpc.ServerCall, name string) ([]string, error)
 	// FlushCacheEntry removes the namespace cache entry for a given name.
-	FlushCacheEntry(call ipc.ServerCall, name string) (bool, error)
+	FlushCacheEntry(call rpc.ServerCall, name string) (bool, error)
 	// DisableCache disables the naming cache.
-	DisableCache(call ipc.ServerCall, disable bool) error
+	DisableCache(call rpc.ServerCall, disable bool) error
 	// Roots returns the addresses of the current mounttable roots.
-	Roots(ipc.ServerCall) ([]string, error)
+	Roots(rpc.ServerCall) ([]string, error)
 	// SetRoots sets the current mounttable roots.
-	SetRoots(call ipc.ServerCall, roots []string) error
+	SetRoots(call rpc.ServerCall, roots []string) error
 	// SetPermissions sets the AccessList in a node in a mount table.
-	SetPermissions(call ipc.ServerCall, name string, acl access.Permissions, etag string) error
+	SetPermissions(call rpc.ServerCall, name string, acl access.Permissions, etag string) error
 	// GetPermissions returns the AccessList in a node in a mount table.
-	GetPermissions(call ipc.ServerCall, name string) (acl access.Permissions, etag string, err error)
+	GetPermissions(call rpc.ServerCall, name string) (acl access.Permissions, etag string, err error)
 	// Delete deletes the name from the mounttable and, if requested, any subtree.
-	Delete(call ipc.ServerCall, name string, deleteSubtree bool) error
+	Delete(call rpc.ServerCall, name string, deleteSubtree bool) error
 }
 
 // NamespaceServerStub adds universal methods to NamespaceServerStubMethods.
 type NamespaceServerStub interface {
 	NamespaceServerStubMethods
 	// Describe the Namespace interfaces.
-	Describe__() []ipc.InterfaceDesc
+	Describe__() []rpc.InterfaceDesc
 }
 
 // NamespaceServer returns a server stub for Namespace.
 // It converts an implementation of NamespaceServerMethods into
-// an object that may be used by ipc.Server.
+// an object that may be used by rpc.Server.
 func NamespaceServer(impl NamespaceServerMethods) NamespaceServerStub {
 	stub := implNamespaceServerStub{
 		impl: impl,
 	}
 	// Initialize GlobState; always check the stub itself first, to handle the
 	// case where the user has the Glob method defined in their VDL source.
-	if gs := ipc.NewGlobState(stub); gs != nil {
+	if gs := rpc.NewGlobState(stub); gs != nil {
 		stub.gs = gs
-	} else if gs := ipc.NewGlobState(impl); gs != nil {
+	} else if gs := rpc.NewGlobState(impl); gs != nil {
 		stub.gs = gs
 	}
 	return stub
@@ -344,84 +344,84 @@
 
 type implNamespaceServerStub struct {
 	impl NamespaceServerMethods
-	gs   *ipc.GlobState
+	gs   *rpc.GlobState
 }
 
 func (s implNamespaceServerStub) Glob(call *NamespaceGlobServerCallStub, i0 string) error {
 	return s.impl.Glob(call, i0)
 }
 
-func (s implNamespaceServerStub) Mount(call ipc.ServerCall, i0 string, i1 string, i2 time.Duration, i3 bool) error {
+func (s implNamespaceServerStub) Mount(call rpc.ServerCall, i0 string, i1 string, i2 time.Duration, i3 bool) error {
 	return s.impl.Mount(call, i0, i1, i2, i3)
 }
 
-func (s implNamespaceServerStub) Unmount(call ipc.ServerCall, i0 string, i1 string) error {
+func (s implNamespaceServerStub) Unmount(call rpc.ServerCall, i0 string, i1 string) error {
 	return s.impl.Unmount(call, i0, i1)
 }
 
-func (s implNamespaceServerStub) Resolve(call ipc.ServerCall, i0 string) ([]string, error) {
+func (s implNamespaceServerStub) Resolve(call rpc.ServerCall, i0 string) ([]string, error) {
 	return s.impl.Resolve(call, i0)
 }
 
-func (s implNamespaceServerStub) ResolveToMT(call ipc.ServerCall, i0 string) ([]string, error) {
+func (s implNamespaceServerStub) ResolveToMT(call rpc.ServerCall, i0 string) ([]string, error) {
 	return s.impl.ResolveToMT(call, i0)
 }
 
-func (s implNamespaceServerStub) FlushCacheEntry(call ipc.ServerCall, i0 string) (bool, error) {
+func (s implNamespaceServerStub) FlushCacheEntry(call rpc.ServerCall, i0 string) (bool, error) {
 	return s.impl.FlushCacheEntry(call, i0)
 }
 
-func (s implNamespaceServerStub) DisableCache(call ipc.ServerCall, i0 bool) error {
+func (s implNamespaceServerStub) DisableCache(call rpc.ServerCall, i0 bool) error {
 	return s.impl.DisableCache(call, i0)
 }
 
-func (s implNamespaceServerStub) Roots(call ipc.ServerCall) ([]string, error) {
+func (s implNamespaceServerStub) Roots(call rpc.ServerCall) ([]string, error) {
 	return s.impl.Roots(call)
 }
 
-func (s implNamespaceServerStub) SetRoots(call ipc.ServerCall, i0 []string) error {
+func (s implNamespaceServerStub) SetRoots(call rpc.ServerCall, i0 []string) error {
 	return s.impl.SetRoots(call, i0)
 }
 
-func (s implNamespaceServerStub) SetPermissions(call ipc.ServerCall, i0 string, i1 access.Permissions, i2 string) error {
+func (s implNamespaceServerStub) SetPermissions(call rpc.ServerCall, i0 string, i1 access.Permissions, i2 string) error {
 	return s.impl.SetPermissions(call, i0, i1, i2)
 }
 
-func (s implNamespaceServerStub) GetPermissions(call ipc.ServerCall, i0 string) (access.Permissions, string, error) {
+func (s implNamespaceServerStub) GetPermissions(call rpc.ServerCall, i0 string) (access.Permissions, string, error) {
 	return s.impl.GetPermissions(call, i0)
 }
 
-func (s implNamespaceServerStub) Delete(call ipc.ServerCall, i0 string, i1 bool) error {
+func (s implNamespaceServerStub) Delete(call rpc.ServerCall, i0 string, i1 bool) error {
 	return s.impl.Delete(call, i0, i1)
 }
 
-func (s implNamespaceServerStub) Globber() *ipc.GlobState {
+func (s implNamespaceServerStub) Globber() *rpc.GlobState {
 	return s.gs
 }
 
-func (s implNamespaceServerStub) Describe__() []ipc.InterfaceDesc {
-	return []ipc.InterfaceDesc{NamespaceDesc}
+func (s implNamespaceServerStub) Describe__() []rpc.InterfaceDesc {
+	return []rpc.InterfaceDesc{NamespaceDesc}
 }
 
 // NamespaceDesc describes the Namespace interface.
-var NamespaceDesc ipc.InterfaceDesc = descNamespace
+var NamespaceDesc rpc.InterfaceDesc = descNamespace
 
 // descNamespace hides the desc to keep godoc clean.
-var descNamespace = ipc.InterfaceDesc{
+var descNamespace = rpc.InterfaceDesc{
 	Name:    "Namespace",
 	PkgPath: "v.io/x/ref/services/wsprd/namespace",
-	Methods: []ipc.MethodDesc{
+	Methods: []rpc.MethodDesc{
 		{
 			Name: "Glob",
 			Doc:  "// Run a glob query and stream the results.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"pattern", ``}, // string
 			},
 		},
 		{
 			Name: "Mount",
 			Doc:  "// Mount mounts a server under the given name.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"name", ``},    // string
 				{"server", ``},  // string
 				{"ttl", ``},     // time.Duration
@@ -431,7 +431,7 @@
 		{
 			Name: "Unmount",
 			Doc:  "// Unmount removes an existing mount point.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"name", ``},   // string
 				{"server", ``}, // string
 			},
@@ -439,58 +439,58 @@
 		{
 			Name: "Resolve",
 			Doc:  "// Resolve resolves a name to an address.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"name", ``}, // string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // []string
 			},
 		},
 		{
 			Name: "ResolveToMT",
 			Doc:  "// ResolveToMt resolves a name to the address of the mounttable directly\n// hosting it.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"name", ``}, // string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // []string
 			},
 		},
 		{
 			Name: "FlushCacheEntry",
 			Doc:  "// FlushCacheEntry removes the namespace cache entry for a given name.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"name", ``}, // string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // bool
 			},
 		},
 		{
 			Name: "DisableCache",
 			Doc:  "// DisableCache disables the naming cache.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"disable", ``}, // bool
 			},
 		},
 		{
 			Name: "Roots",
 			Doc:  "// Roots returns the addresses of the current mounttable roots.",
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // []string
 			},
 		},
 		{
 			Name: "SetRoots",
 			Doc:  "// SetRoots sets the current mounttable roots.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"roots", ``}, // []string
 			},
 		},
 		{
 			Name: "SetPermissions",
 			Doc:  "// SetPermissions sets the AccessList in a node in a mount table.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"name", ``}, // string
 				{"acl", ``},  // access.Permissions
 				{"etag", ``}, // string
@@ -499,10 +499,10 @@
 		{
 			Name: "GetPermissions",
 			Doc:  "// GetPermissions returns the AccessList in a node in a mount table.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"name", ``}, // string
 			},
-			OutArgs: []ipc.ArgDesc{
+			OutArgs: []rpc.ArgDesc{
 				{"acl", ``},  // access.Permissions
 				{"etag", ``}, // string
 			},
@@ -510,7 +510,7 @@
 		{
 			Name: "Delete",
 			Doc:  "// Delete deletes the name from the mounttable and, if requested, any subtree.",
-			InArgs: []ipc.ArgDesc{
+			InArgs: []rpc.ArgDesc{
 				{"name", ``},          // string
 				{"deleteSubtree", ``}, // bool
 			},
@@ -531,18 +531,18 @@
 
 // NamespaceGlobServerCall represents the context passed to Namespace.Glob.
 type NamespaceGlobServerCall interface {
-	ipc.ServerCall
+	rpc.ServerCall
 	NamespaceGlobServerStream
 }
 
-// NamespaceGlobServerCallStub is a wrapper that converts ipc.StreamServerCall into
+// NamespaceGlobServerCallStub is a wrapper that converts rpc.StreamServerCall into
 // a typesafe stub that implements NamespaceGlobServerCall.
 type NamespaceGlobServerCallStub struct {
-	ipc.StreamServerCall
+	rpc.StreamServerCall
 }
 
-// Init initializes NamespaceGlobServerCallStub from ipc.StreamServerCall.
-func (s *NamespaceGlobServerCallStub) Init(call ipc.StreamServerCall) {
+// Init initializes NamespaceGlobServerCallStub from rpc.StreamServerCall.
+func (s *NamespaceGlobServerCallStub) Init(call rpc.StreamServerCall) {
 	s.StreamServerCall = call
 }
 
diff --git a/services/wsprd/namespace/request_handler.go b/services/wsprd/namespace/request_handler.go
index 6a2cea2..0c22f88 100644
--- a/services/wsprd/namespace/request_handler.go
+++ b/services/wsprd/namespace/request_handler.go
@@ -5,9 +5,9 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
 	"v.io/v23/naming/ns"
+	"v.io/v23/rpc"
 	"v.io/v23/services/security/access"
 	"v.io/v23/verror"
 )
@@ -44,7 +44,7 @@
 	return nil
 }
 
-func (s *Server) Mount(call ipc.ServerCall, name, server string, ttl time.Duration, replace bool) error {
+func (s *Server) Mount(call rpc.ServerCall, name, server string, ttl time.Duration, replace bool) error {
 	rmOpt := naming.ReplaceMountOpt(replace)
 	err := s.ns.Mount(call.Context(), name, server, ttl, rmOpt)
 	if err != nil {
@@ -53,11 +53,11 @@
 	return err
 }
 
-func (s *Server) Unmount(call ipc.ServerCall, name, server string) error {
+func (s *Server) Unmount(call rpc.ServerCall, name, server string) error {
 	return s.ns.Unmount(call.Context(), name, server)
 }
 
-func (s *Server) Resolve(call ipc.ServerCall, name string) ([]string, error) {
+func (s *Server) Resolve(call rpc.ServerCall, name string) ([]string, error) {
 	me, err := s.ns.Resolve(call.Context(), name)
 	if err != nil {
 		return nil, verror.Convert(verror.ErrInternal, call.Context(), err)
@@ -65,7 +65,7 @@
 	return me.Names(), nil
 }
 
-func (s *Server) ResolveToMT(call ipc.ServerCall, name string) ([]string, error) {
+func (s *Server) ResolveToMT(call rpc.ServerCall, name string) ([]string, error) {
 	me, err := s.ns.ResolveToMountTable(call.Context(), name)
 	if err != nil {
 		return nil, verror.Convert(verror.ErrInternal, call.Context(), err)
@@ -73,35 +73,35 @@
 	return me.Names(), nil
 }
 
-func (s *Server) FlushCacheEntry(call ipc.ServerCall, name string) (bool, error) {
+func (s *Server) FlushCacheEntry(call rpc.ServerCall, name string) (bool, error) {
 	return s.ns.FlushCacheEntry(name), nil
 }
 
-func (s *Server) DisableCache(call ipc.ServerCall, disable bool) error {
+func (s *Server) DisableCache(call rpc.ServerCall, disable bool) error {
 	disableCacheCtl := naming.DisableCache(disable)
 	_ = s.ns.CacheCtl(disableCacheCtl)
 	return nil
 }
 
-func (s *Server) Roots(call ipc.ServerCall) ([]string, error) {
+func (s *Server) Roots(call rpc.ServerCall) ([]string, error) {
 	return s.ns.Roots(), nil
 }
 
-func (s *Server) SetRoots(call ipc.ServerCall, roots []string) error {
+func (s *Server) SetRoots(call rpc.ServerCall, roots []string) error {
 	if err := s.ns.SetRoots(roots...); err != nil {
 		return verror.Convert(verror.ErrInternal, call.Context(), err)
 	}
 	return nil
 }
 
-func (s *Server) SetPermissions(call ipc.ServerCall, name string, acl access.Permissions, etag string) error {
+func (s *Server) SetPermissions(call rpc.ServerCall, name string, acl access.Permissions, etag string) error {
 	return s.ns.SetPermissions(call.Context(), name, acl, etag)
 }
 
-func (s *Server) GetPermissions(call ipc.ServerCall, name string) (access.Permissions, string, error) {
+func (s *Server) GetPermissions(call rpc.ServerCall, name string) (access.Permissions, string, error) {
 	return s.ns.GetPermissions(call.Context(), name)
 }
 
-func (s *Server) Delete(call ipc.ServerCall, name string, deleteSubtree bool) error {
+func (s *Server) Delete(call rpc.ServerCall, name string, deleteSubtree bool) error {
 	return s.ns.Delete(call.Context(), name, deleteSubtree)
 }
diff --git a/services/wsprd/ipc/server/authorizer.go b/services/wsprd/rpc/server/authorizer.go
similarity index 76%
rename from services/wsprd/ipc/server/authorizer.go
rename to services/wsprd/rpc/server/authorizer.go
index 057a102..2646f87 100644
--- a/services/wsprd/ipc/server/authorizer.go
+++ b/services/wsprd/rpc/server/authorizer.go
@@ -10,6 +10,5 @@
 }
 
 func (a *authorizer) Authorize(ctx *context.T) error {
-	call := security.GetCall(ctx)
-	return a.authFunc(call)
+	return a.authFunc(security.GetCall(ctx))
 }
diff --git a/services/wsprd/ipc/server/dispatcher.go b/services/wsprd/rpc/server/dispatcher.go
similarity index 97%
rename from services/wsprd/ipc/server/dispatcher.go
rename to services/wsprd/rpc/server/dispatcher.go
index 474ae77..4f6069e 100644
--- a/services/wsprd/ipc/server/dispatcher.go
+++ b/services/wsprd/rpc/server/dispatcher.go
@@ -8,7 +8,7 @@
 
 	"v.io/x/ref/services/wsprd/lib"
 
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vdlroot/signature"
 	"v.io/v23/verror"
@@ -21,7 +21,7 @@
 }
 
 type invokerFactory interface {
-	createInvoker(handle int32, signature []signature.Interface, hasGlobber bool) (ipc.Invoker, error)
+	createInvoker(handle int32, signature []signature.Interface, hasGlobber bool) (rpc.Invoker, error)
 }
 
 type authFactory interface {
@@ -59,7 +59,7 @@
 	outstandingLookups map[int32]chan lookupReply
 }
 
-var _ ipc.Dispatcher = (*dispatcher)(nil)
+var _ rpc.Dispatcher = (*dispatcher)(nil)
 
 // newDispatcher is a dispatcher factory.
 func newDispatcher(serverId uint32, flowFactory flowFactory, invokerFactory invokerFactory, authFactory authFactory) *dispatcher {
diff --git a/services/wsprd/ipc/server/dispatcher_test.go b/services/wsprd/rpc/server/dispatcher_test.go
similarity index 93%
rename from services/wsprd/ipc/server/dispatcher_test.go
rename to services/wsprd/rpc/server/dispatcher_test.go
index ed32126..f7a9a9a 100644
--- a/services/wsprd/ipc/server/dispatcher_test.go
+++ b/services/wsprd/rpc/server/dispatcher_test.go
@@ -6,7 +6,7 @@
 	"testing"
 
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vdl"
 	"v.io/v23/vdlroot/signature"
@@ -34,19 +34,19 @@
 	return nil, nil, nil
 }
 
-func (mockInvoker) Invoke(string, ipc.StreamServerCall, []interface{}) ([]interface{}, error) {
+func (mockInvoker) Invoke(string, rpc.StreamServerCall, []interface{}) ([]interface{}, error) {
 	return nil, nil
 }
 
-func (mockInvoker) Globber() *ipc.GlobState {
+func (mockInvoker) Globber() *rpc.GlobState {
 	return nil
 }
 
-func (m mockInvoker) Signature(call ipc.ServerCall) ([]signature.Interface, error) {
+func (m mockInvoker) Signature(call rpc.ServerCall) ([]signature.Interface, error) {
 	return m.sig, nil
 }
 
-func (m mockInvoker) MethodSignature(call ipc.ServerCall, methodName string) (signature.Method, error) {
+func (m mockInvoker) MethodSignature(call rpc.ServerCall, methodName string) (signature.Method, error) {
 	method, found := m.sig[0].FindMethod(methodName)
 	if !found {
 		return signature.Method{}, fmt.Errorf("Method %q not found", methodName)
@@ -56,7 +56,7 @@
 
 type mockInvokerFactory struct{}
 
-func (mockInvokerFactory) createInvoker(handle int32, sig []signature.Interface, hasGlobber bool) (ipc.Invoker, error) {
+func (mockInvokerFactory) createInvoker(handle int32, sig []signature.Interface, hasGlobber bool) (rpc.Invoker, error) {
 	return &mockInvoker{handle: handle, sig: sig, hasGlobber: hasGlobber}, nil
 }
 
diff --git a/services/wsprd/ipc/server/invoker.go b/services/wsprd/rpc/server/invoker.go
similarity index 83%
rename from services/wsprd/ipc/server/invoker.go
rename to services/wsprd/rpc/server/invoker.go
index 7c126f9..11f5e6c 100644
--- a/services/wsprd/ipc/server/invoker.go
+++ b/services/wsprd/rpc/server/invoker.go
@@ -2,8 +2,8 @@
 
 import (
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/vdl"
 	"v.io/v23/vdlroot/signature"
 	"v.io/v23/verror"
@@ -12,7 +12,7 @@
 
 var typedNil []int
 
-const pkgPath = "v.io/x/ref/services/wsprd/ipc/server"
+const pkgPath = "v.io/x/ref/services/wsprd/rpc/server"
 
 // Errors.
 var (
@@ -31,10 +31,10 @@
 	globFunc remoteGlobFunc
 }
 
-var _ ipc.Invoker = (*invoker)(nil)
+var _ rpc.Invoker = (*invoker)(nil)
 
 // newInvoker is an invoker factory
-func newInvoker(signature []signature.Interface, invokeFunc remoteInvokeFunc, globFunc remoteGlobFunc) ipc.Invoker {
+func newInvoker(signature []signature.Interface, invokeFunc remoteInvokeFunc, globFunc remoteGlobFunc) rpc.Invoker {
 	i := &invoker{invokeFunc, signature, globFunc}
 	return i
 }
@@ -56,7 +56,7 @@
 }
 
 // Invoke implements the Invoker interface.
-func (i *invoker) Invoke(methodName string, call ipc.StreamServerCall, argptrs []interface{}) ([]interface{}, error) {
+func (i *invoker) Invoke(methodName string, call rpc.StreamServerCall, argptrs []interface{}) ([]interface{}, error) {
 	replychan := i.invokeFunc(methodName, argptrs, call)
 
 	// Wait for the result
@@ -77,22 +77,22 @@
 }
 
 // TODO(bjornick,rthellend): Find a reasonable way to implement this for JS.
-func (i *invoker) Globber() *ipc.GlobState {
+func (i *invoker) Globber() *rpc.GlobState {
 	if i.globFunc == nil {
 		return nil
 	}
-	return &ipc.GlobState{AllGlobber: i}
+	return &rpc.GlobState{AllGlobber: i}
 }
 
-func (i *invoker) Glob__(call ipc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
+func (i *invoker) Glob__(call rpc.ServerCall, pattern string) (<-chan naming.GlobReply, error) {
 	return i.globFunc(pattern, call)
 }
 
-func (i *invoker) Signature(call ipc.ServerCall) ([]signature.Interface, error) {
+func (i *invoker) Signature(call rpc.ServerCall) ([]signature.Interface, error) {
 	return i.signature, nil
 }
 
-func (i *invoker) MethodSignature(call ipc.ServerCall, method string) (signature.Method, error) {
+func (i *invoker) MethodSignature(call rpc.ServerCall, method string) (signature.Method, error) {
 	if methodSig, ok := signature.FirstMethod(i.signature, method); ok {
 		return methodSig, nil
 	}
diff --git a/services/wsprd/ipc/server/server.go b/services/wsprd/rpc/server/server.go
similarity index 96%
rename from services/wsprd/ipc/server/server.go
rename to services/wsprd/rpc/server/server.go
index 51cb7fe..491f111 100644
--- a/services/wsprd/ipc/server/server.go
+++ b/services/wsprd/rpc/server/server.go
@@ -13,8 +13,8 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vdl"
 	"v.io/v23/vdlroot/signature"
@@ -45,7 +45,7 @@
 }
 
 type FlowHandler interface {
-	CreateNewFlow(server *Server, sender ipc.Stream) *Flow
+	CreateNewFlow(server *Server, sender rpc.Stream) *Flow
 
 	CleanupFlow(id int32)
 }
@@ -79,12 +79,12 @@
 	// This should be locked before outstandingRequestLock.
 	serverStateLock sync.Mutex
 
-	// The ipc.ListenSpec to use with server.Listen
-	listenSpec *ipc.ListenSpec
+	// The rpc.ListenSpec to use with server.Listen
+	listenSpec *rpc.ListenSpec
 
-	// The server that handles the ipc layer.  Listen on this server is
+	// The server that handles the rpc layer.  Listen on this server is
 	// lazily started.
-	server ipc.Server
+	server rpc.Server
 
 	// The saved dispatcher to reuse when serve is called multiple times.
 	dispatcher *dispatcher
@@ -108,7 +108,7 @@
 	outstandingValidationRequests map[int32]chan []error
 }
 
-func NewServer(id uint32, listenSpec *ipc.ListenSpec, helper ServerHelper) (*Server, error) {
+func NewServer(id uint32, listenSpec *rpc.ListenSpec, helper ServerHelper) (*Server, error) {
 	server := &Server{
 		id:                            id,
 		helper:                        helper,
@@ -128,10 +128,10 @@
 
 // remoteInvokeFunc is a type of function that can invoke a remote method and
 // communicate the result back via a channel to the caller
-type remoteInvokeFunc func(methodName string, args []interface{}, call ipc.StreamServerCall) <-chan *lib.ServerRpcReply
+type remoteInvokeFunc func(methodName string, args []interface{}, call rpc.StreamServerCall) <-chan *lib.ServerRpcReply
 
 func (s *Server) createRemoteInvokerFunc(handle int32) remoteInvokeFunc {
-	return func(methodName string, args []interface{}, call ipc.StreamServerCall) <-chan *lib.ServerRpcReply {
+	return func(methodName string, args []interface{}, call rpc.StreamServerCall) <-chan *lib.ServerRpcReply {
 		securityCall := s.convertSecurityCall(call, true)
 
 		flow := s.helper.CreateNewFlow(s, call)
@@ -224,10 +224,10 @@
 
 // remoteGlobFunc is a type of function that can invoke a remote glob and
 // communicate the result back via the channel returned
-type remoteGlobFunc func(pattern string, call ipc.ServerCall) (<-chan naming.GlobReply, error)
+type remoteGlobFunc func(pattern string, call rpc.ServerCall) (<-chan naming.GlobReply, error)
 
 func (s *Server) createRemoteGlobFunc(handle int32) remoteGlobFunc {
-	return func(pattern string, call ipc.ServerCall) (<-chan naming.GlobReply, error) {
+	return func(pattern string, call rpc.ServerCall) (<-chan naming.GlobReply, error) {
 		// Until the tests get fixed, we need to create a security context before creating the flow
 		// because creating the security context creates a flow and flow ids will be off.
 		// See https://github.com/veyron/release-issues/issues/1181
@@ -298,7 +298,7 @@
 	}
 }
 
-func proxyStream(stream ipc.Stream, w lib.ClientWriter) {
+func proxyStream(stream rpc.Stream, w lib.ClientWriter) {
 	var item interface{}
 	for err := stream.Recv(&item); err == nil; err = stream.Recv(&item) {
 		vomItem, err := lib.VomEncode(item)
@@ -358,7 +358,7 @@
 		replyChan <- makeListOfErrors(len(cavs), err)
 	}
 
-	// TODO(bprosnitz) Consider using a different timeout than the standard ipc timeout.
+	// TODO(bprosnitz) Consider using a different timeout than the standard rpc timeout.
 	var timeoutChan <-chan time.Time
 	if deadline, ok := call.Context().Deadline(); ok {
 		timeoutChan = time.After(deadline.Sub(time.Now()))
@@ -619,7 +619,7 @@
 	s.helper.CleanupFlow(id)
 }
 
-func (s *Server) createInvoker(handle int32, sig []signature.Interface, hasGlobber bool) (ipc.Invoker, error) {
+func (s *Server) createInvoker(handle int32, sig []signature.Interface, hasGlobber bool) (rpc.Invoker, error) {
 	remoteInvokeFunc := s.createRemoteInvokerFunc(handle)
 	var globFunc remoteGlobFunc
 	if hasGlobber {
diff --git a/services/wsprd/ipc/server/server.vdl b/services/wsprd/rpc/server/server.vdl
similarity index 100%
rename from services/wsprd/ipc/server/server.vdl
rename to services/wsprd/rpc/server/server.vdl
diff --git a/services/wsprd/ipc/server/server.vdl.go b/services/wsprd/rpc/server/server.vdl.go
similarity index 87%
rename from services/wsprd/ipc/server/server.vdl.go
rename to services/wsprd/rpc/server/server.vdl.go
index ee401e2..b97a125 100644
--- a/services/wsprd/ipc/server/server.vdl.go
+++ b/services/wsprd/rpc/server/server.vdl.go
@@ -28,7 +28,7 @@
 }
 
 func (SecurityCall) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/ipc/server.SecurityCall"
+	Name string "v.io/x/ref/services/wsprd/rpc/server.SecurityCall"
 }) {
 }
 
@@ -39,7 +39,7 @@
 }
 
 func (CaveatValidationRequest) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/ipc/server.CaveatValidationRequest"
+	Name string "v.io/x/ref/services/wsprd/rpc/server.CaveatValidationRequest"
 }) {
 }
 
@@ -48,7 +48,7 @@
 }
 
 func (CaveatValidationResponse) __VDLReflect(struct {
-	Name string "v.io/x/ref/services/wsprd/ipc/server.CaveatValidationResponse"
+	Name string "v.io/x/ref/services/wsprd/rpc/server.CaveatValidationResponse"
 }) {
 }
 
@@ -59,8 +59,8 @@
 }
 
 var (
-	ErrCaveatValidationTimeout                 = verror.Register("v.io/x/ref/services/wsprd/ipc/server.CaveatValidationTimeout", verror.NoRetry, "{1:}{2:} Caveat validation has timed out")
-	ErrInvalidValidationResponseFromJavascript = verror.Register("v.io/x/ref/services/wsprd/ipc/server.InvalidValidationResponseFromJavascript", verror.NoRetry, "{1:}{2:} Invalid validation response from javascript")
+	ErrCaveatValidationTimeout                 = verror.Register("v.io/x/ref/services/wsprd/rpc/server.CaveatValidationTimeout", verror.NoRetry, "{1:}{2:} Caveat validation has timed out")
+	ErrInvalidValidationResponseFromJavascript = verror.Register("v.io/x/ref/services/wsprd/rpc/server.InvalidValidationResponseFromJavascript", verror.NoRetry, "{1:}{2:} Invalid validation response from javascript")
 )
 
 func init() {
diff --git a/services/wsprd/wspr/wspr.go b/services/wsprd/wspr/wspr.go
index a0b76b2..14f6397 100644
--- a/services/wsprd/wspr/wspr.go
+++ b/services/wsprd/wspr/wspr.go
@@ -27,7 +27,7 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/x/lib/vlog"
 
 	"v.io/x/ref/services/wsprd/account"
@@ -46,7 +46,7 @@
 	// HTTP port for WSPR to serve on. Note, WSPR always serves on localhost.
 	httpPort         int
 	ln               *net.TCPListener // HTTP listener
-	listenSpec       *ipc.ListenSpec
+	listenSpec       *rpc.ListenSpec
 	namespaceRoots   []string
 	principalManager *principal.PrincipalManager
 	accountManager   *account.AccountManager
@@ -120,7 +120,7 @@
 }
 
 // Creates a new WebSocket Proxy object.
-func NewWSPR(ctx *context.T, httpPort int, listenSpec *ipc.ListenSpec, identdEP string, namespaceRoots []string) *WSPR {
+func NewWSPR(ctx *context.T, httpPort int, listenSpec *rpc.ListenSpec, identdEP string, namespaceRoots []string) *WSPR {
 	if listenSpec.Proxy == "" {
 		vlog.Fatalf("a vanadium proxy must be set")
 	}
diff --git a/test/modules/core/echo.go b/test/modules/core/echo.go
index efff29a..18b45e9 100644
--- a/test/modules/core/echo.go
+++ b/test/modules/core/echo.go
@@ -7,7 +7,7 @@
 	"time"
 
 	"v.io/v23"
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 
 	"v.io/x/ref/test/modules"
@@ -30,14 +30,14 @@
 	id, suffix string
 }
 
-func (es *echoServerObject) Echo(call ipc.ServerCall, m string) (string, error) {
+func (es *echoServerObject) Echo(call rpc.ServerCall, m string) (string, error) {
 	if len(es.suffix) > 0 {
 		return fmt.Sprintf("%s.%s: %s\n", es.id, es.suffix, m), nil
 	}
 	return fmt.Sprintf("%s: %s\n", es.id, m), nil
 }
 
-func (es *echoServerObject) Sleep(call ipc.ServerCall, d string) error {
+func (es *echoServerObject) Sleep(call rpc.ServerCall, d string) error {
 	duration, err := time.ParseDuration(d)
 	if err != nil {
 		return err
diff --git a/test/testutil/dispatcher.go b/test/testutil/dispatcher.go
index 0b1d3ae..9bc1f1a 100644
--- a/test/testutil/dispatcher.go
+++ b/test/testutil/dispatcher.go
@@ -1,25 +1,25 @@
 package testutil
 
 import (
-	"v.io/v23/ipc"
+	"v.io/v23/rpc"
 	"v.io/v23/security"
 )
 
 // LeafDispatcher returns a dispatcher for a single object obj, using
 // ReflectInvokerOrDie to invoke methods. Lookup only succeeds on the empty
 // suffix.  The provided auth is returned for successful lookups.
-func LeafDispatcher(obj interface{}, auth security.Authorizer) ipc.Dispatcher {
-	return &leafDispatcher{ipc.ReflectInvokerOrDie(obj), auth}
+func LeafDispatcher(obj interface{}, auth security.Authorizer) rpc.Dispatcher {
+	return &leafDispatcher{rpc.ReflectInvokerOrDie(obj), auth}
 }
 
 type leafDispatcher struct {
-	invoker ipc.Invoker
+	invoker rpc.Invoker
 	auth    security.Authorizer
 }
 
 func (d leafDispatcher) Lookup(suffix string) (interface{}, security.Authorizer, error) {
 	if suffix != "" {
-		return nil, nil, ipc.NewErrUnknownSuffix(nil, suffix)
+		return nil, nil, rpc.NewErrUnknownSuffix(nil, suffix)
 	}
 	return d.invoker, d.auth, nil
 }
diff --git a/test/testutil/glob.go b/test/testutil/glob.go
index fe249f8..4251a34 100644
--- a/test/testutil/glob.go
+++ b/test/testutil/glob.go
@@ -6,15 +6,15 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/ipc"
 	"v.io/v23/naming"
+	"v.io/v23/rpc"
 )
 
 // GlobName calls __Glob on the given object with the given pattern and returns
 // a sorted list of matching object names, or an error.
 func GlobName(ctx *context.T, name, pattern string) ([]string, []naming.GlobError, error) {
 	client := v23.GetClient(ctx)
-	call, err := client.StartCall(ctx, name, ipc.GlobMethod, []interface{}{pattern})
+	call, err := client.StartCall(ctx, name, rpc.GlobMethod, []interface{}{pattern})
 	if err != nil {
 		return nil, nil, err
 	}