diff --git a/cmd/mounttable/impl_test.go b/cmd/mounttable/impl_test.go
index 09875f3..fad262e 100644
--- a/cmd/mounttable/impl_test.go
+++ b/cmd/mounttable/impl_test.go
@@ -36,7 +36,9 @@
 }
 
 func deadline(minutes int) vdltime.Deadline {
-	return vdltime.Deadline{now.Add(time.Minute * time.Duration(minutes))}
+	return vdltime.Deadline{
+		Time: now.Add(time.Minute * time.Duration(minutes)),
+	}
 }
 
 type server struct {
@@ -46,8 +48,22 @@
 func (s *server) Glob__(ctx *context.T, call rpc.GlobServerCall, g *glob.Glob) error {
 	ctx.VI(2).Infof("Glob() was called. suffix=%v pattern=%q", s.suffix, g.String())
 	sender := call.SendStream()
-	sender.Send(naming.GlobReplyEntry{naming.MountEntry{"name1", []naming.MountedServer{{"server1", deadline(1)}}, false, false}})
-	sender.Send(naming.GlobReplyEntry{naming.MountEntry{"name2", []naming.MountedServer{{"server2", deadline(2)}, {"server3", deadline(3)}}, false, false}})
+	sender.Send(naming.GlobReplyEntry{
+		Value: naming.MountEntry{
+			Name:             "name1",
+			Servers:          []naming.MountedServer{{"server1", deadline(1)}},
+			ServesMountTable: false,
+			IsLeaf:           false,
+		},
+	})
+	sender.Send(naming.GlobReplyEntry{
+		Value: naming.MountEntry{
+			Name:             "name2",
+			Servers:          []naming.MountedServer{{"server2", deadline(2)}, {"server3", deadline(3)}},
+			ServesMountTable: false,
+			IsLeaf:           false,
+		},
+	})
 	return nil
 }
 
diff --git a/cmd/principal/bless.go b/cmd/principal/bless.go
index ca6c46c..2c24366 100644
--- a/cmd/principal/bless.go
+++ b/cmd/principal/bless.go
@@ -36,7 +36,9 @@
 	// Authorize the server by its public key (obtained from macaroonChan).
 	// Must skip authorization during name resolution because the identity
 	// service is not a trusted root yet.
-	blessings, err := identity.MacaroonBlesserClient(service).Bless(ctx, macaroon, options.SkipServerEndpointAuthorization{}, options.ServerPublicKey{serviceKey})
+	blessings, err := identity.MacaroonBlesserClient(service).Bless(ctx, macaroon, options.SkipServerEndpointAuthorization{}, options.ServerPublicKey{
+		PublicKey: serviceKey,
+	})
 	if err != nil {
 		return security.Blessings{}, fmt.Errorf("failed to get blessing from %q: %v", service, err)
 	}
diff --git a/cmd/vdl/arith_test.go b/cmd/vdl/arith_test.go
index d0294ae..8cb78b7 100644
--- a/cmd/vdl/arith_test.go
+++ b/cmd/vdl/arith_test.go
@@ -309,14 +309,14 @@
 		if q != 2 || r != 1 {
 			t.Errorf("DivMod: expected (2,1) got (%d,%d)", q, r)
 		}
-		diff, err := ar.Sub(ctx, base.Args{7, 8})
+		diff, err := ar.Sub(ctx, base.Args{A: 7, B: 8})
 		if err != nil {
 			t.Errorf("Sub: got %q but expected no error", err)
 		}
 		if diff != -1 {
 			t.Errorf("Sub: got %d, expected -1", diff)
 		}
-		prod, err := ar.Mul(ctx, base.NestedArgs{base.Args{7, 8}})
+		prod, err := ar.Mul(ctx, base.NestedArgs{Args: base.Args{A: 7, B: 8}})
 		if err != nil {
 			t.Errorf("Mul: got %q, but expected no error", err)
 		}
diff --git a/envvar.go b/envvar.go
index 31ca4bb..bb7af0a 100644
--- a/envvar.go
+++ b/envvar.go
@@ -24,12 +24,20 @@
 	// See v.io/x/ref/lib/security.CreatePersistentPrincipal.
 	EnvCredentials = "V23_CREDENTIALS"
 
+	// EnvAgentPath is the name of the environment variable pointing to an
+	// agentd process containing all the credentials a principal (the blessing
+	// store, the blessing roots, possibly the private key etc.).
+	//
+	// Typically only one of EnvCredentials or EnvAgentPaths will be set in a
+	// process. If both are set, then EnvCredentials takes preference.
+	EnvAgentPath = "V23_AGENT_PATH"
+
 	// EnvAgentEndpoint is the name of the environment variable pointing to an
 	// agentd process containing all the credentials a principal (the blessing
 	// store, the blessing roots, possibly the private key etc.).
 	//
-	// Typically only one of EnvCredentials or EnvAgentEndpoint will be set in a
-	// process. If both are set, then EnvCredentials takes preference.
+	// EnvAgentEndpoint is deprecated. New agentd processes should use EnvAgentPath.
+	// If both are set, EnvAgentPath takes preference.
 	EnvAgentEndpoint = "V23_AGENT_ENDPOINT"
 
 	// EnvNamespacePrefix is the prefix of all environment variables that define a
diff --git a/examples/rps/rpsbot/player.go b/examples/rps/rpsbot/player.go
index 31ad9b0..592ffcb 100644
--- a/examples/rps/rpsbot/player.go
+++ b/examples/rps/rpsbot/player.go
@@ -131,7 +131,7 @@
 			opts := v.Value
 			n := rand.Intn(len(opts))
 			outer.VI(1).Infof("My turn to play. Picked %q from %v", opts[n], opts)
-			if err := sender.Send(rps.PlayerActionMove{opts[n]}); err != nil {
+			if err := sender.Send(rps.PlayerActionMove{Value: opts[n]}); err != nil {
 				return rps.PlayResult{}, err
 			}
 		case rps.JudgeActionRoundResult:
diff --git a/examples/rps/rpsplayer/main.go b/examples/rps/rpsplayer/main.go
index 3f496f5..ad57b4f 100644
--- a/examples/rps/rpsplayer/main.go
+++ b/examples/rps/rpsplayer/main.go
@@ -243,7 +243,7 @@
 			fmt.Println()
 			fmt.Println("Choose your weapon:")
 			m := selectOne(opts)
-			if err := game.SendStream().Send(rps.PlayerActionMove{opts[m]}); err != nil {
+			if err := game.SendStream().Send(rps.PlayerActionMove{Value: opts[m]}); err != nil {
 				return rps.PlayResult{}, err
 			}
 		case rps.JudgeActionScore:
diff --git a/examples/tunnel/vsh/iomanager.go b/examples/tunnel/vsh/iomanager.go
index d0f6d95..4682d94 100644
--- a/examples/tunnel/vsh/iomanager.go
+++ b/examples/tunnel/vsh/iomanager.go
@@ -130,7 +130,10 @@
 			logger.Global().Infof("GetWindowSize failed: %v", err)
 			continue
 		}
-		outchan <- tunnel.ClientShellPacketWinSize{tunnel.WindowSize{ws.Row, ws.Col}}
+		outchan <- tunnel.ClientShellPacketWinSize{tunnel.WindowSize{
+			Rows: ws.Row,
+			Cols: ws.Col,
+		}}
 	}
 }
 
diff --git a/lib/exec/exec_test.go b/lib/exec/exec_test.go
index 259b4a7..6426f8c 100644
--- a/lib/exec/exec_test.go
+++ b/lib/exec/exec_test.go
@@ -119,7 +119,7 @@
 	stderr, _ := cmd.StderrPipe()
 	cfg := vexec.NewConfig()
 	cfg.Set("foo", "bar")
-	ph := vexec.NewParentHandle(cmd, vexec.ConfigOpt{cfg})
+	ph := vexec.NewParentHandle(cmd, vexec.ConfigOpt{Config: cfg})
 	err := ph.Start()
 	if err != nil {
 		t.Fatalf("testConfig: start: %v", err)
@@ -213,7 +213,7 @@
 		cmd[i].ExtraFiles = append(cmd[i].ExtraFiles, controlRead)
 		stderr[i], _ = cmd[i].StderrPipe()
 		tk := timekeeper.NewManualTime()
-		ph[i] = vexec.NewParentHandle(cmd[i], vexec.TimeKeeperOpt{tk})
+		ph[i] = vexec.NewParentHandle(cmd[i], vexec.TimeKeeperOpt{TimeKeeper: tk})
 		done.Add(1)
 		go func() {
 			// For simulated slow children, wait until the parent
@@ -311,7 +311,7 @@
 	cmd.ExtraFiles = append(cmd.ExtraFiles, controlRead)
 	stderr, _ := cmd.StderrPipe()
 	tk := timekeeper.NewManualTime()
-	ph := vexec.NewParentHandle(cmd, vexec.TimeKeeperOpt{tk})
+	ph := vexec.NewParentHandle(cmd, vexec.TimeKeeperOpt{TimeKeeper: tk})
 	defer clean(t, ph)
 	defer controlWrite.Close()
 	defer controlRead.Close()
@@ -352,7 +352,7 @@
 		t.Fatalf("%s: failed to get stderr pipe", name)
 	}
 	tk := timekeeper.NewManualTime()
-	ph := vexec.NewParentHandle(cmd, vexec.TimeKeeperOpt{tk})
+	ph := vexec.NewParentHandle(cmd, vexec.TimeKeeperOpt{TimeKeeper: tk})
 	defer clean(t, ph)
 	defer controlWrite.Close()
 	defer controlRead.Close()
@@ -422,7 +422,7 @@
 	name := "exitEarly"
 	cmd := helperCommand(name)
 	tk := timekeeper.NewManualTime()
-	ph := vexec.NewParentHandle(cmd, vexec.TimeKeeperOpt{tk})
+	ph := vexec.NewParentHandle(cmd, vexec.TimeKeeperOpt{TimeKeeper: tk})
 	err := ph.Start()
 	if err != nil {
 		t.Fatalf("%s: start: %v", name, err)
@@ -438,7 +438,7 @@
 	name := "testReadyAndHang"
 	cmd := helperCommand(name)
 	tk := timekeeper.NewManualTime()
-	ph := vexec.NewParentHandle(cmd, vexec.TimeKeeperOpt{tk})
+	ph := vexec.NewParentHandle(cmd, vexec.TimeKeeperOpt{TimeKeeper: tk})
 	if err := waitForReady(t, cmd, name, 1, ph); err != nil {
 		t.Errorf("%s: WaitForReady: %v (%v)", name, err, ph)
 	}
diff --git a/lib/mgmt/model.go b/lib/mgmt/model.go
index 1aa425f..95a667f 100644
--- a/lib/mgmt/model.go
+++ b/lib/mgmt/model.go
@@ -13,6 +13,7 @@
 	ProtocolConfigKey              = "MGMT_CHILD_PROCESS_PROTOCOL"
 	ParentBlessingConfigKey        = "MGMT_PARENT_BLESSING_PEER_PATTERN"
 	SecurityAgentEndpointConfigKey = "MGMT_SECURITY_AGENT_EP"
+	SecurityAgentPathConfigKey     = "MGMT_SECURITY_AGENT_PATH"
 	AppOriginConfigKey             = "MGMT_APP_ORIGIN"
 	PublisherBlessingPrefixesKey   = "MGMT_PUBLISHER_BLESSING_PREFIXES"
 	InstanceNameKey                = "MGMT_INSTANCE_NAME"
diff --git a/lib/pubsub/config_test.go b/lib/pubsub/config_test.go
index f827c79..c434606 100644
--- a/lib/pubsub/config_test.go
+++ b/lib/pubsub/config_test.go
@@ -149,7 +149,11 @@
 		}
 	}
 
-	got, want := pub.Latest("s2"), &pubsub.Stream{"s2", "eg2", nil}
+	got, want := pub.Latest("s2"), &pubsub.Stream{
+		Name:        "s2",
+		Description: "eg2",
+		Latest:      nil,
+	}
 	if !reflect.DeepEqual(got, want) {
 		t.Errorf("got %q, want %q", got, want)
 	}
diff --git a/lib/stats/sysstats/sysstats.go b/lib/stats/sysstats/sysstats.go
index 2fafa14..98c52d1 100644
--- a/lib/stats/sysstats/sysstats.go
+++ b/lib/stats/sysstats/sysstats.go
@@ -40,7 +40,10 @@
 	var kv []stats.KeyValue
 	for _, v := range os.Environ() {
 		if parts := strings.SplitN(v, "=", 2); len(parts) == 2 {
-			kv = append(kv, stats.KeyValue{parts[0], parts[1]})
+			kv = append(kv, stats.KeyValue{
+				Key:   parts[0],
+				Value: parts[1],
+			})
 		}
 	}
 	stats.NewMap("system/environ").Set(kv)
@@ -66,7 +69,10 @@
 		v := reflect.ValueOf(memstats)
 		kv := make([]stats.KeyValue, len(fieldNames))
 		for i, name := range fieldNames {
-			kv[i] = stats.KeyValue{name, v.FieldByName(name).Interface()}
+			kv[i] = stats.KeyValue{
+				Key:   name,
+				Value: v.FieldByName(name).Interface(),
+			}
 		}
 		mstats.Set(kv)
 	}
@@ -83,7 +89,10 @@
 func exportMetaData() {
 	var kv []stats.KeyValue
 	for id, value := range metadata.ToMap() {
-		kv = append(kv, stats.KeyValue{id, value})
+		kv = append(kv, stats.KeyValue{
+			Key:   id,
+			Value: value,
+		})
 	}
 	stats.NewMap("system/metadata").Set(kv)
 }
diff --git a/lib/vdl/build/build_test.go b/lib/vdl/build/build_test.go
index f3c4414..38773a1 100644
--- a/lib/vdl/build/build_test.go
+++ b/lib/vdl/build/build_test.go
@@ -579,7 +579,15 @@
 
 func TestBuildExprs(t *testing.T) {
 	ttArray := vdl.ArrayType(2, vdl.Int32Type)
-	ttStruct := vdl.StructType(vdl.Field{"A", vdl.Int32Type}, vdl.Field{"B", vdl.StringType})
+	ttStruct := vdl.StructType(
+		vdl.Field{
+			Name: "A",
+			Type: vdl.Int32Type,
+		}, vdl.Field{
+			Name: "B",
+			Type: vdl.StringType,
+		},
+	)
 	vvArray := vdl.ZeroValue(ttArray)
 	vvArray.Index(0).AssignInt(1)
 	vvArray.Index(1).AssignInt(-2)
diff --git a/lib/vdl/codegen/golang/type_test.go b/lib/vdl/codegen/golang/type_test.go
index 4a650c8..fe2e20e 100644
--- a/lib/vdl/codegen/golang/type_test.go
+++ b/lib/vdl/codegen/golang/type_test.go
@@ -180,11 +180,23 @@
 	tSet    = vdl.SetType(vdl.StringType)
 	tMap    = vdl.MapType(vdl.StringType, vdl.Int64Type)
 	tStruct = vdl.NamedType("TestStruct", vdl.StructType(
-		vdl.Field{"A", vdl.StringType},
-		vdl.Field{"B", vdl.Int64Type},
+		vdl.Field{
+			Name: "A",
+			Type: vdl.StringType,
+		},
+		vdl.Field{
+			Name: "B",
+			Type: vdl.Int64Type,
+		},
 	))
 	tUnion = vdl.NamedType("TestUnion", vdl.UnionType(
-		vdl.Field{"A", vdl.StringType},
-		vdl.Field{"B", vdl.Int64Type},
+		vdl.Field{
+			Name: "A",
+			Type: vdl.StringType,
+		},
+		vdl.Field{
+			Name: "B",
+			Type: vdl.Int64Type,
+		},
 	))
 )
diff --git a/lib/vdl/compile/const_test.go b/lib/vdl/compile/const_test.go
index a3c0d20..2419f86 100644
--- a/lib/vdl/compile/const_test.go
+++ b/lib/vdl/compile/const_test.go
@@ -183,7 +183,10 @@
 }
 
 func makeStructTypeObjectType(name string) *vdl.Type {
-	return vdl.NamedType(name, vdl.StructType(vdl.Field{"T", vdl.TypeObjectType}))
+	return vdl.NamedType(name, vdl.StructType(vdl.Field{
+		Name: "T",
+		Type: vdl.TypeObjectType,
+	}))
 }
 
 func makeStructTypeObject(name string, t *vdl.Type) *vdl.Value {
@@ -196,7 +199,10 @@
 	tA := vdl.NamedType("p.kg/a.A", vdl.StructType([]vdl.Field{
 		{"X", vdl.Int64Type}, {"Y", vdl.StringType},
 	}...))
-	tB := vdl.NamedType("p.kg/a.B", vdl.StructType(vdl.Field{"Z", vdl.ListType(tA)}))
+	tB := vdl.NamedType("p.kg/a.B", vdl.StructType(vdl.Field{
+		Name: "Z",
+		Type: vdl.ListType(tA),
+	}))
 	res := vdl.ZeroValue(tB)
 	listv := res.StructField(0).AssignLen(2)
 	listv.Index(0).StructField(0).AssignInt(1)
@@ -213,7 +219,10 @@
 
 func makeInnerEnum(label string) *vdl.Value {
 	tA := vdl.NamedType("p.kg/a.A", vdl.EnumType("X", "Y", "Z"))
-	tB := vdl.NamedType("p.kg/a.B", vdl.StructType(vdl.Field{"A", tA}))
+	tB := vdl.NamedType("p.kg/a.B", vdl.StructType(vdl.Field{
+		Name: "A",
+		Type: tA,
+	}))
 	res := vdl.ZeroValue(tB)
 	res.StructField(0).AssignEnumLabel(label)
 	return res
diff --git a/lib/vdl/compile/type_test.go b/lib/vdl/compile/type_test.go
index 0009a5d..1c43299 100644
--- a/lib/vdl/compile/type_test.go
+++ b/lib/vdl/compile/type_test.go
@@ -126,7 +126,10 @@
 	{"Map", tp{{"a", `type Res map[int32]string`, vdl.MapType(vdl.Int32Type, vdl.StringType), ""}}},
 	{"Struct", tp{{"a", `type Res struct{A int32;B string}`, vdl.StructType([]vdl.Field{{"A", vdl.Int32Type}, {"B", vdl.StringType}}...), ""}}},
 	{"Union", tp{{"a", `type Res union{A bool;B int32;C string}`, vdl.UnionType([]vdl.Field{{"A", vdl.BoolType}, {"B", vdl.Int32Type}, {"C", vdl.StringType}}...), ""}}},
-	{"Optional", tp{{"a", `type Res []?x;type x struct{A bool}`, vdl.ListType(vdl.OptionalType(namedX(vdl.StructType(vdl.Field{"A", vdl.BoolType})))), ""}}},
+	{"Optional", tp{{"a", `type Res []?x;type x struct{A bool}`, vdl.ListType(vdl.OptionalType(namedX(vdl.StructType(vdl.Field{
+		Name: "A",
+		Type: vdl.BoolType,
+	})))), ""}}},
 
 	// Test named types based on named types.
 	{"NBool", tp{{"a", `type Res x;type x bool`, namedX(vdl.BoolType), ""}}},
diff --git a/lib/vdl/opconst/testutil_test.go b/lib/vdl/opconst/testutil_test.go
index e16b636..886e83e 100644
--- a/lib/vdl/opconst/testutil_test.go
+++ b/lib/vdl/opconst/testutil_test.go
@@ -311,10 +311,10 @@
 	setStringTypeN     = vdl.NamedType("nSetString", vdl.SetType(stringTypeN))
 	mapStringBoolType  = vdl.MapType(vdl.StringType, vdl.BoolType)
 	mapStringBoolTypeN = vdl.NamedType("nMapStringBool", vdl.MapType(stringTypeN, boolTypeN))
-	structXYZBoolType  = vdl.StructType(vdl.Field{"X", vdl.BoolType}, vdl.Field{"Y", vdl.BoolType}, vdl.Field{"Z", vdl.BoolType})
-	structXYZBoolTypeN = vdl.NamedType("nStructXYZBool", vdl.StructType(vdl.Field{"X", boolTypeN}, vdl.Field{"Y", boolTypeN}, vdl.Field{"Z", boolTypeN}))
-	structWXBoolType   = vdl.StructType(vdl.Field{"W", vdl.BoolType}, vdl.Field{"X", vdl.BoolType})
-	structWXBoolTypeN  = vdl.NamedType("nStructWXBool", vdl.StructType(vdl.Field{"W", boolTypeN}, vdl.Field{"X", boolTypeN}))
+	structXYZBoolType  = vdl.StructType(vdl.Field{Name: "X", Type: vdl.BoolType}, vdl.Field{Name: "Y", Type: vdl.BoolType}, vdl.Field{Name: "Z", Type: vdl.BoolType})
+	structXYZBoolTypeN = vdl.NamedType("nStructXYZBool", vdl.StructType(vdl.Field{Name: "X", Type: boolTypeN}, vdl.Field{Name: "Y", Type: boolTypeN}, vdl.Field{Name: "Z", Type: boolTypeN}))
+	structWXBoolType   = vdl.StructType(vdl.Field{Name: "W", Type: vdl.BoolType}, vdl.Field{Name: "X", Type: vdl.BoolType})
+	structWXBoolTypeN  = vdl.NamedType("nStructWXBool", vdl.StructType(vdl.Field{Name: "W", Type: boolTypeN}, vdl.Field{Name: "X", Type: boolTypeN}))
 	// Composite types representing maps of strings to numbers.
 	mapStringUint64Type     = vdl.MapType(vdl.StringType, vdl.Uint64Type)
 	mapStringUint64TypeN    = vdl.NamedType("nMapStringUint64", vdl.MapType(stringTypeN, uint64TypeN))
@@ -324,24 +324,24 @@
 	mapStringFloat64TypeN   = vdl.NamedType("nMapStringFloat64", vdl.MapType(stringTypeN, float64TypeN))
 	mapStringComplex64Type  = vdl.MapType(vdl.StringType, vdl.Complex64Type)
 	mapStringComplex64TypeN = vdl.NamedType("nMapStringComplex64", vdl.MapType(stringTypeN, complex64TypeN))
-	structVWXUint64Type     = vdl.StructType(vdl.Field{"V", vdl.Uint64Type}, vdl.Field{"W", vdl.Uint64Type}, vdl.Field{"X", vdl.Uint64Type})
-	structVWXUint64TypeN    = vdl.NamedType("nStructVWXUint64", vdl.StructType(vdl.Field{"V", uint64TypeN}, vdl.Field{"W", uint64TypeN}, vdl.Field{"X", uint64TypeN}))
-	structVWXInt64Type      = vdl.StructType(vdl.Field{"V", vdl.Int64Type}, vdl.Field{"W", vdl.Int64Type}, vdl.Field{"X", vdl.Int64Type})
-	structVWXInt64TypeN     = vdl.NamedType("nStructVWXInt64", vdl.StructType(vdl.Field{"V", int64TypeN}, vdl.Field{"W", int64TypeN}, vdl.Field{"X", int64TypeN}))
-	structVWXFloat64Type    = vdl.StructType(vdl.Field{"V", vdl.Float64Type}, vdl.Field{"W", vdl.Float64Type}, vdl.Field{"X", vdl.Float64Type})
-	structVWXFloat64TypeN   = vdl.NamedType("nStructVWXFloat64", vdl.StructType(vdl.Field{"V", float64TypeN}, vdl.Field{"W", float64TypeN}, vdl.Field{"X", float64TypeN}))
-	structVWXComplex64Type  = vdl.StructType(vdl.Field{"V", vdl.Complex64Type}, vdl.Field{"W", vdl.Complex64Type}, vdl.Field{"X", vdl.Complex64Type})
-	structVWXComplex64TypeN = vdl.NamedType("nStructVWXComplex64", vdl.StructType(vdl.Field{"V", complex64TypeN}, vdl.Field{"W", complex64TypeN}, vdl.Field{"X", complex64TypeN}))
-	structUVUint64Type      = vdl.StructType(vdl.Field{"U", vdl.Uint64Type}, vdl.Field{"V", vdl.Uint64Type})
-	structUVUint64TypeN     = vdl.NamedType("nStructUVUint64", vdl.StructType(vdl.Field{"U", uint64TypeN}, vdl.Field{"V", uint64TypeN}))
-	structUVInt64Type       = vdl.StructType(vdl.Field{"U", vdl.Int64Type}, vdl.Field{"V", vdl.Int64Type})
-	structUVInt64TypeN      = vdl.NamedType("nStructUVInt64", vdl.StructType(vdl.Field{"U", int64TypeN}, vdl.Field{"V", int64TypeN}))
-	structUVFloat64Type     = vdl.StructType(vdl.Field{"U", vdl.Float64Type}, vdl.Field{"V", vdl.Float64Type})
-	structUVFloat64TypeN    = vdl.NamedType("nStructUVFloat64", vdl.StructType(vdl.Field{"U", float64TypeN}, vdl.Field{"V", float64TypeN}))
-	structUVComplex64Type   = vdl.StructType(vdl.Field{"U", vdl.Complex64Type}, vdl.Field{"V", vdl.Complex64Type})
-	structUVComplex64TypeN  = vdl.NamedType("nStructUVComplex64", vdl.StructType(vdl.Field{"U", complex64TypeN}, vdl.Field{"V", complex64TypeN}))
+	structVWXUint64Type     = vdl.StructType(vdl.Field{Name: "V", Type: vdl.Uint64Type}, vdl.Field{Name: "W", Type: vdl.Uint64Type}, vdl.Field{Name: "X", Type: vdl.Uint64Type})
+	structVWXUint64TypeN    = vdl.NamedType("nStructVWXUint64", vdl.StructType(vdl.Field{Name: "V", Type: uint64TypeN}, vdl.Field{Name: "W", Type: uint64TypeN}, vdl.Field{Name: "X", Type: uint64TypeN}))
+	structVWXInt64Type      = vdl.StructType(vdl.Field{Name: "V", Type: vdl.Int64Type}, vdl.Field{Name: "W", Type: vdl.Int64Type}, vdl.Field{Name: "X", Type: vdl.Int64Type})
+	structVWXInt64TypeN     = vdl.NamedType("nStructVWXInt64", vdl.StructType(vdl.Field{Name: "V", Type: int64TypeN}, vdl.Field{Name: "W", Type: int64TypeN}, vdl.Field{Name: "X", Type: int64TypeN}))
+	structVWXFloat64Type    = vdl.StructType(vdl.Field{Name: "V", Type: vdl.Float64Type}, vdl.Field{Name: "W", Type: vdl.Float64Type}, vdl.Field{Name: "X", Type: vdl.Float64Type})
+	structVWXFloat64TypeN   = vdl.NamedType("nStructVWXFloat64", vdl.StructType(vdl.Field{Name: "V", Type: float64TypeN}, vdl.Field{Name: "W", Type: float64TypeN}, vdl.Field{Name: "X", Type: float64TypeN}))
+	structVWXComplex64Type  = vdl.StructType(vdl.Field{Name: "V", Type: vdl.Complex64Type}, vdl.Field{Name: "W", Type: vdl.Complex64Type}, vdl.Field{Name: "X", Type: vdl.Complex64Type})
+	structVWXComplex64TypeN = vdl.NamedType("nStructVWXComplex64", vdl.StructType(vdl.Field{Name: "V", Type: complex64TypeN}, vdl.Field{Name: "W", Type: complex64TypeN}, vdl.Field{Name: "X", Type: complex64TypeN}))
+	structUVUint64Type      = vdl.StructType(vdl.Field{Name: "U", Type: vdl.Uint64Type}, vdl.Field{Name: "V", Type: vdl.Uint64Type})
+	structUVUint64TypeN     = vdl.NamedType("nStructUVUint64", vdl.StructType(vdl.Field{Name: "U", Type: uint64TypeN}, vdl.Field{Name: "V", Type: uint64TypeN}))
+	structUVInt64Type       = vdl.StructType(vdl.Field{Name: "U", Type: vdl.Int64Type}, vdl.Field{Name: "V", Type: vdl.Int64Type})
+	structUVInt64TypeN      = vdl.NamedType("nStructUVInt64", vdl.StructType(vdl.Field{Name: "U", Type: int64TypeN}, vdl.Field{Name: "V", Type: int64TypeN}))
+	structUVFloat64Type     = vdl.StructType(vdl.Field{Name: "U", Type: vdl.Float64Type}, vdl.Field{Name: "V", Type: vdl.Float64Type})
+	structUVFloat64TypeN    = vdl.NamedType("nStructUVFloat64", vdl.StructType(vdl.Field{Name: "U", Type: float64TypeN}, vdl.Field{Name: "V", Type: float64TypeN}))
+	structUVComplex64Type   = vdl.StructType(vdl.Field{Name: "U", Type: vdl.Complex64Type}, vdl.Field{Name: "V", Type: vdl.Complex64Type})
+	structUVComplex64TypeN  = vdl.NamedType("nStructUVComplex64", vdl.StructType(vdl.Field{Name: "U", Type: complex64TypeN}, vdl.Field{Name: "V", Type: complex64TypeN}))
 
-	structAIntType  = vdl.StructType(vdl.Field{"A", vdl.Int64Type})
+	structAIntType  = vdl.StructType(vdl.Field{Name: "A", Type: vdl.Int64Type})
 	structAIntTypeN = vdl.NamedType("nStructA", structAIntType)
 
 	// Types that cannot be converted to sets.  Although we represent sets as
@@ -351,8 +351,8 @@
 	emptyTypeN          = vdl.NamedType("nEmpty", vdl.StructType())
 	mapStringEmptyType  = vdl.MapType(vdl.StringType, emptyType)
 	mapStringEmptyTypeN = vdl.NamedType("nMapStringEmpty", vdl.MapType(stringTypeN, emptyTypeN))
-	structXYZEmptyType  = vdl.StructType(vdl.Field{"X", emptyType}, vdl.Field{"Y", emptyType}, vdl.Field{"Z", emptyType})
-	structXYZEmptyTypeN = vdl.NamedType("nStructXYZEmpty", vdl.StructType(vdl.Field{"X", emptyTypeN}, vdl.Field{"Y", emptyTypeN}, vdl.Field{"Z", emptyTypeN}))
+	structXYZEmptyType  = vdl.StructType(vdl.Field{Name: "X", Type: emptyType}, vdl.Field{Name: "Y", Type: emptyType}, vdl.Field{Name: "Z", Type: emptyType})
+	structXYZEmptyTypeN = vdl.NamedType("nStructXYZEmpty", vdl.StructType(vdl.Field{Name: "X", Type: emptyTypeN}, vdl.Field{Name: "Y", Type: emptyTypeN}, vdl.Field{Name: "Z", Type: emptyTypeN}))
 )
 
 func anyValue(x *vdl.Value) *vdl.Value                  { return vdl.ZeroValue(vdl.AnyType).Assign(x) }
diff --git a/lib/vdl/parse/parse_test.go b/lib/vdl/parse/parse_test.go
index 6e3ba87..7cbe7f1 100644
--- a/lib/vdl/parse/parse_test.go
+++ b/lib/vdl/parse/parse_test.go
@@ -645,14 +645,26 @@
 const box = ^3`,
 		&parse.File{BaseName: "testfile", PackageDef: np("testpkg", 1, 9),
 			ConstDefs: []*parse.ConstDef{
-				{NamePos: np("foo", 2, 7), Expr: &parse.ConstUnaryOp{"!",
-					cn("false", 2, 14), pos(2, 13)}},
-				{NamePos: np("bar", 3, 7), Expr: &parse.ConstUnaryOp{"+",
-					cl(big.NewInt(1), 3, 14), pos(3, 13)}},
-				{NamePos: np("baz", 4, 7), Expr: &parse.ConstUnaryOp{"-",
-					cl(big.NewInt(2), 4, 14), pos(4, 13)}},
-				{NamePos: np("box", 5, 7), Expr: &parse.ConstUnaryOp{"^",
-					cl(big.NewInt(3), 5, 14), pos(5, 13)}}}},
+				{NamePos: np("foo", 2, 7), Expr: &parse.ConstUnaryOp{
+					Op:   "!",
+					Expr: cn("false", 2, 14),
+					P:    pos(2, 13)},
+				},
+				{NamePos: np("bar", 3, 7), Expr: &parse.ConstUnaryOp{
+					Op:   "+",
+					Expr: cl(big.NewInt(1), 3, 14),
+					P:    pos(3, 13)},
+				},
+				{NamePos: np("baz", 4, 7), Expr: &parse.ConstUnaryOp{
+					Op:   "-",
+					Expr: cl(big.NewInt(2), 4, 14),
+					P:    pos(4, 13)},
+				},
+				{NamePos: np("box", 5, 7), Expr: &parse.ConstUnaryOp{
+					Op:   "^",
+					Expr: cl(big.NewInt(3), 5, 14),
+					P:    pos(5, 13),
+				}}}},
 		nil},
 	{
 		"TypeConvConst",
@@ -661,10 +673,16 @@
 const bar = pkg.box(false)`,
 		&parse.File{BaseName: "testfile", PackageDef: np("testpkg", 1, 9),
 			ConstDefs: []*parse.ConstDef{
-				{NamePos: np("foo", 2, 7), Expr: &parse.ConstTypeConv{tn("baz", 2, 13),
-					cn("true", 2, 17), pos(2, 13)}},
-				{NamePos: np("bar", 3, 7), Expr: &parse.ConstTypeConv{tn("pkg.box", 3, 13),
-					cn("false", 3, 21), pos(3, 13)}}}},
+				{NamePos: np("foo", 2, 7), Expr: &parse.ConstTypeConv{
+					Type: tn("baz", 2, 13),
+					Expr: cn("true", 2, 17),
+					P:    pos(2, 13),
+				}},
+				{NamePos: np("bar", 3, 7), Expr: &parse.ConstTypeConv{
+					Type: tn("pkg.box", 3, 13),
+					Expr: cn("false", 3, 21),
+					P:    pos(3, 13),
+				}}}},
 		nil},
 	{
 		"TypeObjectConst",
@@ -673,10 +691,14 @@
 const bar = typeobject(pkg.box)`,
 		&parse.File{BaseName: "testfile", PackageDef: np("testpkg", 1, 9),
 			ConstDefs: []*parse.ConstDef{
-				{NamePos: np("foo", 2, 7), Expr: &parse.ConstTypeObject{tn("bool", 2, 24),
-					pos(2, 13)}},
-				{NamePos: np("bar", 3, 7), Expr: &parse.ConstTypeObject{tn("pkg.box", 3, 24),
-					pos(3, 13)}}}},
+				{NamePos: np("foo", 2, 7), Expr: &parse.ConstTypeObject{
+					Type: tn("bool", 2, 24),
+					P:    pos(2, 13),
+				}},
+				{NamePos: np("bar", 3, 7), Expr: &parse.ConstTypeObject{
+					Type: tn("pkg.box", 3, 24),
+					P:    pos(3, 13),
+				}}}},
 		nil},
 	{
 		"BinaryOpConst",
@@ -703,58 +725,130 @@
 			ConstDefs: []*parse.ConstDef{
 				{NamePos: np("a", 2, 7),
 					Expr: &parse.ConstBinaryOp{
-						"||", cn("true", 2, 11), cn("false", 2, 19), pos(2, 16)}},
+						Op:    "||",
+						Lexpr: cn("true", 2, 11),
+						Rexpr: cn("false", 2, 19),
+						P:     pos(2, 16),
+					}},
 				{NamePos: np("b", 3, 7),
 					Expr: &parse.ConstBinaryOp{
-						"&&", cn("true", 3, 11), cn("false", 3, 19), pos(3, 16)}},
+						Op:    "&&",
+						Lexpr: cn("true", 3, 11),
+						Rexpr: cn("false", 3, 19),
+						P:     pos(3, 16),
+					}},
 				{NamePos: np("c", 4, 7),
-					Expr: &parse.ConstBinaryOp{"<", cl(big.NewInt(1), 4, 11),
-						cl(big.NewInt(2), 4, 15), pos(4, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    "<",
+						Lexpr: cl(big.NewInt(1), 4, 11),
+						Rexpr: cl(big.NewInt(2), 4, 15),
+						P:     pos(4, 13),
+					}},
 				{NamePos: np("d", 5, 7),
-					Expr: &parse.ConstBinaryOp{">", cl(big.NewInt(3), 5, 11),
-						cl(big.NewInt(4), 5, 15), pos(5, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    ">",
+						Lexpr: cl(big.NewInt(3), 5, 11),
+						Rexpr: cl(big.NewInt(4), 5, 15),
+						P:     pos(5, 13),
+					}},
 				{NamePos: np("e", 6, 7),
-					Expr: &parse.ConstBinaryOp{"<=", cl(big.NewInt(5), 6, 11),
-						cl(big.NewInt(6), 6, 16), pos(6, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    "<=",
+						Lexpr: cl(big.NewInt(5), 6, 11),
+						Rexpr: cl(big.NewInt(6), 6, 16),
+						P:     pos(6, 13),
+					}},
 				{NamePos: np("f", 7, 7),
-					Expr: &parse.ConstBinaryOp{">=", cl(big.NewInt(7), 7, 11),
-						cl(big.NewInt(8), 7, 16), pos(7, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    ">=",
+						Lexpr: cl(big.NewInt(7), 7, 11),
+						Rexpr: cl(big.NewInt(8), 7, 16),
+						P:     pos(7, 13),
+					}},
 				{NamePos: np("g", 8, 7),
-					Expr: &parse.ConstBinaryOp{"!=", cl(big.NewInt(9), 8, 11),
-						cl(big.NewInt(8), 8, 16), pos(8, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    "!=",
+						Lexpr: cl(big.NewInt(9), 8, 11),
+						Rexpr: cl(big.NewInt(8), 8, 16),
+						P:     pos(8, 13),
+					}},
 				{NamePos: np("h", 9, 7),
-					Expr: &parse.ConstBinaryOp{"==", cl(big.NewInt(7), 9, 11),
-						cl(big.NewInt(6), 9, 16), pos(9, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    "==",
+						Lexpr: cl(big.NewInt(7), 9, 11),
+						Rexpr: cl(big.NewInt(6), 9, 16),
+						P:     pos(9, 13),
+					}},
 				{NamePos: np("i", 10, 7),
-					Expr: &parse.ConstBinaryOp{"+", cl(big.NewInt(5), 10, 11),
-						cl(big.NewInt(4), 10, 15), pos(10, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    "+",
+						Lexpr: cl(big.NewInt(5), 10, 11),
+						Rexpr: cl(big.NewInt(4), 10, 15),
+						P:     pos(10, 13),
+					}},
 				{NamePos: np("j", 11, 7),
-					Expr: &parse.ConstBinaryOp{"-", cl(big.NewInt(3), 11, 11),
-						cl(big.NewInt(2), 11, 15), pos(11, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    "-",
+						Lexpr: cl(big.NewInt(3), 11, 11),
+						Rexpr: cl(big.NewInt(2), 11, 15),
+						P:     pos(11, 13),
+					}},
 				{NamePos: np("k", 12, 7),
-					Expr: &parse.ConstBinaryOp{"*", cl(big.NewInt(1), 12, 11),
-						cl(big.NewInt(2), 12, 15), pos(12, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    "*",
+						Lexpr: cl(big.NewInt(1), 12, 11),
+						Rexpr: cl(big.NewInt(2), 12, 15),
+						P:     pos(12, 13),
+					}},
 				{NamePos: np("l", 13, 7),
-					Expr: &parse.ConstBinaryOp{"/", cl(big.NewInt(3), 13, 11),
-						cl(big.NewInt(4), 13, 15), pos(13, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    "/",
+						Lexpr: cl(big.NewInt(3), 13, 11),
+						Rexpr: cl(big.NewInt(4), 13, 15),
+						P:     pos(13, 13),
+					}},
 				{NamePos: np("m", 14, 7),
-					Expr: &parse.ConstBinaryOp{"%", cl(big.NewInt(5), 14, 11),
-						cl(big.NewInt(6), 14, 15), pos(14, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    "%",
+						Lexpr: cl(big.NewInt(5), 14, 11),
+						Rexpr: cl(big.NewInt(6), 14, 15),
+						P:     pos(14, 13),
+					}},
 				{NamePos: np("n", 15, 7),
-					Expr: &parse.ConstBinaryOp{"|", cl(big.NewInt(7), 15, 11),
-						cl(big.NewInt(8), 15, 15), pos(15, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    "|",
+						Lexpr: cl(big.NewInt(7), 15, 11),
+						Rexpr: cl(big.NewInt(8), 15, 15),
+						P:     pos(15, 13),
+					}},
 				{NamePos: np("o", 16, 7),
-					Expr: &parse.ConstBinaryOp{"&", cl(big.NewInt(9), 16, 11),
-						cl(big.NewInt(8), 16, 15), pos(16, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    "&",
+						Lexpr: cl(big.NewInt(9), 16, 11),
+						Rexpr: cl(big.NewInt(8), 16, 15),
+						P:     pos(16, 13),
+					}},
 				{NamePos: np("p", 17, 7),
-					Expr: &parse.ConstBinaryOp{"^", cl(big.NewInt(7), 17, 11),
-						cl(big.NewInt(6), 17, 15), pos(17, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    "^",
+						Lexpr: cl(big.NewInt(7), 17, 11),
+						Rexpr: cl(big.NewInt(6), 17, 15),
+						P:     pos(17, 13),
+					}},
 				{NamePos: np("q", 18, 7),
-					Expr: &parse.ConstBinaryOp{"<<", cl(big.NewInt(5), 18, 11),
-						cl(big.NewInt(4), 18, 16), pos(18, 13)}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    "<<",
+						Lexpr: cl(big.NewInt(5), 18, 11),
+						Rexpr: cl(big.NewInt(4), 18, 16),
+						P:     pos(18, 13),
+					}},
 				{NamePos: np("r", 19, 7),
-					Expr: &parse.ConstBinaryOp{">>", cl(big.NewInt(3), 19, 11),
-						cl(big.NewInt(2), 19, 16), pos(19, 13)}}}},
+					Expr: &parse.ConstBinaryOp{
+						Op:    ">>",
+						Lexpr: cl(big.NewInt(3), 19, 11),
+						Rexpr: cl(big.NewInt(2), 19, 16),
+						P:     pos(19, 13),
+					}}}},
 		nil},
 	{
 		"FAILConstOnlyName",
diff --git a/runtime/internal/naming/namespace/all_test.go b/runtime/internal/naming/namespace/all_test.go
index 0844c4f..04febd1 100644
--- a/runtime/internal/naming/namespace/all_test.go
+++ b/runtime/internal/naming/namespace/all_test.go
@@ -137,11 +137,11 @@
 	switch t.suffix {
 	case "":
 		if n := "level1"; m.Match(n) {
-			call.SendStream().Send(naming.GlobChildrenReplyName{n})
+			call.SendStream().Send(naming.GlobChildrenReplyName{Value: n})
 		}
 	case "level1":
 		if n := "level2"; m.Match(n) {
-			call.SendStream().Send(naming.GlobChildrenReplyName{n})
+			call.SendStream().Send(naming.GlobChildrenReplyName{Value: n})
 		}
 	default:
 		return nil
diff --git a/runtime/internal/naming/namespace/cache_test.go b/runtime/internal/naming/namespace/cache_test.go
index b3606f8..457ea85 100644
--- a/runtime/internal/naming/namespace/cache_test.go
+++ b/runtime/internal/naming/namespace/cache_test.go
@@ -22,7 +22,7 @@
 }
 
 func future(secs uint32) vdltime.Deadline {
-	return vdltime.Deadline{time.Now().Add(time.Duration(secs) * time.Second)}
+	return vdltime.Deadline{Time: time.Now().Add(time.Duration(secs) * time.Second)}
 }
 
 // TestCache tests the cache directly rather than via the namespace methods.
@@ -89,7 +89,7 @@
 func TestCacheTTL(t *testing.T) {
 	ctx, cancel := test.TestContext()
 	defer cancel()
-	before := vdltime.Deadline{time.Now()}
+	before := vdltime.Deadline{Time: time.Now()}
 	c := newTTLCache().(*ttlCache)
 	// Fill cache.
 	e := &naming.MountEntry{Servers: []naming.MountedServer{naming.MountedServer{Server: "the rain in spain", Deadline: future(3000)}}}
diff --git a/runtime/internal/naming/namespace/glob.go b/runtime/internal/naming/namespace/glob.go
index e5ca02e..ae24caf 100644
--- a/runtime/internal/naming/namespace/glob.go
+++ b/runtime/internal/naming/namespace/glob.go
@@ -180,7 +180,7 @@
 		// If no tasks are running, return.
 		if t.error != nil {
 			if !notAnMT(t.error) {
-				reply <- &naming.GlobReplyError{naming.GlobError{Name: naming.Join(prefix, t.me.Name), Error: t.error}}
+				reply <- &naming.GlobReplyError{Value: naming.GlobError{Name: naming.Join(prefix, t.me.Name), Error: t.error}}
 			}
 			inFlight--
 			continue
@@ -190,7 +190,7 @@
 		if t.er != nil {
 			x := *t.er
 			x.Name = naming.Join(prefix, x.Name)
-			reply <- &naming.GlobReplyError{x}
+			reply <- &naming.GlobReplyError{Value: x}
 			continue
 		}
 
@@ -205,7 +205,7 @@
 		if suffix.Len() == 0 && t.depth != 0 {
 			x := *t.me
 			x.Name = naming.Join(prefix, x.Name)
-			reply <- &naming.GlobReplyEntry{x}
+			reply <- &naming.GlobReplyEntry{Value: x}
 		}
 
 		// If the pattern is finished (so we're only querying about the root on the
diff --git a/runtime/internal/naming/namespace/namespace.go b/runtime/internal/naming/namespace/namespace.go
index dc8db7c..1a9f109 100644
--- a/runtime/internal/naming/namespace/namespace.go
+++ b/runtime/internal/naming/namespace/namespace.go
@@ -131,7 +131,7 @@
 func (ns *namespace) rootMountEntry(name string, opts ...naming.NamespaceOpt) (*naming.MountEntry, bool) {
 	_, name = security.SplitPatternName(naming.Clean(name))
 	e := new(naming.MountEntry)
-	deadline := vdltime.Deadline{time.Now().Add(time.Hour)} // plenty of time for a call
+	deadline := vdltime.Deadline{Time: time.Now().Add(time.Hour)} // plenty of time for a call
 	address, suffix := naming.SplitAddressName(name)
 	if len(address) == 0 {
 		e.ServesMountTable = true
diff --git a/runtime/internal/rpc/blessings_cache.go b/runtime/internal/rpc/blessings_cache.go
index a6e9d92..7b201bb 100644
--- a/runtime/internal/rpc/blessings_cache.go
+++ b/runtime/internal/rpc/blessings_cache.go
@@ -122,7 +122,7 @@
 		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 rpc.BlessingsRequest{val.id, &blessings}
+	return rpc.BlessingsRequest{Key: val.id, Blessings: &blessings}
 }
 
 // nextIdLocked creates a new id for inserting blessings. It must be called after acquiring a writer lock.
diff --git a/runtime/internal/rpc/client.go b/runtime/internal/rpc/client.go
index 26b7e91..1aad0f8 100644
--- a/runtime/internal/rpc/client.go
+++ b/runtime/internal/rpc/client.go
@@ -850,7 +850,7 @@
 		Suffix:           suffix,
 		Method:           method,
 		NumPosArgs:       uint64(len(args)),
-		Deadline:         vtime.Deadline{deadline},
+		Deadline:         vtime.Deadline{Time: deadline},
 		GrantedBlessings: fc.grantedBlessings,
 		Blessings:        blessingsRequest,
 		Discharges:       fc.discharges,
@@ -909,7 +909,10 @@
 		}
 	}
 	if id := verror.ErrorID(err); id != verror.ErrUnknown.ID {
-		return verror.IDAction{id, verror.Action(err)}, err
+		return verror.IDAction{
+			ID:     id,
+			Action: verror.Action(err),
+		}, err
 	}
 	return verror.ErrBadProtocol, err
 }
diff --git a/runtime/internal/rpc/full_test.go b/runtime/internal/rpc/full_test.go
index 9c26e2b..2da28c4 100644
--- a/runtime/internal/rpc/full_test.go
+++ b/runtime/internal/rpc/full_test.go
@@ -530,8 +530,12 @@
 			{bTwoBlessings, "mountpoint/server", O{options.AllowedServersPolicy{"root/other"}}, noErrID, ""},
 
 			// Test the ServerPublicKey option.
-			{bOther, "mountpoint/server", O{options.SkipServerEndpointAuthorization{}, options.ServerPublicKey{bOther.PublicKey()}}, noErrID, ""},
-			{bOther, "mountpoint/server", O{options.SkipServerEndpointAuthorization{}, options.ServerPublicKey{testutil.NewPrincipal("irrelevant").PublicKey()}}, verror.ErrNotTrusted, publicKeyErr},
+			{bOther, "mountpoint/server", O{options.SkipServerEndpointAuthorization{}, options.ServerPublicKey{
+				PublicKey: bOther.PublicKey(),
+			}}, noErrID, ""},
+			{bOther, "mountpoint/server", O{options.SkipServerEndpointAuthorization{}, options.ServerPublicKey{
+				PublicKey: testutil.NewPrincipal("irrelevant").PublicKey(),
+			}}, verror.ErrNotTrusted, publicKeyErr},
 
 			// Test the "paranoid" names, where the pattern is provided in the name.
 			{bServer, "__(root/server)/mountpoint/server", nil, noErrID, ""},
@@ -1736,7 +1740,7 @@
 	// to act as batman (as opposed to using the default blessing).
 	ns := tnaming.NewSimpleNamespace()
 
-	defer runServer(t, sctx, ns, "mountpoint/batman", &testServer{}, options.ServerBlessings{batman}).Shutdown()
+	defer runServer(t, sctx, ns, "mountpoint/batman", &testServer{}, options.ServerBlessings{Blessings: batman}).Shutdown()
 	defer runServer(t, sctx, ns, "mountpoint/default", &testServer{}).Shutdown()
 
 	// And finally, make an RPC and see that the client sees "batman"
@@ -2015,11 +2019,15 @@
 	defer client.Close()
 
 	// The call should succeed when the server presents the same public as the opt...
-	if _, err = client.StartCall(cctx, mountName, "Closure", nil, options.SkipServerEndpointAuthorization{}, options.ServerPublicKey{pserver.PublicKey()}); err != nil {
+	if _, err = client.StartCall(cctx, mountName, "Closure", nil, options.SkipServerEndpointAuthorization{}, options.ServerPublicKey{
+		PublicKey: pserver.PublicKey(),
+	}); err != nil {
 		t.Errorf("Expected call to succeed but got %v", err)
 	}
 	// ...but fail if they differ.
-	if _, err = client.StartCall(cctx, mountName, "Closure", nil, options.SkipServerEndpointAuthorization{}, options.ServerPublicKey{pother.PublicKey()}); verror.ErrorID(err) != verror.ErrNotTrusted.ID {
+	if _, err = client.StartCall(cctx, mountName, "Closure", nil, options.SkipServerEndpointAuthorization{}, options.ServerPublicKey{
+		PublicKey: pother.PublicKey(),
+	}); verror.ErrorID(err) != verror.ErrNotTrusted.ID {
 		t.Errorf("got %v, want %v", verror.ErrorID(err), verror.ErrNotTrusted.ID)
 	}
 }
diff --git a/runtime/internal/rpc/reserved.go b/runtime/internal/rpc/reserved.go
index c82aaa0..35adc61 100644
--- a/runtime/internal/rpc/reserved.go
+++ b/runtime/internal/rpc/reserved.go
@@ -230,7 +230,7 @@
 		if state.depth > maxRecursiveGlobDepth {
 			ctx.Errorf("rpc Glob: exceeded recursion limit (%d): %q", maxRecursiveGlobDepth, suffix)
 			subcall.Send(naming.GlobReplyError{
-				naming.GlobError{Name: state.name, Error: reserved.NewErrGlobMaxRecursionReached(ctx)},
+				Value: naming.GlobError{Name: state.name, Error: reserved.NewErrGlobMaxRecursionReached(ctx)},
 			})
 			continue
 		}
@@ -238,14 +238,14 @@
 		if err != nil {
 			ctx.VI(3).Infof("rpc Glob: Lookup failed for %q: %v", suffix, err)
 			subcall.Send(naming.GlobReplyError{
-				naming.GlobError{Name: state.name, Error: verror.Convert(verror.ErrNoExist, ctx, err)},
+				Value: naming.GlobError{Name: state.name, Error: verror.Convert(verror.ErrNoExist, ctx, err)},
 			})
 			continue
 		}
 		if obj == nil {
 			ctx.VI(3).Infof("rpc Glob: object not found for %q", suffix)
 			subcall.Send(naming.GlobReplyError{
-				naming.GlobError{Name: state.name, Error: verror.New(verror.ErrNoExist, ctx, "nil object")},
+				Value: naming.GlobError{Name: state.name, Error: verror.New(verror.ErrNoExist, ctx, "nil object")},
 			})
 			continue
 		}
@@ -263,17 +263,19 @@
 		if err != nil {
 			ctx.VI(3).Infof("rpc Glob: object for %q cannot be converted to invoker: %v", suffix, err)
 			subcall.Send(naming.GlobReplyError{
-				naming.GlobError{Name: state.name, Error: verror.Convert(verror.ErrInternal, ctx, err)},
+				Value: naming.GlobError{Name: state.name, Error: verror.Convert(verror.ErrInternal, ctx, err)},
 			})
 			continue
 		}
 		gs := invoker.Globber()
 		if gs == nil || (gs.AllGlobber == nil && gs.ChildrenGlobber == nil && gs.AllGlobberX == nil && gs.ChildrenGlobberX == nil) {
 			if state.glob.Len() == 0 {
-				subcall.Send(naming.GlobReplyEntry{naming.MountEntry{Name: state.name, IsLeaf: true}})
+				subcall.Send(naming.GlobReplyEntry{
+					Value: naming.MountEntry{Name: state.name, IsLeaf: true},
+				})
 			} else {
 				subcall.Send(naming.GlobReplyError{
-					naming.GlobError{Name: state.name, Error: reserved.NewErrGlobNotImplemented(ctx)},
+					Value: naming.GlobError{Name: state.name, Error: reserved.NewErrGlobNotImplemented(ctx)},
 				})
 			}
 			continue
@@ -304,7 +306,9 @@
 			}
 			if err := gs.AllGlobber.Glob__(ctx, &globServerCall{subcall, send}, state.glob); err != nil {
 				ctx.VI(3).Infof("rpc Glob: %q.Glob(%q) failed: %v", suffix, state.glob, err)
-				subcall.Send(naming.GlobReplyError{naming.GlobError{Name: state.name, Error: verror.Convert(verror.ErrInternal, ctx, err)}})
+				subcall.Send(naming.GlobReplyError{
+					Value: naming.GlobError{Name: state.name, Error: verror.Convert(verror.ErrInternal, ctx, err)},
+				})
 			}
 			continue
 		}
@@ -313,7 +317,9 @@
 			depth := state.depth
 			if state.glob.Len() == 0 {
 				// The glob pattern matches the current object.
-				subcall.Send(naming.GlobReplyEntry{naming.MountEntry{Name: state.name}})
+				subcall.Send(naming.GlobReplyEntry{
+					Value: naming.MountEntry{Name: state.name},
+				})
 				if state.glob.Recursive() {
 					// This is a recursive pattern. Make sure we don't recurse forever.
 					depth++
@@ -342,18 +348,22 @@
 					queue = append(queue, gState{next, tail, depth})
 				case naming.GlobChildrenReplyError:
 					v.Value.Name = naming.Join(state.name, v.Value.Name)
-					return subcall.Send(naming.GlobReplyError{v.Value})
+					return subcall.Send(naming.GlobReplyError{Value: v.Value})
 				}
 				return nil
 			}
 			if err := gs.ChildrenGlobber.GlobChildren__(ctx, &globChildrenServerCall{subcall, send}, matcher); err != nil {
-				subcall.Send(naming.GlobReplyError{naming.GlobError{Name: state.name, Error: verror.Convert(verror.ErrInternal, ctx, err)}})
+				subcall.Send(naming.GlobReplyError{
+					Value: naming.GlobError{Name: state.name, Error: verror.Convert(verror.ErrInternal, ctx, err)},
+				})
 			}
 			continue
 		}
 	}
 	if someMatchesOmitted {
-		call.Send(naming.GlobReplyError{naming.GlobError{Error: reserved.NewErrGlobMatchesOmitted(ctx)}})
+		call.Send(naming.GlobReplyError{
+			Value: naming.GlobError{Error: reserved.NewErrGlobMatchesOmitted(ctx)},
+		})
 	}
 	return nil
 }
diff --git a/runtime/internal/rpc/server.go b/runtime/internal/rpc/server.go
index 1e30282..9f97089 100644
--- a/runtime/internal/rpc/server.go
+++ b/runtime/internal/rpc/server.go
@@ -288,7 +288,11 @@
 	}
 	status.Proxies = make([]rpc.ProxyStatus, 0, len(s.proxies))
 	for k, v := range s.proxies {
-		status.Proxies = append(status.Proxies, rpc.ProxyStatus{k, v.endpoint, v.err})
+		status.Proxies = append(status.Proxies, rpc.ProxyStatus{
+			Proxy:    k,
+			Endpoint: v.endpoint,
+			Error:    v.err,
+		})
 	}
 	return status
 }
diff --git a/runtime/internal/rpc/server_authorizer_test.go b/runtime/internal/rpc/server_authorizer_test.go
index 68afdec..be56861 100644
--- a/runtime/internal/rpc/server_authorizer_test.go
+++ b/runtime/internal/rpc/server_authorizer_test.go
@@ -94,7 +94,7 @@
 			// Only otherAli is authorized (since only pother's public key is
 			// authorized)
 			[]string{"ali"},
-			newServerAuthorizer("", options.ServerPublicKey{pother.PublicKey()}),
+			newServerAuthorizer("", options.ServerPublicKey{PublicKey: pother.PublicKey()}),
 			[]security.Blessings{otherAli},
 			[]security.Blessings{ali, bob, che},
 		},
diff --git a/runtime/internal/rpc/stream/benchmark/dial_vc.go b/runtime/internal/rpc/stream/benchmark/dial_vc.go
index e0cbe02..c376783 100644
--- a/runtime/internal/rpc/stream/benchmark/dial_vc.go
+++ b/runtime/internal/rpc/stream/benchmark/dial_vc.go
@@ -47,7 +47,7 @@
 	}
 
 	// Create one VC to prevent the underlying VIF from being closed.
-	_, err = client.Dial(ctx, ep, vc.IdleTimeout{0})
+	_, err = client.Dial(ctx, ep, vc.IdleTimeout{Duration: 0})
 	if err != nil {
 		b.Fatal(err)
 	}
diff --git a/runtime/internal/rpc/stream/crypto/crypto_test.go b/runtime/internal/rpc/stream/crypto/crypto_test.go
index ed27061..b44af89 100644
--- a/runtime/internal/rpc/stream/crypto/crypto_test.go
+++ b/runtime/internal/rpc/stream/crypto/crypto_test.go
@@ -38,7 +38,7 @@
 func TestNull(t *testing.T) {
 	crypter := NewNullCrypter()
 	quickTest(t, crypter, crypter)
-	crypter.String() // Only to test that String does not crash.
+	_ = crypter.String() // Only to test that String does not crash.
 }
 
 func TestNullWithChannelBinding(t *testing.T) {
@@ -48,13 +48,13 @@
 	if got := crypter.ChannelBinding(); !bytes.Equal(cb, got) {
 		t.Errorf("Unexpected channel binding; got %q, want %q", got, cb)
 	}
-	crypter.String() // Only to test that String does not crash.
+	_ = crypter.String() // Only to test that String does not crash.
 }
 
 func testSimple(t *testing.T, c1, c2 Crypter) {
 	// Execute String just to check that it does not crash.
-	c1.String()
-	c2.String()
+	_ = c1.String()
+	_ = c2.String()
 	if t.Failed() {
 		return
 	}
diff --git a/runtime/internal/rpc/stream/manager/listener.go b/runtime/internal/rpc/stream/manager/listener.go
index a25c514..64a7819 100644
--- a/runtime/internal/rpc/stream/manager/listener.go
+++ b/runtime/internal/rpc/stream/manager/listener.go
@@ -109,7 +109,7 @@
 	// Set the default idle timeout for VC. But for "unixfd", we do not set
 	// the idle timeout since we cannot reconnect it.
 	if ln.netLn.Addr().Network() != "unixfd" {
-		opts = append([]stream.ListenerOpt{vc.IdleTimeout{defaultIdleTimeout}}, opts...)
+		opts = append([]stream.ListenerOpt{vc.IdleTimeout{Duration: defaultIdleTimeout}}, opts...)
 	}
 
 	ln.netLoop.Add(1)
@@ -171,7 +171,7 @@
 
 func (ln *netListener) netAcceptLoop(blessings security.Blessings, opts []stream.ListenerOpt) {
 	defer ln.netLoop.Done()
-	opts = append([]stream.ListenerOpt{vc.StartTimeout{defaultStartTimeout}}, opts...)
+	opts = append([]stream.ListenerOpt{vc.StartTimeout{Duration: defaultStartTimeout}}, opts...)
 	for {
 		conn, err := ln.netLn.Accept()
 		if isTemporaryError(err) {
@@ -319,7 +319,7 @@
 		return nil, nil, err
 	}
 	// Prepend the default idle timeout for VC.
-	opts = append([]stream.ListenerOpt{vc.IdleTimeout{defaultIdleTimeout}}, opts...)
+	opts = append([]stream.ListenerOpt{vc.IdleTimeout{Duration: defaultIdleTimeout}}, opts...)
 	if err := vf.StartAccepting(opts...); err != nil {
 		return nil, nil, verror.New(stream.ErrNetwork, nil, verror.New(errAlreadyConnected, nil, vf, err))
 	}
diff --git a/runtime/internal/rpc/stream/manager/manager.go b/runtime/internal/rpc/stream/manager/manager.go
index 1b63a9f..7b3a7ad 100644
--- a/runtime/internal/rpc/stream/manager/manager.go
+++ b/runtime/internal/rpc/stream/manager/manager.go
@@ -169,7 +169,7 @@
 		return nil, err
 	}
 
-	opts = append([]stream.VCOpt{vc.StartTimeout{defaultStartTimeout}}, opts...)
+	opts = append([]stream.VCOpt{vc.StartTimeout{Duration: defaultStartTimeout}}, opts...)
 	vf, err = vif.InternalNewDialedVIF(ctx, conn, m.rid, nil, m.deleteVIF, opts...)
 	if err != nil {
 		conn.Close()
@@ -187,7 +187,7 @@
 		if err != nil {
 			return nil, err
 		}
-		opts = append([]stream.VCOpt{vc.IdleTimeout{defaultIdleTimeout}}, opts...)
+		opts = append([]stream.VCOpt{vc.IdleTimeout{Duration: defaultIdleTimeout}}, opts...)
 		vc, err := vf.Dial(ctx, remote, opts...)
 		if !retry || verror.ErrorID(err) != stream.ErrAborted.ID {
 			return vc, err
diff --git a/runtime/internal/rpc/stream/manager/manager_test.go b/runtime/internal/rpc/stream/manager/manager_test.go
index 622c7af..0d050fd 100644
--- a/runtime/internal/rpc/stream/manager/manager_test.go
+++ b/runtime/internal/rpc/stream/manager/manager_test.go
@@ -427,7 +427,7 @@
 	var (
 		server  = InternalNew(ctx, naming.FixedRoutingID(0x55555555))
 		pserver = testutil.NewPrincipal("server")
-		lopts   = []stream.ListenerOpt{vc.StartTimeout{startTime}}
+		lopts   = []stream.ListenerOpt{vc.StartTimeout{Duration: startTime}}
 	)
 
 	sctx, _ := v23.WithPrincipal(ctx, pserver)
@@ -489,9 +489,9 @@
 	)
 
 	if testServer {
-		lopts = []stream.ListenerOpt{vc.IdleTimeout{idleTime}}
+		lopts = []stream.ListenerOpt{vc.IdleTimeout{Duration: idleTime}}
 	} else {
-		opts = []stream.VCOpt{vc.IdleTimeout{idleTime}}
+		opts = []stream.VCOpt{vc.IdleTimeout{Duration: idleTime}}
 	}
 
 	// Pause the idle timers.
diff --git a/runtime/internal/rpc/stream/proxy/proxy_test.go b/runtime/internal/rpc/stream/proxy/proxy_test.go
index a16a51f..23fc033 100644
--- a/runtime/internal/rpc/stream/proxy/proxy_test.go
+++ b/runtime/internal/rpc/stream/proxy/proxy_test.go
@@ -368,9 +368,9 @@
 		lopts []stream.ListenerOpt
 	)
 	if testServer {
-		lopts = []stream.ListenerOpt{vc.IdleTimeout{idleTime}}
+		lopts = []stream.ListenerOpt{vc.IdleTimeout{Duration: idleTime}}
 	} else {
-		opts = []stream.VCOpt{vc.IdleTimeout{idleTime}}
+		opts = []stream.VCOpt{vc.IdleTimeout{Duration: idleTime}}
 	}
 	cctx, _ := v23.WithPrincipal(ctx, pclient)
 	sctx, _ := v23.WithPrincipal(ctx, pserver)
diff --git a/runtime/internal/rpc/stream/vif/vif.go b/runtime/internal/rpc/stream/vif/vif.go
index d1b1b92..86facf0 100644
--- a/runtime/internal/rpc/stream/vif/vif.go
+++ b/runtime/internal/rpc/stream/vif/vif.go
@@ -360,7 +360,7 @@
 					Versions: iversion.Range{Min: preauth.Version, Max: preauth.Version},
 					Options: []message.SetupOption{
 						&message.NaclBox{PublicKey: *pubKey},
-						&message.UseVIFAuthentication{sigPreauth},
+						&message.UseVIFAuthentication{Signature: sigPreauth},
 					},
 				},
 			})
diff --git a/runtime/internal/rpc/stream/vif/vif_test.go b/runtime/internal/rpc/stream/vif/vif_test.go
index 908a711..a67b396 100644
--- a/runtime/internal/rpc/stream/vif/vif_test.go
+++ b/runtime/internal/rpc/stream/vif/vif_test.go
@@ -440,7 +440,11 @@
 			vfStartTime, remoteStartTime = remoteStartTime, vfStartTime
 		}
 		var err error
-		vf, remote, err = New(nil, nil, cctx, sctx, notifyFunc, notifyFunc, []stream.VCOpt{vc.StartTimeout{vfStartTime}}, []stream.ListenerOpt{vc.StartTimeout{remoteStartTime}})
+		vf, remote, err = New(nil, nil, cctx, sctx, notifyFunc, notifyFunc, []stream.VCOpt{vc.StartTimeout{
+			Duration: vfStartTime,
+		}}, []stream.ListenerOpt{vc.StartTimeout{
+			Duration: remoteStartTime,
+		}})
 		if err != nil {
 			t.Fatal(err)
 		}
@@ -510,7 +514,7 @@
 	newVC := func(vf, remote *vif.VIF) (VC stream.VC, ln stream.Listener, remoteVC stream.Connector, triggerTimers func()) {
 		triggerTimers = vif.SetFakeTimers()
 		var err error
-		VC, remoteVC, err = createVC(cctx, vf, remote, makeEP(0x10), vc.IdleTimeout{idleTime})
+		VC, remoteVC, err = createVC(cctx, vf, remote, makeEP(0x10), vc.IdleTimeout{Duration: idleTime})
 		if err != nil {
 			t.Fatal(err)
 		}
@@ -539,7 +543,7 @@
 	// Same as above, but with multiple VCs.
 	vf, remote = newVIF()
 	triggerTimers = vif.SetFakeTimers()
-	if _, _, err := createNVCs(cctx, vf, remote, 0x10, 5, vc.IdleTimeout{idleTime}); err != nil {
+	if _, _, err := createNVCs(cctx, vf, remote, 0x10, 5, vc.IdleTimeout{Duration: idleTime}); err != nil {
 		t.Fatal(err)
 	}
 	triggerTimers()
@@ -713,15 +717,15 @@
 // that overlapping ranges work properly, but non-overlapping ranges generate
 // errors.
 func TestIncompatibleVersions(t *testing.T) {
-	unknown := &iversion.Range{version.UnknownRPCVersion, version.UnknownRPCVersion}
+	unknown := &iversion.Range{Min: version.UnknownRPCVersion, Max: version.UnknownRPCVersion}
 	tests := []versionTestCase{
-		{&iversion.Range{2, 2}, &iversion.Range{2, 2}, &iversion.Range{2, 2}, false, false},
-		{&iversion.Range{2, 3}, &iversion.Range{3, 5}, &iversion.Range{3, 5}, false, false},
-		{&iversion.Range{2, 3}, &iversion.Range{3, 5}, unknown, false, false},
+		{&iversion.Range{Min: 2, Max: 2}, &iversion.Range{Min: 2, Max: 2}, &iversion.Range{Min: 2, Max: 2}, false, false},
+		{&iversion.Range{Min: 2, Max: 3}, &iversion.Range{Min: 3, Max: 5}, &iversion.Range{Min: 3, Max: 5}, false, false},
+		{&iversion.Range{Min: 2, Max: 3}, &iversion.Range{Min: 3, Max: 5}, unknown, false, false},
 
 		// VIF error since there are no versions in common.
-		{&iversion.Range{2, 3}, &iversion.Range{4, 5}, &iversion.Range{4, 5}, true, true},
-		{&iversion.Range{2, 3}, &iversion.Range{4, 5}, unknown, true, true},
+		{&iversion.Range{Min: 2, Max: 3}, &iversion.Range{Min: 4, Max: 5}, &iversion.Range{Min: 4, Max: 5}, true, true},
+		{&iversion.Range{Min: 2, Max: 3}, &iversion.Range{Min: 4, Max: 5}, unknown, true, true},
 	}
 
 	for _, tc := range tests {
diff --git a/runtime/internal/rpc/test/client_test.go b/runtime/internal/rpc/test/client_test.go
index 69d70e9..dcc54ff 100644
--- a/runtime/internal/rpc/test/client_test.go
+++ b/runtime/internal/rpc/test/client_test.go
@@ -279,8 +279,8 @@
 	}
 	logErr("no context", err)
 
-	p1 := options.ServerPublicKey{testutil.NewPrincipal().PublicKey()}
-	p2 := options.ServerPublicKey{testutil.NewPrincipal().PublicKey()}
+	p1 := options.ServerPublicKey{PublicKey: testutil.NewPrincipal().PublicKey()}
+	p2 := options.ServerPublicKey{PublicKey: testutil.NewPrincipal().PublicKey()}
 	_, err = client.StartCall(ctx, "noname", "nomethod", nil, p1, p2)
 	if verror.ErrorID(err) != verror.ErrBadArg.ID {
 		t.Fatalf("wrong error: %s", err)
diff --git a/runtime/internal/rpc/test/glob_test.go b/runtime/internal/rpc/test/glob_test.go
index a60f0d4..d881b67 100644
--- a/runtime/internal/rpc/test/glob_test.go
+++ b/runtime/internal/rpc/test/glob_test.go
@@ -297,7 +297,7 @@
 
 func (o *globObject) globLoop(call rpc.GlobServerCall, name string, g *glob.Glob, n *node) {
 	if g.Len() == 0 {
-		call.SendStream().Send(naming.GlobReplyEntry{naming.MountEntry{Name: name}})
+		call.SendStream().Send(naming.GlobReplyEntry{Value: naming.MountEntry{Name: name}})
 	}
 	if g.Empty() {
 		return
@@ -318,7 +318,7 @@
 	sender := call.SendStream()
 	for child, _ := range o.n.children {
 		if m.Match(child) {
-			sender.Send(naming.GlobChildrenReplyName{child})
+			sender.Send(naming.GlobChildrenReplyName{Value: child})
 		}
 	}
 	return nil
diff --git a/runtime/internal/rpc/test/proxy_test.go b/runtime/internal/rpc/test/proxy_test.go
index e7d365a..46c5078 100644
--- a/runtime/internal/rpc/test/proxy_test.go
+++ b/runtime/internal/rpc/test/proxy_test.go
@@ -335,7 +335,7 @@
 	// Additionally, any server authorizaton options must only apply to the end server
 	// and not the proxy.
 	const expected = `method:"Echo",suffix:"suffix",arg:"batman"`
-	if result, err := makeCall(options.ServerPublicKey{serverKey}); result != expected || err != nil {
+	if result, err := makeCall(options.ServerPublicKey{PublicKey: serverKey}); result != expected || err != nil {
 		t.Fatalf("Got (%v, %v) want (%v, nil)", result, err, expected)
 	}
 
diff --git a/runtime/internal/rt/ipc_test.go b/runtime/internal/rt/ipc_test.go
index 29c8153..23d320b 100644
--- a/runtime/internal/rt/ipc_test.go
+++ b/runtime/internal/rt/ipc_test.go
@@ -172,7 +172,7 @@
 		p    = v23.GetPrincipal(ctx)
 		b1   = mkBlessings(p.BlessSelf("dev.v.io/users/foo@bar.com/devices/phone/applications/app"))
 		b2   = mkBlessings(p.BlessSelf("otherblessing"))
-		bopt = options.ServerBlessings{union(b1, b2)}
+		bopt = options.ServerBlessings{Blessings: union(b1, b2)}
 
 		tests = []struct {
 			opts      []rpc.ServerOpt
diff --git a/runtime/internal/rt/mgmt.go b/runtime/internal/rt/mgmt.go
index 8893016..28c25cf 100644
--- a/runtime/internal/rt/mgmt.go
+++ b/runtime/internal/rt/mgmt.go
@@ -55,7 +55,7 @@
 		// Grab the blessing from our blessing store that the parent
 		// told us to use so they can talk to us.
 		serverBlessing := rt.GetPrincipal(ctx).BlessingStore().ForPeer(parentPeerPattern)
-		serverOpts = append(serverOpts, options.ServerBlessings{serverBlessing})
+		serverOpts = append(serverOpts, options.ServerBlessings{Blessings: serverBlessing})
 	}
 	server, err := rt.NewServer(ctx, serverOpts...)
 	if err != nil {
diff --git a/runtime/internal/rt/mgmt_test.go b/runtime/internal/rt/mgmt_test.go
index 2c59c05..ad1f650 100644
--- a/runtime/internal/rt/mgmt_test.go
+++ b/runtime/internal/rt/mgmt_test.go
@@ -161,7 +161,7 @@
 }
 
 func checkProgress(t *testing.T, ch <-chan v23.Task, progress, goal int32) {
-	if want, got := (v23.Task{progress, goal}), <-ch; !reflect.DeepEqual(want, got) {
+	if want, got := (v23.Task{Progress: progress, Goal: goal}), <-ch; !reflect.DeepEqual(want, got) {
 		t.Errorf("Unexpected progress: want %+v, got %+v", want, got)
 	}
 }
diff --git a/runtime/internal/rt/security.go b/runtime/internal/rt/security.go
index 5e439b1..1b8d6cf 100644
--- a/runtime/internal/rt/security.go
+++ b/runtime/internal/rt/security.go
@@ -20,6 +20,7 @@
 	"v.io/x/ref/lib/mgmt"
 	vsecurity "v.io/x/ref/lib/security"
 	inaming "v.io/x/ref/runtime/internal/naming"
+	"v.io/x/ref/services/agent"
 	"v.io/x/ref/services/agent/agentlib"
 )
 
@@ -48,6 +49,11 @@
 		return principal, nil, func() {}, nil
 	}
 	// Use credentials stored in the agent.
+	if principal, err := ipcAgent(); err != nil {
+		return nil, nil, nil, err
+	} else if principal != nil {
+		return principal, nil, func() { principal.Close() }, nil
+	}
 	if ep, _, err := agentEP(); err != nil {
 		return nil, nil, nil, err
 	} else if ep != nil {
@@ -98,6 +104,24 @@
 	return ifd, nil
 }
 
+func ipcAgent() (agent.Principal, error) {
+	handle, err := exec.GetChildHandle()
+	if err != nil && verror.ErrorID(err) != exec.ErrNoVersion.ID {
+		return nil, err
+	}
+	var path string
+	if handle != nil {
+		// We were started by a parent (presumably, device manager).
+		path, _ = handle.Config.Get(mgmt.SecurityAgentPathConfigKey)
+	} else {
+		path = os.Getenv(ref.EnvAgentPath)
+	}
+	if path == "" {
+		return nil, nil
+	}
+	return agentlib.NewAgentPrincipalX(path)
+}
+
 // agentEP returns an Endpoint to be used to communicate with
 // the security agent if the current process has been configured to use the
 // agent.
diff --git a/services/agent/agentlib/client.go b/services/agent/agentlib/client.go
index 3f6f82c..1d72439 100644
--- a/services/agent/agentlib/client.go
+++ b/services/agent/agentlib/client.go
@@ -8,9 +8,11 @@
 
 import (
 	"fmt"
+	"io"
 	"net"
 	"os"
 	"strconv"
+	"sync"
 	"syscall"
 
 	"v.io/v23/context"
@@ -21,7 +23,9 @@
 	"v.io/v23/verror"
 	"v.io/v23/vtrace"
 	"v.io/x/ref/internal/logger"
+	"v.io/x/ref/services/agent"
 	"v.io/x/ref/services/agent/internal/cache"
+	"v.io/x/ref/services/agent/internal/ipc"
 	"v.io/x/ref/services/agent/internal/unixfd"
 )
 
@@ -38,13 +42,50 @@
 	key    security.PublicKey
 }
 
-type caller struct {
+type caller interface {
+	call(name string, results []interface{}, args ...interface{}) error
+	io.Closer
+}
+
+type ipcCaller struct {
+	conn  *ipc.IPCConn
+	flush func()
+	mu    sync.Mutex
+}
+
+func (i *ipcCaller) call(name string, results []interface{}, args ...interface{}) error {
+	return i.conn.Call(name, args, results...)
+}
+
+func (i *ipcCaller) Close() error {
+	i.conn.Close()
+	return nil
+}
+
+func (i *ipcCaller) FlushAllCaches() error {
+	var flush func()
+	i.mu.Lock()
+	flush = i.flush
+	i.mu.Unlock()
+	if flush != nil {
+		flush()
+	}
+	return nil
+}
+
+type vrpcCaller struct {
 	ctx    *context.T
 	client rpc.Client
 	name   string
+	cancel func()
 }
 
-func (c *caller) call(name string, results []interface{}, args ...interface{}) error {
+func (c *vrpcCaller) Close() error {
+	c.cancel()
+	return nil
+}
+
+func (c *vrpcCaller) call(name string, results []interface{}, args ...interface{}) error {
 	call, err := c.startCall(name, args...)
 	if err != nil {
 		return err
@@ -55,7 +96,7 @@
 	return nil
 }
 
-func (c *caller) startCall(name string, args ...interface{}) (rpc.ClientCall, error) {
+func (c *vrpcCaller) startCall(name string, args ...interface{}) (rpc.ClientCall, error) {
 	ctx, _ := vtrace.WithNewTrace(c.ctx)
 	// SecurityNone is safe here since we're using anonymous unix sockets.
 	return c.client.StartCall(ctx, c.name, name, args, options.SecurityNone, options.NoResolve{})
@@ -65,6 +106,41 @@
 	return inputs
 }
 
+func newUncachedPrincipalX(path string) (*client, error) {
+	caller := new(ipcCaller)
+	i := ipc.NewIPC()
+	i.Serve(caller)
+	conn, err := i.Connect(path)
+	if err != nil {
+		return nil, err
+	}
+	caller.conn = conn
+	agent := &client{caller: caller}
+	if err := agent.fetchPublicKey(); err != nil {
+		return nil, err
+	}
+	return agent, nil
+}
+
+// NewAgentPrincipal returns a security.Pricipal using the PrivateKey held in a remote agent process.
+// 'path' is the path to the agent socket, typically obtained from
+// os.GetEnv(envvar.AgentAddress).
+func NewAgentPrincipalX(path string) (agent.Principal, error) {
+	p, err := newUncachedPrincipalX(path)
+	if err != nil {
+		return nil, err
+	}
+	cached, flush, err := cache.NewCachedPrincipalX(p)
+	if err != nil {
+		return nil, err
+	}
+	caller := p.caller.(*ipcCaller)
+	caller.mu.Lock()
+	caller.flush = flush
+	caller.mu.Unlock()
+	return cached, nil
+}
+
 // NewAgentPrincipal returns a security.Pricipal using the PrivateKey held in a remote agent process.
 // 'endpoint' is the endpoint for connecting to the agent, typically obtained from
 // os.GetEnv(envvar.AgentEndpoint).
@@ -75,11 +151,12 @@
 	if err != nil {
 		return p, err
 	}
-	call, callErr := p.caller.startCall("NotifyWhenChanged")
+	caller := p.caller.(*vrpcCaller)
+	call, callErr := caller.startCall("NotifyWhenChanged")
 	if callErr != nil {
 		return nil, callErr
 	}
-	return cache.NewCachedPrincipal(p.caller.ctx, p, call)
+	return cache.NewCachedPrincipal(caller.ctx, p, call)
 }
 func newUncachedPrincipal(ctx *context.T, ep naming.Endpoint, insecureClient rpc.Client) (*client, error) {
 	// This isn't a real vanadium endpoint. It contains the vanadium version
@@ -112,10 +189,12 @@
 	if err != nil {
 		return nil, err
 	}
-	caller := caller{
+	ctx, cancel := context.WithCancel(ctx)
+	caller := &vrpcCaller{
 		client: insecureClient,
 		name:   naming.JoinAddressName(agentEndpoint("unixfd", addr.String()), ""),
 		ctx:    ctx,
+		cancel: cancel,
 	}
 	agent := &client{caller: caller}
 	if err := agent.fetchPublicKey(); err != nil {
@@ -124,6 +203,10 @@
 	return agent, nil
 }
 
+func (c *client) Close() error {
+	return c.caller.Close()
+}
+
 func (c *client) fetchPublicKey() (err error) {
 	var b []byte
 	if err = c.caller.call("PublicKey", results(&b)); err != nil {
diff --git a/services/agent/agentlib/peer_test.go b/services/agent/agentlib/peer_test.go
index 99a86a1..3d5ceeb 100644
--- a/services/agent/agentlib/peer_test.go
+++ b/services/agent/agentlib/peer_test.go
@@ -14,3 +14,7 @@
 func NewUncachedPrincipal(ctx *context.T, endpoint naming.Endpoint, insecureClient rpc.Client) (security.Principal, error) {
 	return newUncachedPrincipal(ctx, endpoint, insecureClient)
 }
+
+func NewUncachedPrincipalX(path string) (security.Principal, error) {
+	return newUncachedPrincipalX(path)
+}
diff --git a/services/agent/internal/cache/cache.go b/services/agent/internal/cache/cache.go
index 29a518c..f4500a8 100644
--- a/services/agent/internal/cache/cache.go
+++ b/services/agent/internal/cache/cache.go
@@ -12,6 +12,8 @@
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
+	"v.io/x/ref/internal/logger"
+	"v.io/x/ref/services/agent"
 	"v.io/x/ref/services/agent/internal/lru"
 )
 
@@ -30,7 +32,6 @@
 type cachedRoots struct {
 	mu    *sync.RWMutex
 	impl  security.BlessingRoots
-	ctx   *context.T
 	cache map[string][]security.BlessingPattern // GUARDED_BY(mu)
 
 	// TODO(ataly): Get rid of the following fields once all agents have been
@@ -39,8 +40,8 @@
 	negative   *lru.Cache // key + blessing -> error
 }
 
-func newCachedRoots(ctx *context.T, impl security.BlessingRoots, mu *sync.RWMutex) (*cachedRoots, error) {
-	roots := &cachedRoots{mu: mu, impl: impl, ctx: ctx}
+func newCachedRoots(impl security.BlessingRoots, mu *sync.RWMutex) (*cachedRoots, error) {
+	roots := &cachedRoots{mu: mu, impl: impl}
 	roots.flush()
 	if err := roots.fetchAndCacheRoots(); err != nil {
 		return nil, err
@@ -126,7 +127,7 @@
 	if !cacheExists {
 		r.mu.Lock()
 		if err := r.fetchAndCacheRoots(); err != nil {
-			r.ctx.Errorf("failed to cache roots: %v", err)
+			logger.Global().Errorf("failed to cache roots: %v", err)
 			r.mu.Unlock()
 			return nil
 		}
@@ -177,7 +178,7 @@
 	for keyStr, patterns := range r.cache {
 		key, err := security.UnmarshalPublicKey([]byte(keyStr))
 		if err != nil {
-			r.ctx.Errorf("security.UnmarshalPublicKey(%v) returned error: %v", []byte(keyStr), err)
+			logger.Global().Errorf("security.UnmarshalPublicKey(%v) returned error: %v", []byte(keyStr), err)
 			return nil
 		}
 		for _, p := range patterns {
@@ -219,7 +220,6 @@
 	mu     *sync.RWMutex
 	key    security.PublicKey
 	def    security.Blessings
-	ctx    *context.T
 	hasDef bool
 	peers  map[security.BlessingPattern]security.Blessings
 	impl   security.BlessingStore
@@ -266,7 +266,7 @@
 			if union, err := security.UnionOfBlessings(ret, b); err == nil {
 				ret = union
 			} else {
-				s.ctx.Errorf("UnionOfBlessings(%v, %v) failed: %v, dropping the latter from BlessingStore.ForPeers(%v)", ret, b, err, peerBlessings)
+				logger.Global().Errorf("UnionOfBlessings(%v, %v) failed: %v, dropping the latter from BlessingStore.ForPeers(%v)", ret, b, err, peerBlessings)
 			}
 		}
 	}
@@ -341,7 +341,7 @@
 // wraps over another implementation and adds caching.
 type cachedPrincipal struct {
 	cache security.Principal
-	/* impl */ security.Principal
+	/* impl */ agent.Principal
 }
 
 func (p *cachedPrincipal) BlessingsByName(pattern security.BlessingPattern) []security.Blessings {
@@ -364,6 +364,10 @@
 	return p.cache.AddToRoots(blessings)
 }
 
+func (p *cachedPrincipal) Close() error {
+	return p.Principal.Close()
+}
+
 type dummySigner struct {
 	key security.PublicKey
 }
@@ -377,9 +381,32 @@
 	return s.key
 }
 
-func NewCachedPrincipal(ctx *context.T, impl security.Principal, call rpc.ClientCall) (p security.Principal, err error) {
+func NewCachedPrincipal(ctx *context.T, impl agent.Principal, call rpc.ClientCall) (p agent.Principal, err error) {
+	p, flush, err := NewCachedPrincipalX(impl)
+
+	if err == nil {
+		go func() {
+			var x bool
+			for {
+				if recvErr := call.Recv(&x); recvErr != nil {
+					if ctx.Err() != context.Canceled {
+						logger.Global().Errorf("Error from agent: %v", recvErr)
+					}
+					flush()
+					call.Finish()
+					return
+				}
+				flush()
+			}
+		}()
+	}
+
+	return
+}
+
+func NewCachedPrincipalX(impl agent.Principal) (p agent.Principal, flush func(), err error) {
 	var mu sync.RWMutex
-	cachedRoots, err := newCachedRoots(ctx, impl.Roots(), &mu)
+	cachedRoots, err := newCachedRoots(impl.Roots(), &mu)
 	if err != nil {
 		return
 	}
@@ -387,34 +414,19 @@
 		mu:   &mu,
 		key:  impl.PublicKey(),
 		impl: impl.BlessingStore(),
-		ctx:  ctx,
 	}
-	flush := func() {
+	flush = func() {
 		defer mu.Unlock()
 		mu.Lock()
 		cachedRoots.flush()
 		cachedStore.flush()
 	}
-	p, err = security.CreatePrincipal(dummySigner{impl.PublicKey()}, cachedStore, cachedRoots)
+	sp, err := security.CreatePrincipal(dummySigner{impl.PublicKey()}, cachedStore, cachedRoots)
 	if err != nil {
 		return
 	}
 
-	go func() {
-		var x bool
-		for {
-			if recvErr := call.Recv(&x); recvErr != nil {
-				if ctx.Err() != context.Canceled {
-					ctx.Errorf("Error from agent: %v", recvErr)
-				}
-				flush()
-				call.Finish()
-				return
-			}
-			flush()
-		}
-	}()
-	p = &cachedPrincipal{p, impl}
+	p = &cachedPrincipal{sp, impl}
 	return
 }
 
diff --git a/services/agent/internal/cache/cache_test.go b/services/agent/internal/cache/cache_test.go
index b6b53d3..e0c2193 100644
--- a/services/agent/internal/cache/cache_test.go
+++ b/services/agent/internal/cache/cache_test.go
@@ -22,7 +22,7 @@
 	ctx = context.WithLogger(ctx, logger.Global())
 	p := testutil.NewPrincipal()
 	impl := p.Roots()
-	roots, err := newCachedRoots(ctx, impl, &mu)
+	roots, err := newCachedRoots(impl, &mu)
 	if err != nil {
 		panic(err)
 	}
diff --git a/services/agent/internal/ipc/ipc.go b/services/agent/internal/ipc/ipc.go
index 000d716..ca1bd9d 100644
--- a/services/agent/internal/ipc/ipc.go
+++ b/services/agent/internal/ipc/ipc.go
@@ -291,7 +291,7 @@
 
 func (ipc *IPC) startCall(c *IPCConn, method string, args []interface{}, results []interface{}) (ch chan error) {
 	ch = make(chan error, 1)
-	header := agent.RpcMessageReq{agent.RpcRequest{Method: method, NumArgs: uint32(len(args))}}
+	header := agent.RpcMessageReq{Value: agent.RpcRequest{Method: method, NumArgs: uint32(len(args))}}
 	shouldClose := false
 	defer func() {
 		// Only close c after we unlock it.
diff --git a/services/agent/internal/ipc/ipc_test.go b/services/agent/internal/ipc/ipc_test.go
index 4c553eb..39d3ba0 100644
--- a/services/agent/internal/ipc/ipc_test.go
+++ b/services/agent/internal/ipc/ipc_test.go
@@ -123,7 +123,7 @@
 		t.Fatal(err)
 	}
 
-	if err = enc.Encode(agent.RpcMessageReq{agent.RpcRequest{Id: 0, Method: "foo", NumArgs: 0}}); err != nil {
+	if err = enc.Encode(agent.RpcMessageReq{Value: agent.RpcRequest{Id: 0, Method: "foo", NumArgs: 0}}); err != nil {
 		t.Fatal(err)
 	}
 	var response agent.RpcMessage
@@ -153,7 +153,7 @@
 		t.Fatal(err)
 	}
 
-	if err = enc.Encode(agent.RpcMessageReq{agent.RpcRequest{Id: 0, Method: "foo", NumArgs: 0}}); err != nil {
+	if err = enc.Encode(agent.RpcMessageReq{Value: agent.RpcRequest{Id: 0, Method: "foo", NumArgs: 0}}); err != nil {
 		if err != io.EOF {
 			t.Fatal(err)
 		}
@@ -185,7 +185,7 @@
 		t.Fatal(err)
 	}
 
-	if err = enc.Encode(agent.RpcMessageReq{agent.RpcRequest{Id: 0, Method: "foo", NumArgs: 0}}); err != nil {
+	if err = enc.Encode(agent.RpcMessageReq{Value: agent.RpcRequest{Id: 0, Method: "foo", NumArgs: 0}}); err != nil {
 		if err != io.EOF {
 			t.Fatal(err)
 		}
diff --git a/services/agent/keymgr/client.go b/services/agent/keymgr/client.go
index 01098de..ae837dd 100644
--- a/services/agent/keymgr/client.go
+++ b/services/agent/keymgr/client.go
@@ -14,6 +14,8 @@
 
 	"v.io/v23/context"
 	"v.io/v23/verror"
+	"v.io/x/ref/services/agent"
+	"v.io/x/ref/services/agent/internal/ipc"
 	"v.io/x/ref/services/agent/internal/server"
 	"v.io/x/ref/services/agent/internal/unixfd"
 )
@@ -30,6 +32,10 @@
 
 const defaultManagerSocket = 4
 
+type KeyManager struct {
+	conn *ipc.IPCConn
+}
+
 type Agent struct {
 	conn *net.UnixConn // Guarded by mu
 	mu   sync.Mutex
@@ -40,6 +46,17 @@
 	return newAgent(defaultManagerSocket)
 }
 
+// NewKeyManager returns a client connected to the specified KeyManager.
+func NewKeyManager(path string) (agent.KeyManager, error) {
+	i := ipc.NewIPC()
+	conn, err := i.Connect(path)
+	var m *KeyManager
+	if err == nil {
+		m = &KeyManager{conn}
+	}
+	return m, err
+}
+
 func NewLocalAgent(ctx *context.T, path string, passphrase []byte) (*Agent, error) {
 	file, err := server.RunKeyManager(ctx, path, passphrase)
 	if err != nil {
@@ -79,19 +96,27 @@
 	if err != nil {
 		return nil, nil, err
 	}
-	buf := make([]byte, server.PrincipalHandleByteSize)
+	buf := make([]byte, agent.PrincipalHandleByteSize)
 	n, err := a.conn.Read(buf)
 	if err != nil {
 		conn.Close()
 		return nil, nil, err
 	}
-	if n != server.PrincipalHandleByteSize {
+	if n != agent.PrincipalHandleByteSize {
 		conn.Close()
-		return nil, nil, verror.New(errInvalidResponse, ctx, server.PrincipalHandleByteSize, n)
+		return nil, nil, verror.New(errInvalidResponse, ctx, agent.PrincipalHandleByteSize, n)
 	}
 	return buf, conn, nil
 }
 
+// NewPrincipal creates a new principal and returns a handle.
+// The handle may be passed to ServePrincipal to start an agent serving the principal.
+func (m *KeyManager) NewPrincipal(inMemory bool) (handle [agent.PrincipalHandleByteSize]byte, err error) {
+	args := []interface{}{inMemory}
+	err = m.conn.Call("NewPrincipal", args, &handle)
+	return
+}
+
 func (a *Agent) connect(req []byte) (*os.File, error) {
 	addr, err := unixfd.SendConnection(a.conn, req)
 	if err != nil {
@@ -108,10 +133,37 @@
 // previously created with NewPrincipal.
 // Typically this will be passed to a child process using cmd.ExtraFiles.
 func (a *Agent) NewConnection(handle []byte) (*os.File, error) {
-	if len(handle) != server.PrincipalHandleByteSize {
+	if len(handle) != agent.PrincipalHandleByteSize {
 		return nil, verror.New(errInvalidKeyHandle, nil)
 	}
 	a.mu.Lock()
 	defer a.mu.Unlock()
 	return a.connect(handle)
 }
+
+// ServePrincipal creates a socket at socketPath and serves a principal
+// previously created with NewPrincipal.
+func (m *KeyManager) ServePrincipal(handle [agent.PrincipalHandleByteSize]byte, socketPath string) error {
+	args := []interface{}{handle, socketPath}
+	return m.conn.Call("ServePrincipal", args)
+}
+
+// StopServing shuts down a server previously started with ServePrincipal.
+// The principal is not deleted and the server can be restarted by calling
+// ServePrincipal again.
+func (m *KeyManager) StopServing(handle [agent.PrincipalHandleByteSize]byte) error {
+	args := []interface{}{handle}
+	return m.conn.Call("StopServing", args)
+}
+
+// DeletePrincipal shuts down a server started by ServePrincipal and additionally
+// deletes the principal.
+func (m *KeyManager) DeletePrincipal(handle [agent.PrincipalHandleByteSize]byte) error {
+	args := []interface{}{handle}
+	return m.conn.Call("DeletePrincipal", args)
+}
+
+func (m *KeyManager) Close() error {
+	m.conn.Close()
+	return nil
+}
diff --git a/services/agent/model.go b/services/agent/model.go
new file mode 100644
index 0000000..38d6ece
--- /dev/null
+++ b/services/agent/model.go
@@ -0,0 +1,27 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package agent
+
+import (
+	"crypto/sha512"
+	"io"
+
+	"v.io/v23/security"
+)
+
+type Principal interface {
+	security.Principal
+	io.Closer
+}
+
+const PrincipalHandleByteSize = sha512.Size
+
+type KeyManager interface {
+	NewPrincipal(inMemory bool) (handle [PrincipalHandleByteSize]byte, err error)
+	ServePrincipal(handle [PrincipalHandleByteSize]byte, socketPath string) error
+	StopServing(handle [PrincipalHandleByteSize]byte) error
+	DeletePrincipal(handle [PrincipalHandleByteSize]byte) error
+	io.Closer
+}
diff --git a/services/application/applicationd/service.go b/services/application/applicationd/service.go
index c4e833e..2ea8bff 100644
--- a/services/application/applicationd/service.go
+++ b/services/application/applicationd/service.go
@@ -249,7 +249,7 @@
 
 	for _, r := range results {
 		if m.Match(r) {
-			call.SendStream().Send(naming.GlobChildrenReplyName{r})
+			call.SendStream().Send(naming.GlobChildrenReplyName{Value: r})
 		}
 	}
 	return nil
diff --git a/services/binary/tidy/binaryd/mock.go b/services/binary/tidy/binaryd/mock.go
index a9c1db0..d3efd8c 100644
--- a/services/binary/tidy/binaryd/mock.go
+++ b/services/binary/tidy/binaryd/mock.go
@@ -74,7 +74,7 @@
 	gs := GlobStimulus{g.String()}
 	gr := mdi.Tape.Record(gs).(GlobResponse)
 	for _, r := range gr.Results {
-		call.SendStream().Send(naming.GlobReplyEntry{naming.MountEntry{Name: r}})
+		call.SendStream().Send(naming.GlobReplyEntry{Value: naming.MountEntry{Name: r}})
 	}
 	return gr.Err
 }
diff --git a/services/device/device/claim.go b/services/device/device/claim.go
index 8d65e4d..2fb911c 100644
--- a/services/device/device/claim.go
+++ b/services/device/device/claim.go
@@ -54,7 +54,7 @@
 		if deviceKey, err := security.UnmarshalPublicKey(marshalledPublicKey); err != nil {
 			return fmt.Errorf("Failed to unmarshal device public key:%v", err)
 		} else {
-			serverKeyOpts = options.ServerPublicKey{deviceKey}
+			serverKeyOpts = options.ServerPublicKey{PublicKey: deviceKey}
 		}
 	}
 	// Skip server endpoint authorization since an unclaimed device might have
diff --git a/services/device/device/devicemanager_mock_test.go b/services/device/device/devicemanager_mock_test.go
index 6d1e486..4ca86c9 100644
--- a/services/device/device/devicemanager_mock_test.go
+++ b/services/device/device/devicemanager_mock_test.go
@@ -296,7 +296,7 @@
 	gs := GlobStimulus{g.String()}
 	gr := mdi.tape.Record(gs).(GlobResponse)
 	for _, r := range gr.results {
-		call.SendStream().Send(naming.GlobReplyEntry{naming.MountEntry{Name: r}})
+		call.SendStream().Send(naming.GlobReplyEntry{Value: naming.MountEntry{Name: r}})
 	}
 	return gr.err
 }
diff --git a/services/device/device/instantiate.go b/services/device/device/instantiate.go
index 8d8ab2c..f6c7b76 100644
--- a/services/device/device/instantiate.go
+++ b/services/device/device/instantiate.go
@@ -67,7 +67,7 @@
 			if err != nil {
 				return fmt.Errorf("Instantiate failed: %v", err)
 			}
-			call.SendStream().Send(device.BlessClientMessageAppBlessings{blessings})
+			call.SendStream().Send(device.BlessClientMessageAppBlessings{Value: blessings})
 		default:
 			fmt.Fprintf(env.Stderr, "Received unexpected message: %#v\n", msg)
 		}
diff --git a/services/device/deviced/internal/impl/app_service.go b/services/device/deviced/internal/impl/app_service.go
index 576ffa3..77896fe 100644
--- a/services/device/deviced/internal/impl/app_service.go
+++ b/services/device/deviced/internal/impl/app_service.go
@@ -1455,7 +1455,7 @@
 	}
 	for child, _ := range n.children {
 		if m.Match(child) {
-			call.SendStream().Send(naming.GlobChildrenReplyName{child})
+			call.SendStream().Send(naming.GlobChildrenReplyName{Value: child})
 		}
 	}
 	return nil
diff --git a/services/device/deviced/internal/impl/device_service.go b/services/device/deviced/internal/impl/device_service.go
index 480b8aa..055af58 100644
--- a/services/device/deviced/internal/impl/device_service.go
+++ b/services/device/deviced/internal/impl/device_service.go
@@ -326,7 +326,7 @@
 		cfg.Set(mgmt.SecurityAgentEndpointConfigKey, ep)
 	}
 
-	handle := vexec.NewParentHandle(cmd, vexec.ConfigOpt{cfg})
+	handle := vexec.NewParentHandle(cmd, vexec.ConfigOpt{Config: cfg})
 	// Start the child process.
 	if err := handle.Start(); err != nil {
 		ctx.Errorf("Start() failed: %v", err)
diff --git a/services/device/deviced/internal/impl/proxy_invoker.go b/services/device/deviced/internal/impl/proxy_invoker.go
index c395de6..d15dec1 100644
--- a/services/device/deviced/internal/impl/proxy_invoker.go
+++ b/services/device/deviced/internal/impl/proxy_invoker.go
@@ -214,7 +214,7 @@
 }
 
 func (p *proxyInvoker) Globber() *rpc.GlobState {
-	return &rpc.GlobState{AllGlobberX: p}
+	return &rpc.GlobState{AllGlobber: p}
 }
 
 type call struct {
diff --git a/services/device/deviced/internal/impl/utiltest/helpers.go b/services/device/deviced/internal/impl/utiltest/helpers.go
index cd61e3c..3c1a163 100644
--- a/services/device/deviced/internal/impl/utiltest/helpers.go
+++ b/services/device/deviced/internal/impl/utiltest/helpers.go
@@ -327,7 +327,7 @@
 			if err != nil {
 				return "", errors.New("bless failed")
 			}
-			call.SendStream().Send(device.BlessClientMessageAppBlessings{blessings})
+			call.SendStream().Send(device.BlessClientMessageAppBlessings{Value: blessings})
 		default:
 			return "", fmt.Errorf("newInstanceImpl: received unexpected message: %#v", msg)
 		}
diff --git a/services/device/deviced/internal/impl/utiltest/modules.go b/services/device/deviced/internal/impl/utiltest/modules.go
index 2a5a029..3f42f83 100644
--- a/services/device/deviced/internal/impl/utiltest/modules.go
+++ b/services/device/deviced/internal/impl/utiltest/modules.go
@@ -92,13 +92,14 @@
 	// method that calls Stop on the app cycle manager (e.g. the Stop RPC)
 	// will precipitate an immediate process exit.
 	shutdownChan := signals.ShutdownOnSignals(ctx)
+	localhost := []struct{ Protocol, Address string }{{"tcp", "127.0.0.1:0"}}
 	claimableName, stop, err := starter.Start(ctx, starter.Args{
 		Namespace: starter.NamespaceArgs{
-			ListenSpec: rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}},
+			ListenSpec: rpc.ListenSpec{Addrs: rpc.ListenAddrs(localhost)},
 		},
 		Device: starter.DeviceArgs{
 			Name:            publishName,
-			ListenSpec:      rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"tcp", "127.0.0.1:0"}}},
+			ListenSpec:      rpc.ListenSpec{Addrs: rpc.ListenAddrs(localhost)},
 			ConfigState:     configState,
 			TestMode:        strings.HasSuffix(fmt.Sprint(v23.GetPrincipal(ctx).BlessingStore().Default()), "/testdm"),
 			RestartCallback: func() { fmt.Println("restart handler") },
diff --git a/services/internal/binarylib/service.go b/services/internal/binarylib/service.go
index 99b25ad..3a43e42 100644
--- a/services/internal/binarylib/service.go
+++ b/services/internal/binarylib/service.go
@@ -391,7 +391,7 @@
 	}
 	for k, _ := range n.children {
 		if m.Match(k) {
-			call.SendStream().Send(naming.GlobChildrenReplyName{k})
+			call.SendStream().Send(naming.GlobChildrenReplyName{Value: k})
 		}
 	}
 	return nil
diff --git a/services/internal/logreaderlib/logfile.go b/services/internal/logreaderlib/logfile.go
index 5a4109d..5654301 100644
--- a/services/internal/logreaderlib/logfile.go
+++ b/services/internal/logreaderlib/logfile.go
@@ -149,7 +149,7 @@
 		for _, file := range fi {
 			name := file.Name()
 			if m.Match(name) {
-				call.SendStream().Send(naming.GlobChildrenReplyName{name})
+				call.SendStream().Send(naming.GlobChildrenReplyName{Value: name})
 			}
 		}
 	}
diff --git a/services/internal/statslib/stats.go b/services/internal/statslib/stats.go
index ddc2735..08f7157 100644
--- a/services/internal/statslib/stats.go
+++ b/services/internal/statslib/stats.go
@@ -44,7 +44,7 @@
 	sender := call.SendStream()
 	it := libstats.Glob(i.suffix, g.String(), time.Time{}, false)
 	for it.Advance() {
-		sender.Send(naming.GlobReplyEntry{naming.MountEntry{Name: it.Value().Key}})
+		sender.Send(naming.GlobReplyEntry{Value: naming.MountEntry{Name: it.Value().Key}})
 	}
 	if err := it.Err(); err != nil {
 		ctx.VI(1).Infof("libstats.Glob(%q, %q) failed: %v", i.suffix, g.String(), err)
diff --git a/services/mounttable/mounttablelib/mounttable.go b/services/mounttable/mounttablelib/mounttable.go
index d1c7258..52e3e96 100644
--- a/services/mounttable/mounttablelib/mounttable.go
+++ b/services/mounttable/mounttablelib/mounttable.go
@@ -682,7 +682,7 @@
 		}
 		// Hold no locks while we are sending on the channel to avoid livelock.
 		n.Unlock()
-		gCall.SendStream().Send(naming.GlobReplyEntry{me})
+		gCall.SendStream().Send(naming.GlobReplyEntry{Value: me})
 		return
 	}
 
@@ -752,7 +752,7 @@
 	// Hold no locks while we are sending on the channel to avoid livelock.
 	n.Unlock()
 	// Intermediate nodes are marked as serving a mounttable since they answer the mounttable methods.
-	gCall.SendStream().Send(naming.GlobReplyEntry{naming.MountEntry{Name: name, ServesMountTable: true}})
+	gCall.SendStream().Send(naming.GlobReplyEntry{Value: naming.MountEntry{Name: name, ServesMountTable: true}})
 }
 
 // Glob finds matches in the namespace.  If we reach a mount point before matching the
@@ -798,7 +798,7 @@
 		servers[i].Server = naming.Join(s.Server, strings.Join(elems, "/"))
 	}
 	n.Unlock()
-	gCall.SendStream().Send(naming.GlobReplyEntry{naming.MountEntry{Name: "", Servers: servers}})
+	gCall.SendStream().Send(naming.GlobReplyEntry{Value: naming.MountEntry{Name: "", Servers: servers}})
 }
 
 func (ms *mountContext) SetPermissions(ctx *context.T, call rpc.ServerCall, perms access.Permissions, version string) error {
diff --git a/services/mounttable/mounttablelib/mounttable_test.go b/services/mounttable/mounttablelib/mounttable_test.go
index 879943b..002af2b 100644
--- a/services/mounttable/mounttablelib/mounttable_test.go
+++ b/services/mounttable/mounttablelib/mounttable_test.go
@@ -484,7 +484,7 @@
 		root, _, _ := mt.Lookup(ctx, "")
 		g, _ := glob.Parse("...")
 		fCall := &fakeServerCall{}
-		root.(rpc.Globber).Globber().AllGlobberX.Glob__(ctx, fCall, g)
+		root.(rpc.Globber).Globber().AllGlobber.Glob__(ctx, fCall, g)
 		return fCall.sendCount, nil
 	}
 
diff --git a/services/mounttable/mounttablelib/neighborhood.go b/services/mounttable/mounttablelib/neighborhood.go
index 20997cf..c0cc83b 100644
--- a/services/mounttable/mounttablelib/neighborhood.go
+++ b/services/mounttable/mounttablelib/neighborhood.go
@@ -207,11 +207,14 @@
 			}
 			addr := s[len(addressPrefix):]
 			ttl := time.Second * time.Duration(rr.Header().Ttl)
-			addrMap[addr] = vdltime.Deadline{now.Add(ttl)}
+			addrMap[addr] = vdltime.Deadline{Time: now.Add(ttl)}
 		}
 	}
 	for addr, deadline := range addrMap {
-		reply = append(reply, naming.MountedServer{addr, deadline})
+		reply = append(reply, naming.MountedServer{
+			Server:   addr,
+			Deadline: deadline,
+		})
 	}
 	return reply
 }
@@ -284,7 +287,7 @@
 		matcher := g.Head()
 		for k, n := range nh.neighbors() {
 			if matcher.Match(k) {
-				sender.Send(naming.GlobReplyEntry{naming.MountEntry{Name: k, Servers: n, ServesMountTable: true}})
+				sender.Send(naming.GlobReplyEntry{Value: naming.MountEntry{Name: k, Servers: n, ServesMountTable: true}})
 			}
 		}
 		return nil
@@ -293,7 +296,7 @@
 		if neighbor == nil {
 			return verror.New(naming.ErrNoSuchName, ctx, ns.elems[0])
 		}
-		sender.Send(naming.GlobReplyEntry{naming.MountEntry{Name: "", Servers: neighbor, ServesMountTable: true}})
+		sender.Send(naming.GlobReplyEntry{Value: naming.MountEntry{Name: "", Servers: neighbor, ServesMountTable: true}})
 		return nil
 	default:
 		return verror.New(naming.ErrNoSuchName, ctx, ns.elems)
diff --git a/services/mounttable/mounttablelib/serverlist.go b/services/mounttable/mounttablelib/serverlist.go
index 65f1061..d5b8084 100644
--- a/services/mounttable/mounttablelib/serverlist.go
+++ b/services/mounttable/mounttablelib/serverlist.go
@@ -120,7 +120,7 @@
 		s := e.Value.(*server)
 		ms := naming.MountedServer{
 			Server:   s.oa,
-			Deadline: vdltime.Deadline{s.expires},
+			Deadline: vdltime.Deadline{Time: s.expires},
 		}
 		slice = append(slice, ms)
 	}
diff --git a/services/mounttable/mounttablelib/serverlist_test.go b/services/mounttable/mounttablelib/serverlist_test.go
index c061f00..3f8c56a 100644
--- a/services/mounttable/mounttablelib/serverlist_test.go
+++ b/services/mounttable/mounttablelib/serverlist_test.go
@@ -48,7 +48,7 @@
 	if got, want := sl.copyToSlice(), []naming.MountedServer{
 		{
 			Server:   "endpoint:dfgsfdg@@",
-			Deadline: vdltime.Deadline{now.Add(15 * time.Second)},
+			Deadline: vdltime.Deadline{Time: now.Add(15 * time.Second)},
 		},
 	}; !reflect.DeepEqual(got, want) {
 		t.Errorf("Got %v, want %v", got, want)
diff --git a/services/role/roled/internal/glob.go b/services/role/roled/internal/glob.go
index 88b0478..12735e0 100644
--- a/services/role/roled/internal/glob.go
+++ b/services/role/roled/internal/glob.go
@@ -29,7 +29,7 @@
 	}
 	for c := range n.children {
 		if m.Match(c) {
-			call.SendStream().Send(naming.GlobChildrenReplyName{c})
+			call.SendStream().Send(naming.GlobChildrenReplyName{Value: c})
 		}
 	}
 	return nil
diff --git a/services/role/roled/internal/role.go b/services/role/roled/internal/role.go
index 5e4aadc..5f4c733 100644
--- a/services/role/roled/internal/role.go
+++ b/services/role/roled/internal/role.go
@@ -129,7 +129,11 @@
 			if err != nil {
 				return security.Blessings{}, verror.Convert(verror.ErrInternal, ctx, err)
 			}
-			thirdParty, err := security.NewPublicKeyCaveat(principal.PublicKey(), dischargerLocation, security.ThirdPartyRequirements{true, true, true}, loggingCaveat)
+			thirdParty, err := security.NewPublicKeyCaveat(principal.PublicKey(), dischargerLocation, security.ThirdPartyRequirements{
+				ReportServer:    true,
+				ReportMethod:    true,
+				ReportArguments: true,
+			}, loggingCaveat)
 			if err != nil {
 				return security.Blessings{}, verror.Convert(verror.ErrInternal, ctx, err)
 			}
diff --git a/services/wspr/internal/principal/principal_test.go b/services/wspr/internal/principal/principal_test.go
index 189c052..64cb612 100644
--- a/services/wspr/internal/principal/principal_test.go
+++ b/services/wspr/internal/principal/principal_test.go
@@ -178,12 +178,18 @@
 	if err != nil {
 		t.Fatalf("NewPrincipalManager failed: %v", err)
 	}
+
 	googleAccount := "fred/jim@gmail.com"
+	googleBlessings := accountBlessing(root, googleAccount)
+
+	if err := m.AddAccount(googleAccount, googleBlessings); err != nil {
+		t.Errorf("AddAccount(%v, %v) failed: %v", googleAccount, googleBlessings, err)
+	}
 
 	// Test with unknown origin.
 	unknownOrigin := "http://unknown.com"
 	if m.OriginHasAccount(unknownOrigin) {
-		fmt.Errorf("Expected m.OriginHasAccount(%v) to be false but it was true.", unknownOrigin)
+		t.Errorf("Expected m.OriginHasAccount(%v) to be false but it was true.", unknownOrigin)
 	}
 
 	// Test with no expiration caveat.
@@ -191,15 +197,15 @@
 
 	methodCav, err := security.NewMethodCaveat("Foo")
 	if err != nil {
-		fmt.Errorf("security.MethodCaveat failed: %v", err)
+		t.Errorf("security.MethodCaveat failed: %v", err)
 	}
 
 	if err := m.AddOrigin(origin1, googleAccount, []security.Caveat{methodCav}, nil); err != nil {
-		fmt.Errorf("AddOrigin failed: %v", err)
+		t.Errorf("AddOrigin failed: %v", err)
 	}
 
 	if !m.OriginHasAccount(origin1) {
-		fmt.Errorf("Expected m.OriginHasAccount(%v) to be true but it was false.", origin1)
+		t.Errorf("Expected m.OriginHasAccount(%v) to be true but it was false.", origin1)
 	}
 
 	// Test with expiration caveat in the future.
@@ -208,15 +214,15 @@
 
 	futureExpCav, err := security.NewExpiryCaveat(futureTime)
 	if err != nil {
-		fmt.Errorf("security.NewExpiryCaveat(%v) failed: %v", futureTime, err)
+		t.Errorf("security.NewExpiryCaveat(%v) failed: %v", futureTime, err)
 	}
 
 	if err := m.AddOrigin(origin2, googleAccount, []security.Caveat{futureExpCav}, []time.Time{futureTime}); err != nil {
-		fmt.Errorf("AddOrigin failed: %v", err)
+		t.Errorf("AddOrigin failed: %v", err)
 	}
 
 	if !m.OriginHasAccount(origin2) {
-		fmt.Errorf("Expected m.OriginHasAccount(%v) to be true but it was false.", origin2)
+		t.Errorf("Expected m.OriginHasAccount(%v) to be true but it was false.", origin2)
 	}
 
 	// Test with expiration caveats in the past and future.
@@ -225,14 +231,14 @@
 
 	pastExpCav, err := security.NewExpiryCaveat(pastTime)
 	if err != nil {
-		fmt.Errorf("security.NewExpiryCaveat(%v) failed: %v", pastTime, err)
+		t.Errorf("security.NewExpiryCaveat(%v) failed: %v", pastTime, err)
 	}
 
 	if err := m.AddOrigin(origin3, googleAccount, []security.Caveat{futureExpCav, pastExpCav}, []time.Time{futureTime, pastTime}); err != nil {
-		fmt.Errorf("AddOrigin failed: %v", err)
+		t.Errorf("AddOrigin failed: %v", err)
 	}
 
 	if m.OriginHasAccount(origin3) {
-		fmt.Errorf("Expected m.OriginHasAccount(%v) to be false but it was true.", origin3)
+		t.Errorf("Expected m.OriginHasAccount(%v) to be false but it was true.", origin3)
 	}
 }
diff --git a/services/wspr/internal/rpc/server/invoker.go b/services/wspr/internal/rpc/server/invoker.go
index 9e6e40c..ae5c48a 100644
--- a/services/wspr/internal/rpc/server/invoker.go
+++ b/services/wspr/internal/rpc/server/invoker.go
@@ -84,7 +84,7 @@
 	if i.globFunc == nil {
 		return nil
 	}
-	return &rpc.GlobState{AllGlobberX: i}
+	return &rpc.GlobState{AllGlobber: i}
 }
 
 func (i *invoker) Glob__(ctx *context.T, call rpc.GlobServerCall, g *glob.Glob) error {
