diff --git a/runtimes/google/vsync/vsync.vdl b/runtimes/google/vsync/vsync.vdl
index f953243..aa06ec9 100644
--- a/runtimes/google/vsync/vsync.vdl
+++ b/runtimes/google/vsync/vsync.vdl
@@ -28,7 +28,7 @@
 // It contains log related metadata: DevID is the id of the
 // device that created the log record, GNum is the ID of the
 // generation that the log record is part of, LSN is the log
-// sequence number of the log record in the generation GNum,
+// sequence number of the log record in the generation GNum, 
 // and RecType is the type of log record.
 //
 // It also contains information relevant to the updates to an object
@@ -59,15 +59,15 @@
   // Delete indicates whether the mutation resulted in the object being
   // deleted from the store.
   Delete   bool
-  // Continues tracks the transaction boundaries in a range of mutations.
+  // Continue tracks the transaction boundaries in a range of mutations.
   // It is set to true in all transaction mutations except the last one
   // in which it is set to false to mark the end of the transaction.
-  Continues bool
+  Continue bool
 }
 
 // Sync allows a device to GetDeltas from another device.
 type Sync interface {
   // GetDeltas returns a device's current generation vector and all the missing log records
   // when compared to the incoming generation vector.
-  GetDeltas(InVec GenVector, ClientID DeviceID) stream<_, LogRec> (OutVec GenVector, Err error)
+  GetDeltas(In GenVector, ClientID DeviceID) stream<_, LogRec> (Out GenVector, Err error)
 }
diff --git a/runtimes/google/vsync/vsync.vdl.go b/runtimes/google/vsync/vsync.vdl.go
index 821bbc6..e2120db 100644
--- a/runtimes/google/vsync/vsync.vdl.go
+++ b/runtimes/google/vsync/vsync.vdl.go
@@ -70,7 +70,7 @@
 	// Continue tracks the transaction boundaries in a range of mutations.
 	// It is set to true in all transaction mutations except the last one
 	// in which it is set to false to mark the end of the transaction.
-	Continues bool
+	Continue bool
 }
 
 const (
@@ -88,7 +88,7 @@
 type Sync_ExcludingUniversal interface {
 	// GetDeltas returns a device's current generation vector and all the missing log records
 	// when compared to the incoming generation vector.
-	GetDeltas(ctx _gen_context.T, InVec GenVector, ClientID DeviceID, opts ..._gen_ipc.CallOpt) (reply SyncGetDeltasStream, err error)
+	GetDeltas(ctx _gen_context.T, In GenVector, ClientID DeviceID, opts ..._gen_ipc.CallOpt) (reply SyncGetDeltasStream, err error)
 }
 type Sync interface {
 	_gen_ipc.UniversalServiceMethods
@@ -100,7 +100,7 @@
 
 	// GetDeltas returns a device's current generation vector and all the missing log records
 	// when compared to the incoming generation vector.
-	GetDeltas(context _gen_ipc.ServerContext, InVec GenVector, ClientID DeviceID, stream SyncServiceGetDeltasStream) (reply GenVector, err error)
+	GetDeltas(context _gen_ipc.ServerContext, In GenVector, ClientID DeviceID, stream SyncServiceGetDeltasStream) (reply GenVector, err error)
 }
 
 // SyncGetDeltasStream is the interface for streaming responses of the method
@@ -200,9 +200,9 @@
 	name   string
 }
 
-func (__gen_c *clientStubSync) GetDeltas(ctx _gen_context.T, InVec GenVector, ClientID DeviceID, opts ..._gen_ipc.CallOpt) (reply SyncGetDeltasStream, err error) {
+func (__gen_c *clientStubSync) GetDeltas(ctx _gen_context.T, In GenVector, ClientID DeviceID, opts ..._gen_ipc.CallOpt) (reply SyncGetDeltasStream, err error) {
 	var call _gen_ipc.Call
-	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "GetDeltas", []interface{}{InVec, ClientID}, opts...); err != nil {
+	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "GetDeltas", []interface{}{In, ClientID}, opts...); err != nil {
 		return
 	}
 	reply = &implSyncGetDeltasStream{clientCall: call}
@@ -265,11 +265,11 @@
 	result := _gen_ipc.ServiceSignature{Methods: make(map[string]_gen_ipc.MethodSignature)}
 	result.Methods["GetDeltas"] = _gen_ipc.MethodSignature{
 		InArgs: []_gen_ipc.MethodArgument{
-			{Name: "InVec", Type: 67},
+			{Name: "In", Type: 67},
 			{Name: "ClientID", Type: 65},
 		},
 		OutArgs: []_gen_ipc.MethodArgument{
-			{Name: "OutVec", Type: 67},
+			{Name: "Out", Type: 67},
 			{Name: "Err", Type: 68},
 		},
 
@@ -305,7 +305,7 @@
 				_gen_wiretype.FieldType{Type: 0x50, Name: "Mutation"},
 				_gen_wiretype.FieldType{Type: 0x25, Name: "SyncTime"},
 				_gen_wiretype.FieldType{Type: 0x2, Name: "Delete"},
-				_gen_wiretype.FieldType{Type: 0x2, Name: "Continues"},
+				_gen_wiretype.FieldType{Type: 0x2, Name: "Continue"},
 			},
 			"veyron/runtimes/google/vsync.LogValue", []string(nil)},
 		_gen_wiretype.StructType{
@@ -343,8 +343,8 @@
 	return
 }
 
-func (__gen_s *ServerStubSync) GetDeltas(call _gen_ipc.ServerCall, InVec GenVector, ClientID DeviceID) (reply GenVector, err error) {
+func (__gen_s *ServerStubSync) GetDeltas(call _gen_ipc.ServerCall, In GenVector, ClientID DeviceID) (reply GenVector, err error) {
 	stream := &implSyncServiceGetDeltasStream{serverCall: call}
-	reply, err = __gen_s.service.GetDeltas(call, InVec, ClientID, stream)
+	reply, err = __gen_s.service.GetDeltas(call, In, ClientID, stream)
 	return
 }
diff --git a/runtimes/google/vsync/watcher.go b/runtimes/google/vsync/watcher.go
index cc74fb0..d101d7b 100644
--- a/runtimes/google/vsync/watcher.go
+++ b/runtimes/google/vsync/watcher.go
@@ -166,7 +166,7 @@
 			return fmt.Errorf("invalid change value, not a mutation: %#v", ch)
 		}
 
-		val := &LogValue{Mutation: *mu, SyncTime: syncTime, Delete: ch.State == watch.DoesNotExist, Continues: ch.Continued}
+		val := &LogValue{Mutation: *mu, SyncTime: syncTime, Delete: ch.State == watch.DoesNotExist, Continue: ch.Continued}
 		var parents []storage.Version
 		if mu.PriorVersion != storage.NoVersion {
 			parents = []storage.Version{mu.PriorVersion}
diff --git a/tools/vrpc/impl/impl_test.go b/tools/vrpc/impl/impl_test.go
index 23cd474..f2dcea8 100644
--- a/tools/vrpc/impl/impl_test.go
+++ b/tools/vrpc/impl/impl_test.go
@@ -21,48 +21,48 @@
 
 // TypeTester interface implementation
 
-func (*server) EchoBool(call ipc.ServerContext, i1 bool) (bool, error) {
-	vlog.VI(2).Info("EchoBool(%v) was called.", i1)
+func (*server) Bool(call ipc.ServerContext, i1 bool) (bool, error) {
+	vlog.VI(2).Info("Bool(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoFloat32(call ipc.ServerContext, i1 float32) (float32, error) {
-	vlog.VI(2).Info("EchoFloat32(%u) was called.", i1)
+func (*server) Float32(call ipc.ServerContext, i1 float32) (float32, error) {
+	vlog.VI(2).Info("Float32(%u) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoFloat64(call ipc.ServerContext, i1 float64) (float64, error) {
-	vlog.VI(2).Info("EchoFloat64(%u) was called.", i1)
+func (*server) Float64(call ipc.ServerContext, i1 float64) (float64, error) {
+	vlog.VI(2).Info("Float64(%u) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoInt32(call ipc.ServerContext, i1 int32) (int32, error) {
-	vlog.VI(2).Info("EchoInt32(%v) was called.", i1)
+func (*server) Int32(call ipc.ServerContext, i1 int32) (int32, error) {
+	vlog.VI(2).Info("Int32(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoInt64(call ipc.ServerContext, i1 int64) (int64, error) {
-	vlog.VI(2).Info("EchoInt64(%v) was called.", i1)
+func (*server) Int64(call ipc.ServerContext, i1 int64) (int64, error) {
+	vlog.VI(2).Info("Int64(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoString(call ipc.ServerContext, i1 string) (string, error) {
-	vlog.VI(2).Info("EchoString(%v) was called.", i1)
+func (*server) String(call ipc.ServerContext, i1 string) (string, error) {
+	vlog.VI(2).Info("String(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoByte(call ipc.ServerContext, i1 byte) (byte, error) {
-	vlog.VI(2).Info("EchoByte(%v) was called.", i1)
+func (*server) Byte(call ipc.ServerContext, i1 byte) (byte, error) {
+	vlog.VI(2).Info("Byte(%v) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoUInt32(call ipc.ServerContext, i1 uint32) (uint32, error) {
-	vlog.VI(2).Info("EchoUInt32(%u) was called.", i1)
+func (*server) UInt32(call ipc.ServerContext, i1 uint32) (uint32, error) {
+	vlog.VI(2).Info("UInt32(%u) was called.", i1)
 	return i1, nil
 }
 
-func (*server) EchoUInt64(call ipc.ServerContext, i1 uint64) (uint64, error) {
-	vlog.VI(2).Info("EchoUInt64(%u) was called.", i1)
+func (*server) UInt64(call ipc.ServerContext, i1 uint64) (uint64, error) {
+	vlog.VI(2).Info("UInt64(%u) was called.", i1)
 	return i1, nil
 }
 
@@ -194,15 +194,15 @@
 	}
 
 	expectedSignature := []string{
-		"func EchoBool(I1 bool) (O1 bool, E error)",
-		"func EchoFloat32(I1 float32) (O1 float32, E error)",
-		"func EchoFloat64(I1 float64) (O1 float64, E error)",
-		"func EchoInt32(I1 int32) (O1 int32, E error)",
-		"func EchoInt64(I1 int64) (O1 int64, E error)",
-		"func EchoString(I1 string) (O1 string, E error)",
-		"func EchoByte(I1 byte) (O1 byte, E error)",
-		"func EchoUInt32(I1 uint32) (O1 uint32, E error)",
-		"func EchoUInt64(I1 uint64) (O1 uint64, E error)",
+		"func Bool(I1 bool) (O1 bool, E error)",
+		"func Float32(I1 float32) (O1 float32, E error)",
+		"func Float64(I1 float64) (O1 float64, E error)",
+		"func Int32(I1 int32) (O1 int32, E error)",
+		"func Int64(I1 int64) (O1 int64, E error)",
+		"func String(I1 string) (O1 string, E error)",
+		"func Byte(I1 byte) (O1 byte, E error)",
+		"func UInt32(I1 uint32) (O1 uint32, E error)",
+		"func UInt64(I1 uint64) (O1 uint64, E error)",
 		"func InputArray(I1 [2]byte) (E error)",
 		"func InputMap(I1 map[byte]byte) (E error)",
 		"func InputSlice(I1 []byte) (E error)",
@@ -239,15 +239,15 @@
 	// Test the 'invoke' command.
 
 	tests := [][]string{
-		[]string{"EchoBool", "EchoBool(true) = [true, <nil>]", "[\"bool\",true]"},
-		[]string{"EchoFloat32", "EchoFloat32(3.2) = [3.2, <nil>]", "[\"float32\",3.2]"},
-		[]string{"EchoFloat64", "EchoFloat64(6.4) = [6.4, <nil>]", "[\"float64\",6.4]"},
-		[]string{"EchoInt32", "EchoInt32(-32) = [-32, <nil>]", "[\"int32\",-32]"},
-		[]string{"EchoInt64", "EchoInt64(-64) = [-64, <nil>]", "[\"int64\",-64]"},
-		[]string{"EchoString", "EchoString(Hello World!) = [Hello World!, <nil>]", "[\"string\",\"Hello World!\"]"},
-		[]string{"EchoByte", "EchoByte(8) = [8, <nil>]", "[\"byte\",8]"},
-		[]string{"EchoUInt32", "EchoUInt32(32) = [32, <nil>]", "[\"uint32\",32]"},
-		[]string{"EchoUInt64", "EchoUInt64(64) = [64, <nil>]", "[\"uint64\",64]"},
+		[]string{"Bool", "Bool(true) = [true, <nil>]", "[\"bool\",true]"},
+		[]string{"Float32", "Float32(3.2) = [3.2, <nil>]", "[\"float32\",3.2]"},
+		[]string{"Float64", "Float64(6.4) = [6.4, <nil>]", "[\"float64\",6.4]"},
+		[]string{"Int32", "Int32(-32) = [-32, <nil>]", "[\"int32\",-32]"},
+		[]string{"Int64", "Int64(-64) = [-64, <nil>]", "[\"int64\",-64]"},
+		[]string{"String", "String(Hello World!) = [Hello World!, <nil>]", "[\"string\",\"Hello World!\"]"},
+		[]string{"Byte", "Byte(8) = [8, <nil>]", "[\"byte\",8]"},
+		[]string{"UInt32", "UInt32(32) = [32, <nil>]", "[\"uint32\",32]"},
+		[]string{"UInt64", "UInt64(64) = [64, <nil>]", "[\"uint64\",64]"},
 		// TODO(jsimsa): The InputArray currently triggers an error in the
 		// vom decoder. Benj is looking into this.
 		//
@@ -277,7 +277,7 @@
 	}
 
 	testErrors := [][]string{
-		[]string{"EchoBool", "usage error"},
+		[]string{"Bool", "usage error"},
 		[]string{"DoesNotExit", "invoke: method DoesNotExit not found"},
 	}
 	for _, test := range testErrors {
diff --git a/tools/vrpc/test_base/test_base.vdl b/tools/vrpc/test_base/test_base.vdl
index ba6496c..05b8de4 100644
--- a/tools/vrpc/test_base/test_base.vdl
+++ b/tools/vrpc/test_base/test_base.vdl
@@ -6,15 +6,15 @@
 
 type TypeTester interface {
   // Methods to test support for generic types.
-  EchoBool(I1 bool) (O1 bool, E error)
-  EchoFloat32(I1 float32) (O1 float32, E error)
-  EchoFloat64(I1 float64) (O1 float64, E error)
-  EchoInt32(I1 int32) (O1 int32, E error)
-  EchoInt64(I1 int64) (O1 int64, E error)
-  EchoString(I1 string) (O1 string, E error)
-  EchoByte(I1 byte) (O1 byte, E error)
-  EchoUInt32(I1 uint32) (O1 uint32, E error)
-  EchoUInt64(I1 uint64) (O1 uint64, E error)
+  Bool(I1 bool) (O1 bool, E error)
+  Float32(I1 float32) (O1 float32, E error)
+  Float64(I1 float64) (O1 float64, E error)
+  Int32(I1 int32) (O1 int32, E error)
+  Int64(I1 int64) (O1 int64, E error)
+  String(I1 string) (O1 string, E error)
+  Byte(I1 byte) (O1 byte, E error)
+  UInt32(I1 uint32) (O1 uint32, E error)
+  UInt64(I1 uint64) (O1 uint64, E error)
 
   // Methods to test support for composite types.
   InputArray(I1 [2]byte) (E error)
diff --git a/tools/vrpc/test_base/test_base.vdl.go b/tools/vrpc/test_base/test_base.vdl.go
index 958f64e..eabe26a 100644
--- a/tools/vrpc/test_base/test_base.vdl.go
+++ b/tools/vrpc/test_base/test_base.vdl.go
@@ -24,15 +24,15 @@
 // to enable embedding without method collisions.  Not to be used directly by clients.
 type TypeTester_ExcludingUniversal interface {
 	// Methods to test support for generic types.
-	EchoBool(ctx _gen_context.T, I1 bool, opts ..._gen_ipc.CallOpt) (reply bool, err error)
-	EchoFloat32(ctx _gen_context.T, I1 float32, opts ..._gen_ipc.CallOpt) (reply float32, err error)
-	EchoFloat64(ctx _gen_context.T, I1 float64, opts ..._gen_ipc.CallOpt) (reply float64, err error)
-	EchoInt32(ctx _gen_context.T, I1 int32, opts ..._gen_ipc.CallOpt) (reply int32, err error)
-	EchoInt64(ctx _gen_context.T, I1 int64, opts ..._gen_ipc.CallOpt) (reply int64, err error)
-	EchoString(ctx _gen_context.T, I1 string, opts ..._gen_ipc.CallOpt) (reply string, err error)
-	EchoByte(ctx _gen_context.T, I1 byte, opts ..._gen_ipc.CallOpt) (reply byte, err error)
-	EchoUInt32(ctx _gen_context.T, I1 uint32, opts ..._gen_ipc.CallOpt) (reply uint32, err error)
-	EchoUInt64(ctx _gen_context.T, I1 uint64, opts ..._gen_ipc.CallOpt) (reply uint64, err error)
+	Bool(ctx _gen_context.T, I1 bool, opts ..._gen_ipc.CallOpt) (reply bool, err error)
+	Float32(ctx _gen_context.T, I1 float32, opts ..._gen_ipc.CallOpt) (reply float32, err error)
+	Float64(ctx _gen_context.T, I1 float64, opts ..._gen_ipc.CallOpt) (reply float64, err error)
+	Int32(ctx _gen_context.T, I1 int32, opts ..._gen_ipc.CallOpt) (reply int32, err error)
+	Int64(ctx _gen_context.T, I1 int64, opts ..._gen_ipc.CallOpt) (reply int64, err error)
+	String(ctx _gen_context.T, I1 string, opts ..._gen_ipc.CallOpt) (reply string, err error)
+	Byte(ctx _gen_context.T, I1 byte, opts ..._gen_ipc.CallOpt) (reply byte, err error)
+	UInt32(ctx _gen_context.T, I1 uint32, opts ..._gen_ipc.CallOpt) (reply uint32, err error)
+	UInt64(ctx _gen_context.T, I1 uint64, opts ..._gen_ipc.CallOpt) (reply uint64, err error)
 	// Methods to test support for composite types.
 	InputArray(ctx _gen_context.T, I1 [2]byte, opts ..._gen_ipc.CallOpt) (err error)
 	InputMap(ctx _gen_context.T, I1 map[byte]byte, opts ..._gen_ipc.CallOpt) (err error)
@@ -57,15 +57,15 @@
 type TypeTesterService interface {
 
 	// Methods to test support for generic types.
-	EchoBool(context _gen_ipc.ServerContext, I1 bool) (reply bool, err error)
-	EchoFloat32(context _gen_ipc.ServerContext, I1 float32) (reply float32, err error)
-	EchoFloat64(context _gen_ipc.ServerContext, I1 float64) (reply float64, err error)
-	EchoInt32(context _gen_ipc.ServerContext, I1 int32) (reply int32, err error)
-	EchoInt64(context _gen_ipc.ServerContext, I1 int64) (reply int64, err error)
-	EchoString(context _gen_ipc.ServerContext, I1 string) (reply string, err error)
-	EchoByte(context _gen_ipc.ServerContext, I1 byte) (reply byte, err error)
-	EchoUInt32(context _gen_ipc.ServerContext, I1 uint32) (reply uint32, err error)
-	EchoUInt64(context _gen_ipc.ServerContext, I1 uint64) (reply uint64, err error)
+	Bool(context _gen_ipc.ServerContext, I1 bool) (reply bool, err error)
+	Float32(context _gen_ipc.ServerContext, I1 float32) (reply float32, err error)
+	Float64(context _gen_ipc.ServerContext, I1 float64) (reply float64, err error)
+	Int32(context _gen_ipc.ServerContext, I1 int32) (reply int32, err error)
+	Int64(context _gen_ipc.ServerContext, I1 int64) (reply int64, err error)
+	String(context _gen_ipc.ServerContext, I1 string) (reply string, err error)
+	Byte(context _gen_ipc.ServerContext, I1 byte) (reply byte, err error)
+	UInt32(context _gen_ipc.ServerContext, I1 uint32) (reply uint32, err error)
+	UInt64(context _gen_ipc.ServerContext, I1 uint64) (reply uint64, err error)
 	// Methods to test support for composite types.
 	InputArray(context _gen_ipc.ServerContext, I1 [2]byte) (err error)
 	InputMap(context _gen_ipc.ServerContext, I1 map[byte]byte) (err error)
@@ -179,9 +179,9 @@
 	name   string
 }
 
-func (__gen_c *clientStubTypeTester) EchoBool(ctx _gen_context.T, I1 bool, opts ..._gen_ipc.CallOpt) (reply bool, err error) {
+func (__gen_c *clientStubTypeTester) Bool(ctx _gen_context.T, I1 bool, opts ..._gen_ipc.CallOpt) (reply bool, err error) {
 	var call _gen_ipc.Call
-	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "EchoBool", []interface{}{I1}, opts...); err != nil {
+	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "Bool", []interface{}{I1}, opts...); err != nil {
 		return
 	}
 	if ierr := call.Finish(&reply, &err); ierr != nil {
@@ -190,9 +190,9 @@
 	return
 }
 
-func (__gen_c *clientStubTypeTester) EchoFloat32(ctx _gen_context.T, I1 float32, opts ..._gen_ipc.CallOpt) (reply float32, err error) {
+func (__gen_c *clientStubTypeTester) Float32(ctx _gen_context.T, I1 float32, opts ..._gen_ipc.CallOpt) (reply float32, err error) {
 	var call _gen_ipc.Call
-	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "EchoFloat32", []interface{}{I1}, opts...); err != nil {
+	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "Float32", []interface{}{I1}, opts...); err != nil {
 		return
 	}
 	if ierr := call.Finish(&reply, &err); ierr != nil {
@@ -201,9 +201,9 @@
 	return
 }
 
-func (__gen_c *clientStubTypeTester) EchoFloat64(ctx _gen_context.T, I1 float64, opts ..._gen_ipc.CallOpt) (reply float64, err error) {
+func (__gen_c *clientStubTypeTester) Float64(ctx _gen_context.T, I1 float64, opts ..._gen_ipc.CallOpt) (reply float64, err error) {
 	var call _gen_ipc.Call
-	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "EchoFloat64", []interface{}{I1}, opts...); err != nil {
+	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "Float64", []interface{}{I1}, opts...); err != nil {
 		return
 	}
 	if ierr := call.Finish(&reply, &err); ierr != nil {
@@ -212,9 +212,9 @@
 	return
 }
 
-func (__gen_c *clientStubTypeTester) EchoInt32(ctx _gen_context.T, I1 int32, opts ..._gen_ipc.CallOpt) (reply int32, err error) {
+func (__gen_c *clientStubTypeTester) Int32(ctx _gen_context.T, I1 int32, opts ..._gen_ipc.CallOpt) (reply int32, err error) {
 	var call _gen_ipc.Call
-	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "EchoInt32", []interface{}{I1}, opts...); err != nil {
+	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "Int32", []interface{}{I1}, opts...); err != nil {
 		return
 	}
 	if ierr := call.Finish(&reply, &err); ierr != nil {
@@ -223,9 +223,9 @@
 	return
 }
 
-func (__gen_c *clientStubTypeTester) EchoInt64(ctx _gen_context.T, I1 int64, opts ..._gen_ipc.CallOpt) (reply int64, err error) {
+func (__gen_c *clientStubTypeTester) Int64(ctx _gen_context.T, I1 int64, opts ..._gen_ipc.CallOpt) (reply int64, err error) {
 	var call _gen_ipc.Call
-	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "EchoInt64", []interface{}{I1}, opts...); err != nil {
+	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "Int64", []interface{}{I1}, opts...); err != nil {
 		return
 	}
 	if ierr := call.Finish(&reply, &err); ierr != nil {
@@ -234,9 +234,9 @@
 	return
 }
 
-func (__gen_c *clientStubTypeTester) EchoString(ctx _gen_context.T, I1 string, opts ..._gen_ipc.CallOpt) (reply string, err error) {
+func (__gen_c *clientStubTypeTester) String(ctx _gen_context.T, I1 string, opts ..._gen_ipc.CallOpt) (reply string, err error) {
 	var call _gen_ipc.Call
-	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "EchoString", []interface{}{I1}, opts...); err != nil {
+	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "String", []interface{}{I1}, opts...); err != nil {
 		return
 	}
 	if ierr := call.Finish(&reply, &err); ierr != nil {
@@ -245,9 +245,9 @@
 	return
 }
 
-func (__gen_c *clientStubTypeTester) EchoByte(ctx _gen_context.T, I1 byte, opts ..._gen_ipc.CallOpt) (reply byte, err error) {
+func (__gen_c *clientStubTypeTester) Byte(ctx _gen_context.T, I1 byte, opts ..._gen_ipc.CallOpt) (reply byte, err error) {
 	var call _gen_ipc.Call
-	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "EchoByte", []interface{}{I1}, opts...); err != nil {
+	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "Byte", []interface{}{I1}, opts...); err != nil {
 		return
 	}
 	if ierr := call.Finish(&reply, &err); ierr != nil {
@@ -256,9 +256,9 @@
 	return
 }
 
-func (__gen_c *clientStubTypeTester) EchoUInt32(ctx _gen_context.T, I1 uint32, opts ..._gen_ipc.CallOpt) (reply uint32, err error) {
+func (__gen_c *clientStubTypeTester) UInt32(ctx _gen_context.T, I1 uint32, opts ..._gen_ipc.CallOpt) (reply uint32, err error) {
 	var call _gen_ipc.Call
-	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "EchoUInt32", []interface{}{I1}, opts...); err != nil {
+	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "UInt32", []interface{}{I1}, opts...); err != nil {
 		return
 	}
 	if ierr := call.Finish(&reply, &err); ierr != nil {
@@ -267,9 +267,9 @@
 	return
 }
 
-func (__gen_c *clientStubTypeTester) EchoUInt64(ctx _gen_context.T, I1 uint64, opts ..._gen_ipc.CallOpt) (reply uint64, err error) {
+func (__gen_c *clientStubTypeTester) UInt64(ctx _gen_context.T, I1 uint64, opts ..._gen_ipc.CallOpt) (reply uint64, err error) {
 	var call _gen_ipc.Call
-	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "EchoUInt64", []interface{}{I1}, opts...); err != nil {
+	if call, err = __gen_c.client.StartCall(ctx, __gen_c.name, "UInt64", []interface{}{I1}, opts...); err != nil {
 		return
 	}
 	if ierr := call.Finish(&reply, &err); ierr != nil {
@@ -442,23 +442,23 @@
 	// Note: This exhibits some weird behavior like returning a nil error if the method isn't found.
 	// This will change when it is replaced with Signature().
 	switch method {
-	case "EchoBool":
+	case "Bool":
 		return []interface{}{}, nil
-	case "EchoFloat32":
+	case "Float32":
 		return []interface{}{}, nil
-	case "EchoFloat64":
+	case "Float64":
 		return []interface{}{}, nil
-	case "EchoInt32":
+	case "Int32":
 		return []interface{}{}, nil
-	case "EchoInt64":
+	case "Int64":
 		return []interface{}{}, nil
-	case "EchoString":
+	case "String":
 		return []interface{}{}, nil
-	case "EchoByte":
+	case "Byte":
 		return []interface{}{}, nil
-	case "EchoUInt32":
+	case "UInt32":
 		return []interface{}{}, nil
-	case "EchoUInt64":
+	case "UInt64":
 		return []interface{}{}, nil
 	case "InputArray":
 		return []interface{}{}, nil
@@ -489,7 +489,7 @@
 
 func (__gen_s *ServerStubTypeTester) Signature(call _gen_ipc.ServerCall) (_gen_ipc.ServiceSignature, error) {
 	result := _gen_ipc.ServiceSignature{Methods: make(map[string]_gen_ipc.MethodSignature)}
-	result.Methods["EchoBool"] = _gen_ipc.MethodSignature{
+	result.Methods["Bool"] = _gen_ipc.MethodSignature{
 		InArgs: []_gen_ipc.MethodArgument{
 			{Name: "I1", Type: 2},
 		},
@@ -498,7 +498,7 @@
 			{Name: "E", Type: 65},
 		},
 	}
-	result.Methods["EchoByte"] = _gen_ipc.MethodSignature{
+	result.Methods["Byte"] = _gen_ipc.MethodSignature{
 		InArgs: []_gen_ipc.MethodArgument{
 			{Name: "I1", Type: 66},
 		},
@@ -507,7 +507,7 @@
 			{Name: "E", Type: 65},
 		},
 	}
-	result.Methods["EchoFloat32"] = _gen_ipc.MethodSignature{
+	result.Methods["Float32"] = _gen_ipc.MethodSignature{
 		InArgs: []_gen_ipc.MethodArgument{
 			{Name: "I1", Type: 25},
 		},
@@ -516,7 +516,7 @@
 			{Name: "E", Type: 65},
 		},
 	}
-	result.Methods["EchoFloat64"] = _gen_ipc.MethodSignature{
+	result.Methods["Float64"] = _gen_ipc.MethodSignature{
 		InArgs: []_gen_ipc.MethodArgument{
 			{Name: "I1", Type: 26},
 		},
@@ -525,51 +525,6 @@
 			{Name: "E", Type: 65},
 		},
 	}
-	result.Methods["EchoInt32"] = _gen_ipc.MethodSignature{
-		InArgs: []_gen_ipc.MethodArgument{
-			{Name: "I1", Type: 36},
-		},
-		OutArgs: []_gen_ipc.MethodArgument{
-			{Name: "O1", Type: 36},
-			{Name: "E", Type: 65},
-		},
-	}
-	result.Methods["EchoInt64"] = _gen_ipc.MethodSignature{
-		InArgs: []_gen_ipc.MethodArgument{
-			{Name: "I1", Type: 37},
-		},
-		OutArgs: []_gen_ipc.MethodArgument{
-			{Name: "O1", Type: 37},
-			{Name: "E", Type: 65},
-		},
-	}
-	result.Methods["EchoString"] = _gen_ipc.MethodSignature{
-		InArgs: []_gen_ipc.MethodArgument{
-			{Name: "I1", Type: 3},
-		},
-		OutArgs: []_gen_ipc.MethodArgument{
-			{Name: "O1", Type: 3},
-			{Name: "E", Type: 65},
-		},
-	}
-	result.Methods["EchoUInt32"] = _gen_ipc.MethodSignature{
-		InArgs: []_gen_ipc.MethodArgument{
-			{Name: "I1", Type: 52},
-		},
-		OutArgs: []_gen_ipc.MethodArgument{
-			{Name: "O1", Type: 52},
-			{Name: "E", Type: 65},
-		},
-	}
-	result.Methods["EchoUInt64"] = _gen_ipc.MethodSignature{
-		InArgs: []_gen_ipc.MethodArgument{
-			{Name: "I1", Type: 53},
-		},
-		OutArgs: []_gen_ipc.MethodArgument{
-			{Name: "O1", Type: 53},
-			{Name: "E", Type: 65},
-		},
-	}
 	result.Methods["InputArray"] = _gen_ipc.MethodSignature{
 		InArgs: []_gen_ipc.MethodArgument{
 			{Name: "I1", Type: 67},
@@ -602,6 +557,24 @@
 			{Name: "E", Type: 65},
 		},
 	}
+	result.Methods["Int32"] = _gen_ipc.MethodSignature{
+		InArgs: []_gen_ipc.MethodArgument{
+			{Name: "I1", Type: 36},
+		},
+		OutArgs: []_gen_ipc.MethodArgument{
+			{Name: "O1", Type: 36},
+			{Name: "E", Type: 65},
+		},
+	}
+	result.Methods["Int64"] = _gen_ipc.MethodSignature{
+		InArgs: []_gen_ipc.MethodArgument{
+			{Name: "I1", Type: 37},
+		},
+		OutArgs: []_gen_ipc.MethodArgument{
+			{Name: "O1", Type: 37},
+			{Name: "E", Type: 65},
+		},
+	}
 	result.Methods["MultipleArguments"] = _gen_ipc.MethodSignature{
 		InArgs: []_gen_ipc.MethodArgument{
 			{Name: "I1", Type: 36},
@@ -658,6 +631,33 @@
 
 		OutStream: 2,
 	}
+	result.Methods["String"] = _gen_ipc.MethodSignature{
+		InArgs: []_gen_ipc.MethodArgument{
+			{Name: "I1", Type: 3},
+		},
+		OutArgs: []_gen_ipc.MethodArgument{
+			{Name: "O1", Type: 3},
+			{Name: "E", Type: 65},
+		},
+	}
+	result.Methods["UInt32"] = _gen_ipc.MethodSignature{
+		InArgs: []_gen_ipc.MethodArgument{
+			{Name: "I1", Type: 52},
+		},
+		OutArgs: []_gen_ipc.MethodArgument{
+			{Name: "O1", Type: 52},
+			{Name: "E", Type: 65},
+		},
+	}
+	result.Methods["UInt64"] = _gen_ipc.MethodSignature{
+		InArgs: []_gen_ipc.MethodArgument{
+			{Name: "I1", Type: 53},
+		},
+		OutArgs: []_gen_ipc.MethodArgument{
+			{Name: "O1", Type: 53},
+			{Name: "E", Type: 65},
+		},
+	}
 
 	result.TypeDefs = []_gen_vdl.Any{
 		_gen_wiretype.NamedPrimitiveType{Type: 0x1, Name: "error", Tags: []string(nil)}, _gen_wiretype.NamedPrimitiveType{Type: 0x32, Name: "byte", Tags: []string(nil)}, _gen_wiretype.ArrayType{Elem: 0x42, Len: 0x2, Name: "", Tags: []string(nil)}, _gen_wiretype.MapType{Key: 0x42, Elem: 0x42, Name: "", Tags: []string(nil)}, _gen_wiretype.SliceType{Elem: 0x42, Name: "", Tags: []string(nil)}, _gen_wiretype.StructType{
@@ -689,48 +689,48 @@
 	return
 }
 
-func (__gen_s *ServerStubTypeTester) EchoBool(call _gen_ipc.ServerCall, I1 bool) (reply bool, err error) {
-	reply, err = __gen_s.service.EchoBool(call, I1)
+func (__gen_s *ServerStubTypeTester) Bool(call _gen_ipc.ServerCall, I1 bool) (reply bool, err error) {
+	reply, err = __gen_s.service.Bool(call, I1)
 	return
 }
 
-func (__gen_s *ServerStubTypeTester) EchoFloat32(call _gen_ipc.ServerCall, I1 float32) (reply float32, err error) {
-	reply, err = __gen_s.service.EchoFloat32(call, I1)
+func (__gen_s *ServerStubTypeTester) Float32(call _gen_ipc.ServerCall, I1 float32) (reply float32, err error) {
+	reply, err = __gen_s.service.Float32(call, I1)
 	return
 }
 
-func (__gen_s *ServerStubTypeTester) EchoFloat64(call _gen_ipc.ServerCall, I1 float64) (reply float64, err error) {
-	reply, err = __gen_s.service.EchoFloat64(call, I1)
+func (__gen_s *ServerStubTypeTester) Float64(call _gen_ipc.ServerCall, I1 float64) (reply float64, err error) {
+	reply, err = __gen_s.service.Float64(call, I1)
 	return
 }
 
-func (__gen_s *ServerStubTypeTester) EchoInt32(call _gen_ipc.ServerCall, I1 int32) (reply int32, err error) {
-	reply, err = __gen_s.service.EchoInt32(call, I1)
+func (__gen_s *ServerStubTypeTester) Int32(call _gen_ipc.ServerCall, I1 int32) (reply int32, err error) {
+	reply, err = __gen_s.service.Int32(call, I1)
 	return
 }
 
-func (__gen_s *ServerStubTypeTester) EchoInt64(call _gen_ipc.ServerCall, I1 int64) (reply int64, err error) {
-	reply, err = __gen_s.service.EchoInt64(call, I1)
+func (__gen_s *ServerStubTypeTester) Int64(call _gen_ipc.ServerCall, I1 int64) (reply int64, err error) {
+	reply, err = __gen_s.service.Int64(call, I1)
 	return
 }
 
-func (__gen_s *ServerStubTypeTester) EchoString(call _gen_ipc.ServerCall, I1 string) (reply string, err error) {
-	reply, err = __gen_s.service.EchoString(call, I1)
+func (__gen_s *ServerStubTypeTester) String(call _gen_ipc.ServerCall, I1 string) (reply string, err error) {
+	reply, err = __gen_s.service.String(call, I1)
 	return
 }
 
-func (__gen_s *ServerStubTypeTester) EchoByte(call _gen_ipc.ServerCall, I1 byte) (reply byte, err error) {
-	reply, err = __gen_s.service.EchoByte(call, I1)
+func (__gen_s *ServerStubTypeTester) Byte(call _gen_ipc.ServerCall, I1 byte) (reply byte, err error) {
+	reply, err = __gen_s.service.Byte(call, I1)
 	return
 }
 
-func (__gen_s *ServerStubTypeTester) EchoUInt32(call _gen_ipc.ServerCall, I1 uint32) (reply uint32, err error) {
-	reply, err = __gen_s.service.EchoUInt32(call, I1)
+func (__gen_s *ServerStubTypeTester) UInt32(call _gen_ipc.ServerCall, I1 uint32) (reply uint32, err error) {
+	reply, err = __gen_s.service.UInt32(call, I1)
 	return
 }
 
-func (__gen_s *ServerStubTypeTester) EchoUInt64(call _gen_ipc.ServerCall, I1 uint64) (reply uint64, err error) {
-	reply, err = __gen_s.service.EchoUInt64(call, I1)
+func (__gen_s *ServerStubTypeTester) UInt64(call _gen_ipc.ServerCall, I1 uint64) (reply uint64, err error) {
+	reply, err = __gen_s.service.UInt64(call, I1)
 	return
 }
 
