diff --git a/runtimes/google/ipc/benchmark/glob/glob_test.go b/runtimes/google/ipc/benchmark/glob/glob_test.go
index 675ed30..8b81e4e 100644
--- a/runtimes/google/ipc/benchmark/glob/glob_test.go
+++ b/runtimes/google/ipc/benchmark/glob/glob_test.go
@@ -148,10 +148,10 @@
 		count++
 	}
 	b.StopTimer()
-	if ferr := call.Finish(&err); ferr != nil {
-		err = ferr
+	if err := call.Finish(); err != nil {
+		return 0, err
 	}
-	return count, err
+	return count, nil
 }
 
 func RunBenchmarkGlob(b *testing.B, obj interface{}) {
diff --git a/runtimes/google/ipc/benchmark/service.vdl.go b/runtimes/google/ipc/benchmark/service.vdl.go
index 76759b4..982b669 100644
--- a/runtimes/google/ipc/benchmark/service.vdl.go
+++ b/runtimes/google/ipc/benchmark/service.vdl.go
@@ -60,9 +60,7 @@
 	if call, err = c.c(ctx).StartCall(ctx, c.name, "Echo", []interface{}{i0}, opts...); err != nil {
 		return
 	}
-	if ierr := call.Finish(&o0, &err); ierr != nil {
-		err = ierr
-	}
+	err = call.Finish(&o0)
 	return
 }
 
@@ -173,9 +171,7 @@
 	return c.c.CloseSend()
 }
 func (c *implBenchmarkEchoStreamCall) Finish() (err error) {
-	if ierr := c.Call.Finish(&err); ierr != nil {
-		err = ierr
-	}
+	err = c.Call.Finish()
 	return
 }
 
@@ -260,16 +256,12 @@
 			},
 			OutArgs: []ipc.ArgDesc{
 				{"", ``}, // []byte
-				{"", ``}, // error
 			},
 			Tags: []vdl.AnyRep{access.Tag("Read")},
 		},
 		{
 			Name: "EchoStream",
 			Doc:  "// EchoStream returns the payload that it receives via the stream.",
-			OutArgs: []ipc.ArgDesc{
-				{"", ``}, // error
-			},
 			Tags: []vdl.AnyRep{access.Tag("Read")},
 		},
 	},
diff --git a/runtimes/google/ipc/client_test.go b/runtimes/google/ipc/client_test.go
index 9923130..1fa37b7 100644
--- a/runtimes/google/ipc/client_test.go
+++ b/runtimes/google/ipc/client_test.go
@@ -175,11 +175,7 @@
 		fmt.Errorf("unexpected error: %s", err)
 	}
 	got := ""
-	verr := call.Finish(&got, &err)
-	if verr != nil {
-		fmt.Errorf("unexpected error: %s", verr)
-	}
-	if err != nil {
+	if err := call.Finish(&got); err != nil {
 		fmt.Errorf("unexpected error: %s", err)
 	}
 	fmt.Fprintf(stdout, "RESULT=%s\n", got)
@@ -228,8 +224,8 @@
 		testForVerror(t, err, verror.ErrTimeout)
 		return
 	}
-	verr := call.Finish(&err)
-	testForVerror(t, verr, verror.ErrTimeout)
+	err = call.Finish()
+	testForVerror(t, err, verror.ErrTimeout)
 }
 
 func TestArgsAndResponses(t *testing.T) {
@@ -242,8 +238,8 @@
 	if err != nil {
 		t.Fatalf("unexpected error: %s", err)
 	}
-	verr := call.Finish(&err)
-	testForVerror(t, verr, verror.ErrBadProtocol)
+	err = call.Finish()
+	testForVerror(t, err, verror.ErrBadProtocol)
 
 	call, err = veyron2.GetClient(ctx).StartCall(ctx, name, "Ping", nil)
 	if err != nil {
@@ -251,8 +247,8 @@
 	}
 	pong := ""
 	dummy := ""
-	verr = call.Finish(&pong, &dummy, &err)
-	testForVerror(t, verr, verror.ErrBadProtocol)
+	err = call.Finish(&pong, &dummy)
+	testForVerror(t, err, verror.ErrBadProtocol)
 }
 
 func TestAccessDenied(t *testing.T) {
@@ -270,8 +266,8 @@
 	if err != nil {
 		t.Fatalf("unexpected error: %s", err)
 	}
-	verr := call.Finish(&err)
-	testForVerror(t, verr, verror.ErrNoAccess)
+	err = call.Finish()
+	testForVerror(t, err, verror.ErrNoAccess)
 }
 
 func TestCanceledBeforeFinish(t *testing.T) {
@@ -287,9 +283,9 @@
 	}
 	// Cancel before we call finish.
 	cancel()
-	verr := call.Finish(&err)
+	err = call.Finish()
 	// TOO(cnicolaou): this should be Canceled only.
-	testForVerror(t, verr, verror.ErrCanceled)
+	testForVerror(t, err, verror.ErrCanceled)
 }
 
 func TestCanceledDuringFinish(t *testing.T) {
@@ -308,8 +304,8 @@
 		time.Sleep(100 * time.Millisecond)
 		cancel()
 	}()
-	verr := call.Finish(&err)
-	testForVerror(t, verr, verror.ErrCanceled)
+	err = call.Finish()
+	testForVerror(t, err, verror.ErrCanceled)
 }
 
 func TestRendezvous(t *testing.T) {
@@ -338,9 +334,8 @@
 	}
 
 	response := ""
-	verr := call.Finish(&response, &err)
-	if verr != nil {
-		testForVerror(t, verr, verror.ErrCanceled)
+	if err := call.Finish(&response); err != nil {
+		testForVerror(t, err, verror.ErrCanceled)
 		return
 	}
 	if got, want := response, "message: hello\n"; got != want {
@@ -398,8 +393,8 @@
 		testForVerror(t, err, verror.ErrTimeout)
 		break
 	}
-	verr := call.Finish(&err)
-	testForVerror(t, verr, verror.ErrTimeout)
+	err = call.Finish()
+	testForVerror(t, err, verror.ErrTimeout)
 }
 
 func TestStreamAbort(t *testing.T) {
@@ -420,22 +415,14 @@
 		}
 	}
 	call.CloseSend()
-	verr := call.Send(100)
-	testForVerror(t, verr, verror.ErrAborted)
+	err = call.Send(100)
+	testForVerror(t, err, verror.ErrAborted)
 
 	result := 0
-	verr = call.Finish(&result, &err)
-	if verr != nil {
-		t.Fatalf("unexpected error: %s", verr)
+	err = call.Finish(&result)
+	if err != nil {
+		t.Errorf("unexpected error: %#v", err)
 	}
-	if !verror.Is(err, verror.ErrUnknown.ID) || err.Error() != `v.io/core/veyron2/verror.Unknown:   EOF` {
-		t.Errorf("wrong error: %#v", err)
-	}
-	/* TODO(cnicolaou): use this when verror/vom transition is done.
-	if err != nil && !verror.Is(err, verror.EOF.ID) {
-		t.Fatalf("unexpected error: %#v", err)
-	}
-	*/
 	if got := result; got != want {
 		t.Errorf("got %d, want %d", got, want)
 	}
@@ -448,12 +435,12 @@
 	defer fn()
 	name := "noservers"
 	ctx, _ = context.WithTimeout(ctx, 1000*time.Millisecond)
-	call, verr := veyron2.GetClient(ctx).StartCall(ctx, name, "Sleep", nil)
-	if verr != nil {
-		testForVerror(t, verr, verror.ErrNoServers)
+	call, err := veyron2.GetClient(ctx).StartCall(ctx, name, "Sleep", nil)
+	if err != nil {
+		testForVerror(t, err, verror.ErrNoServers)
 		return
 	}
-	err := call.Finish(&verr)
+	err = call.Finish()
 	testForVerror(t, err, verror.ErrNoServers)
 }
 
@@ -465,8 +452,8 @@
 
 	// If there is no mount table, then we'll get a NoServers error message.
 	ctx, _ = context.WithTimeout(ctx, 300*time.Millisecond)
-	_, verr := veyron2.GetClient(ctx).StartCall(ctx, name, "Sleep", nil)
-	testForVerror(t, verr, verror.ErrNoServers)
+	_, err := veyron2.GetClient(ctx).StartCall(ctx, name, "Sleep", nil)
+	testForVerror(t, err, verror.ErrNoServers)
 }
 
 // TestReconnect verifies that the client transparently re-establishes the
@@ -498,8 +485,7 @@
 			return "", fmt.Errorf("START: %s", err)
 		}
 		var result string
-		var rerr error
-		if err = call.Finish(&result, &rerr); err != nil {
+		if err := call.Finish(&result); err != nil {
 			return "", err
 		}
 		return result, nil
diff --git a/runtimes/google/ipc/debug_test.go b/runtimes/google/ipc/debug_test.go
index e351242..a76b913 100644
--- a/runtimes/google/ipc/debug_test.go
+++ b/runtimes/google/ipc/debug_test.go
@@ -61,8 +61,8 @@
 			t.Fatalf("client.StartCall failed: %v", err)
 		}
 		var value string
-		if ferr := call.Finish(&value); ferr != nil {
-			t.Fatalf("call.Finish failed: %v", ferr)
+		if err := call.Finish(&value); err != nil {
+			t.Fatalf("call.Finish failed: %v", err)
 		}
 		if want := "BAR"; value != want {
 			t.Errorf("unexpected value: Got %v, want %v", value, want)
@@ -78,11 +78,8 @@
 			t.Fatalf("client.StartCall failed: %v", err)
 		}
 		var value string
-		if ferr := call.Finish(&value, &err); ferr != nil {
-			t.Fatalf("call.Finish failed: %v", ferr)
-		}
-		if err != nil {
-			t.Fatalf("unexpected error: %v", err)
+		if err := call.Finish(&value); err != nil {
+			t.Fatalf("call.Finish failed: %v", err)
 		}
 		if want := foo.Value(); value != want {
 			t.Errorf("unexpected result: Got %v, want %v", value, want)
@@ -116,8 +113,8 @@
 			}
 			results = append(results, me.Name)
 		}
-		if ferr := call.Finish(&err); ferr != nil {
-			t.Fatalf("call.Finish failed for %q: %v", tc.name, ferr)
+		if err := call.Finish(); err != nil {
+			t.Fatalf("call.Finish failed for %q: %v", tc.name, err)
 		}
 		sort.Strings(results)
 		if !reflect.DeepEqual(tc.expected, results) {
@@ -129,6 +126,6 @@
 type testObject struct {
 }
 
-func (o testObject) Foo(ipc.ServerContext) string {
-	return "BAR"
+func (o testObject) Foo(ipc.ServerContext) (string, error) {
+	return "BAR", nil
 }
diff --git a/runtimes/google/ipc/discharges.go b/runtimes/google/ipc/discharges.go
index 5bf42f7..7cb3155 100644
--- a/runtimes/google/ipc/discharges.go
+++ b/runtimes/google/ipc/discharges.go
@@ -114,8 +114,8 @@
 					return
 				}
 				var wire security.WireDischarge
-				if ierr := call.Finish(&wire, &err); ierr != nil || err != nil {
-					vlog.VI(3).Infof("Discharge fetch for %v failed: (%v, %v)", cav, err, ierr)
+				if err := call.Finish(&wire); err != nil {
+					vlog.VI(3).Infof("Discharge fetch for %v failed: (%v)", cav, err)
 					return
 				}
 				d, err := security.NewDischarge(wire)
diff --git a/runtimes/google/ipc/full_test.go b/runtimes/google/ipc/full_test.go
index e5ae443..2fc49da 100644
--- a/runtimes/google/ipc/full_test.go
+++ b/runtimes/google/ipc/full_test.go
@@ -100,29 +100,30 @@
 
 type testServer struct{}
 
-func (*testServer) Closure(ctx ipc.ServerContext) {
+func (*testServer) Closure(ctx ipc.ServerContext) error {
+	return nil
 }
 
 func (*testServer) Error(ctx ipc.ServerContext) error {
 	return errMethod
 }
 
-func (*testServer) Echo(ctx ipc.ServerContext, arg string) string {
-	return fmt.Sprintf("method:%q,suffix:%q,arg:%q", ctx.Method(), ctx.Suffix(), arg)
+func (*testServer) Echo(ctx ipc.ServerContext, arg string) (string, error) {
+	return fmt.Sprintf("method:%q,suffix:%q,arg:%q", ctx.Method(), ctx.Suffix(), arg), nil
 }
 
-func (*testServer) EchoUser(ctx ipc.ServerContext, arg string, u userType) (string, userType) {
-	return fmt.Sprintf("method:%q,suffix:%q,arg:%q", ctx.Method(), ctx.Suffix(), arg), u
+func (*testServer) EchoUser(ctx ipc.ServerContext, arg string, u userType) (string, userType, error) {
+	return fmt.Sprintf("method:%q,suffix:%q,arg:%q", ctx.Method(), ctx.Suffix(), arg), u, nil
 }
 
-func (*testServer) EchoBlessings(ctx ipc.ServerContext) (server, client string) {
+func (*testServer) EchoBlessings(ctx ipc.ServerContext) (server, client string, _ error) {
 	local, _ := ctx.LocalBlessings().ForContext(ctx)
 	remote, _ := ctx.RemoteBlessings().ForContext(ctx)
-	return fmt.Sprintf("%v", local), fmt.Sprintf("%v", remote)
+	return fmt.Sprintf("%v", local), fmt.Sprintf("%v", remote), nil
 }
 
-func (*testServer) EchoGrantedBlessings(ctx ipc.ServerContext, arg string) (result, blessing string) {
-	return arg, fmt.Sprintf("%v", ctx.Blessings())
+func (*testServer) EchoGrantedBlessings(ctx ipc.ServerContext, arg string) (result, blessing string, _ error) {
+	return arg, fmt.Sprintf("%v", ctx.Blessings()), nil
 }
 
 func (*testServer) EchoAndError(ctx ipc.ServerContext, arg string) (string, error) {
@@ -150,7 +151,7 @@
 }
 
 func (*testServer) Unauthorized(ipc.ServerCall) (string, error) {
-	return "UnauthorizedResult", fmt.Errorf("Unauthorized should never be called")
+	return "UnauthorizedResult", nil
 }
 
 type testServerAuthorizer struct{}
@@ -652,18 +653,18 @@
 	var (
 		tests = []testcase{
 			{"mountpoint/server/suffix", "Closure", nil, nil, nil, nil, nil},
-			{"mountpoint/server/suffix", "Error", nil, nil, nil, v{errMethod}, nil},
+			{"mountpoint/server/suffix", "Error", nil, nil, nil, nil, errMethod},
 
 			{"mountpoint/server/suffix", "Echo", v{"foo"}, nil, nil, v{`method:"Echo",suffix:"suffix",arg:"foo"`}, nil},
 			{"mountpoint/server/suffix/abc", "Echo", v{"bar"}, nil, nil, v{`method:"Echo",suffix:"suffix/abc",arg:"bar"`}, nil},
 
 			{"mountpoint/server/suffix", "EchoUser", v{"foo", userType("bar")}, nil, nil, v{`method:"EchoUser",suffix:"suffix",arg:"foo"`, userType("bar")}, nil},
 			{"mountpoint/server/suffix/abc", "EchoUser", v{"baz", userType("bla")}, nil, nil, v{`method:"EchoUser",suffix:"suffix/abc",arg:"baz"`, userType("bla")}, nil},
-			{"mountpoint/server/suffix", "Stream", v{"foo"}, v{userType("bar"), userType("baz")}, nil, v{`method:"Stream",suffix:"suffix",arg:"foo" bar baz`, nil}, nil},
-			{"mountpoint/server/suffix/abc", "Stream", v{"123"}, v{userType("456"), userType("789")}, nil, v{`method:"Stream",suffix:"suffix/abc",arg:"123" 456 789`, nil}, nil},
+			{"mountpoint/server/suffix", "Stream", v{"foo"}, v{userType("bar"), userType("baz")}, nil, v{`method:"Stream",suffix:"suffix",arg:"foo" bar baz`}, nil},
+			{"mountpoint/server/suffix/abc", "Stream", v{"123"}, v{userType("456"), userType("789")}, nil, v{`method:"Stream",suffix:"suffix/abc",arg:"123" 456 789`}, nil},
 			{"mountpoint/server/suffix", "EchoBlessings", nil, nil, nil, v{"[server]", "[client]"}, nil},
-			{"mountpoint/server/suffix", "EchoAndError", v{"bugs bunny"}, nil, nil, v{`method:"EchoAndError",suffix:"suffix",arg:"bugs bunny"`, nil}, nil},
-			{"mountpoint/server/suffix", "EchoAndError", v{"error"}, nil, nil, v{`method:"EchoAndError",suffix:"suffix",arg:"error"`, errMethod}, nil},
+			{"mountpoint/server/suffix", "EchoAndError", v{"bugs bunny"}, nil, nil, v{`method:"EchoAndError",suffix:"suffix",arg:"bugs bunny"`}, nil},
+			{"mountpoint/server/suffix", "EchoAndError", v{"error"}, nil, nil, nil, errMethod},
 		}
 		name = func(t testcase) string {
 			return fmt.Sprintf("%s.%s(%v)", t.name, t.method, t.args)
@@ -725,8 +726,10 @@
 		vlog.VI(1).Infof("%s client.Finish", name(test))
 		results := makeResultPtrs(test.results)
 		err = call.Finish(results...)
-		if err != test.finishErr {
-			t.Errorf(`%s call.Finish got error "%v", want "%v"`, name(test), err, test.finishErr)
+		if got, want := err, test.finishErr; (got == nil) != (want == nil) {
+			t.Errorf(`%s call.Finish got error "%v", want "%v'`, name(test), got, want)
+		} else if want != nil && !verror.Is(got, verror.ErrorID(want)) {
+			t.Errorf(`%s call.Finish got error "%v", want "%v"`, name(test), got, want)
 		}
 		checkResultPtrs(t, name(test), results, test.results)
 	}
@@ -1427,8 +1430,7 @@
 		t.Fatalf("client.StartCall failed: %v", err)
 	}
 	var got string
-	var ierr error
-	if err := call.Finish(&got, &ierr); err != nil {
+	if err := call.Finish(&got); err != nil {
 		t.Errorf("call.Finish failed: %v", err)
 	}
 	if want := "UnauthorizedResult"; got != want {
diff --git a/runtimes/google/ipc/proxy_test.go b/runtimes/google/ipc/proxy_test.go
index 7207320..0795737 100644
--- a/runtimes/google/ipc/proxy_test.go
+++ b/runtimes/google/ipc/proxy_test.go
@@ -48,8 +48,8 @@
 
 type testServer struct{}
 
-func (*testServer) Echo(ctx ipc.ServerContext, arg string) string {
-	return fmt.Sprintf("method:%q,suffix:%q,arg:%q", ctx.Method(), ctx.Suffix(), arg)
+func (*testServer) Echo(ctx ipc.ServerContext, arg string) (string, error) {
+	return fmt.Sprintf("method:%q,suffix:%q,arg:%q", ctx.Method(), ctx.Suffix(), arg), nil
 }
 
 type testServerAuthorizer struct{}
diff --git a/runtimes/google/ipc/server_test.go b/runtimes/google/ipc/server_test.go
index 5575b30..320f9e1 100644
--- a/runtimes/google/ipc/server_test.go
+++ b/runtimes/google/ipc/server_test.go
@@ -76,8 +76,7 @@
 		t.Fatalf("StartCall failed: %v", err)
 	}
 	var result string
-	var rerr error
-	if err = call.Finish(&result, &rerr); err == nil {
+	if err := call.Finish(&result); err == nil {
 		// TODO(caprita): Check the error type rather than
 		// merely ensuring the test doesn't panic.
 		t.Fatalf("should have failed")
@@ -125,8 +124,9 @@
 
 type statusServer struct{ ch chan struct{} }
 
-func (s *statusServer) Hang(ctx ipc.ServerContext) {
+func (s *statusServer) Hang(ctx ipc.ServerContext) error {
 	<-s.ch
+	return nil
 }
 
 func TestServerStatus(t *testing.T) {
diff --git a/runtimes/google/ipc/signature_test.go b/runtimes/google/ipc/signature_test.go
index 7dcc056..12215eb 100644
--- a/runtimes/google/ipc/signature_test.go
+++ b/runtimes/google/ipc/signature_test.go
@@ -34,10 +34,10 @@
 
 type sigImpl struct{}
 
-func (sigImpl) NonStreaming0(ipc.ServerContext)                          { panic("X") }
-func (sigImpl) NonStreaming1(_ ipc.ServerContext, _ string) error        { panic("X") }
-func (sigImpl) Streaming0(_ *streamStringBool)                           { panic("X") }
-func (sigImpl) Streaming1(_ *streamStringBool, _ int64) (float64, error) { panic("X") }
+func (sigImpl) NonStreaming0(ipc.ServerContext) error                      { panic("X") }
+func (sigImpl) NonStreaming1(_ ipc.ServerContext, _ string) (int64, error) { panic("X") }
+func (sigImpl) Streaming0(_ *streamStringBool) error                       { panic("X") }
+func (sigImpl) Streaming1(_ *streamStringBool, _ int64) (float64, error)   { panic("X") }
 
 type streamStringBool struct{ ipc.ServerCall }
 
@@ -75,7 +75,7 @@
 		{"NonStreaming1", signature.Method{
 			Name:    "NonStreaming1",
 			InArgs:  []signature.Arg{{Type: vdl.StringType}},
-			OutArgs: []signature.Arg{{Type: vdl.ErrorType}},
+			OutArgs: []signature.Arg{{Type: vdl.Int64Type}},
 		}},
 		{"Streaming0", signature.Method{
 			Name:      "Streaming0",
@@ -85,7 +85,7 @@
 		{"Streaming1", signature.Method{
 			Name:      "Streaming1",
 			InArgs:    []signature.Arg{{Type: vdl.Int64Type}},
-			OutArgs:   []signature.Arg{{Type: vdl.Float64Type}, {Type: vdl.ErrorType}},
+			OutArgs:   []signature.Arg{{Type: vdl.Float64Type}},
 			InStream:  &signature.Arg{Type: vdl.StringType},
 			OutStream: &signature.Arg{Type: vdl.BoolType},
 		}},
@@ -127,7 +127,7 @@
 			{
 				Name:    "NonStreaming1",
 				InArgs:  []signature.Arg{{Type: vdl.StringType}},
-				OutArgs: []signature.Arg{{Type: vdl.ErrorType}},
+				OutArgs: []signature.Arg{{Type: vdl.Int64Type}},
 			},
 			{
 				Name:      "Streaming0",
@@ -137,7 +137,7 @@
 			{
 				Name:      "Streaming1",
 				InArgs:    []signature.Arg{{Type: vdl.Int64Type}},
-				OutArgs:   []signature.Arg{{Type: vdl.Float64Type}, {Type: vdl.ErrorType}},
+				OutArgs:   []signature.Arg{{Type: vdl.Float64Type}},
 				InStream:  &signature.Arg{Type: vdl.StringType},
 				OutStream: &signature.Arg{Type: vdl.BoolType},
 			},
diff --git a/runtimes/google/ipc/simple_test.go b/runtimes/google/ipc/simple_test.go
index c5bf45c..f8546e8 100644
--- a/runtimes/google/ipc/simple_test.go
+++ b/runtimes/google/ipc/simple_test.go
@@ -7,7 +7,6 @@
 
 	"v.io/core/veyron2"
 	"v.io/core/veyron2/ipc"
-	"v.io/core/veyron2/verror"
 )
 
 type simple struct {
@@ -45,7 +44,10 @@
 	i := 0
 	for {
 		if err := call.Recv(&i); err != nil {
-			return i, err
+			if err == io.EOF {
+				return i, nil
+			}
+			return 0, err
 		}
 	}
 }
@@ -55,12 +57,9 @@
 	for {
 		if err := call.Recv(&i); err != nil {
 			if err == io.EOF {
-				// TODO(cnicolaou): this should return a verror, i.e.
-				// verror.New(verror.EOF, call), but for now we
-				// return an io.EOF
-				return i, io.EOF
+				return i, nil
 			}
-			return i, err
+			return 0, err
 		}
 		call.Send(i + inc)
 	}
@@ -78,9 +77,7 @@
 		t.Fatalf("unexpected error: %s", err)
 	}
 	response := ""
-	var verr error
-	err = call.Finish(&response, &verr)
-	if err != nil {
+	if err := call.Finish(&response); err != nil {
 		t.Fatalf("unexpected error: %s", err)
 	}
 	if got, want := response, "pong"; got != want {
@@ -115,20 +112,11 @@
 	}
 	call.CloseSend()
 	final := -1
-	verr := call.Finish(&final, &err)
-	if verr != nil {
-		t.Fatalf("unexpected error: %s", verr)
-
+	err = call.Finish(&final)
+	if err != nil {
+		t.Errorf("unexpected error: %#v", err)
 	}
-	if !verror.Is(err, verror.ErrUnknown.ID) || err.Error() != `v.io/core/veyron2/verror.Unknown:   EOF` {
-		t.Errorf("wrong error: %#v", err)
-	}
-	/* TODO(cnicolaou): use this when verror/vom transition is done.
-	if err != nil && !verror.Is(err, verror.EOF.ID) {
-		t.Fatalf("unexpected error: %#v", err)
-	}
-	*/
 	if got := final; got != want {
-		t.Fatalf("got %d, want %d")
+		t.Fatalf("got %d, want %d", got, want)
 	}
 }
diff --git a/runtimes/google/naming/namespace/all_test.go b/runtimes/google/naming/namespace/all_test.go
index ab41beb..5790aef 100644
--- a/runtimes/google/naming/namespace/all_test.go
+++ b/runtimes/google/naming/namespace/all_test.go
@@ -101,8 +101,8 @@
 	suffix string
 }
 
-func (testServer) KnockKnock(ctx ipc.ServerContext) string {
-	return "Who's there?"
+func (testServer) KnockKnock(ctx ipc.ServerContext) (string, error) {
+	return "Who's there?", nil
 }
 
 // testServer has the following namespace:
diff --git a/runtimes/google/naming/namespace/glob.go b/runtimes/google/naming/namespace/glob.go
index 3d81e58..96bfc95 100644
--- a/runtimes/google/naming/namespace/glob.go
+++ b/runtimes/google/naming/namespace/glob.go
@@ -122,12 +122,7 @@
 		}
 		replies <- x
 	}
-
-	var globerr error
-	if err := call.Finish(&globerr); err != nil {
-		globerr = err
-	}
-	t.error = globerr
+	t.error = call.Finish()
 	return
 }
 
diff --git a/runtimes/google/naming/namespace/mount.go b/runtimes/google/naming/namespace/mount.go
index 55a5027..f1abe25 100644
--- a/runtimes/google/naming/namespace/mount.go
+++ b/runtimes/google/naming/namespace/mount.go
@@ -29,9 +29,7 @@
 	if err != nil {
 		return
 	}
-	if ierr := call.Finish(&s.err); ierr != nil {
-		s.err = ierr
-	}
+	s.err = call.Finish()
 	return
 }
 
@@ -44,9 +42,7 @@
 	if err != nil {
 		return
 	}
-	if ierr := call.Finish(&err); ierr != nil {
-		s.err = ierr
-	}
+	s.err = call.Finish()
 	return
 }
 
diff --git a/runtimes/google/naming/namespace/resolve.go b/runtimes/google/naming/namespace/resolve.go
index 8c4bfec..3ff22bb 100644
--- a/runtimes/google/naming/namespace/resolve.go
+++ b/runtimes/google/naming/namespace/resolve.go
@@ -38,18 +38,12 @@
 			continue
 		}
 		var entry naming.VDLMountEntry
-		ierr := call.Finish(&entry, &err)
-		if ierr != nil {
-			// Internal/system error.
-			finalErr = ierr
-			vlog.VI(2).Infof("ResolveStep.Finish %s failed: %s", name, ierr)
-			continue
-		}
-		// If any replica says the name doesn't exist, return that fact.
-		if err != nil {
+		if err := call.Finish(&entry); err != nil {
+			// If any replica says the name doesn't exist, return that fact.
 			if verror.Is(err, naming.ErrNoSuchName.ID) || verror.Is(err, naming.ErrNoSuchNameRoot.ID) {
 				return nil, err
 			}
+			// Keep track of the final error and continue with next server.
 			finalErr = err
 			vlog.VI(2).Infof("ResolveStep %s failed: %s", name, err)
 			continue
diff --git a/runtimes/google/rt/ipc_test.go b/runtimes/google/rt/ipc_test.go
index 102b978..c985e04 100644
--- a/runtimes/google/rt/ipc_test.go
+++ b/runtimes/google/rt/ipc_test.go
@@ -22,9 +22,9 @@
 
 type testService struct{}
 
-func (testService) EchoBlessings(call ipc.ServerContext) []string {
+func (testService) EchoBlessings(call ipc.ServerContext) ([]string, error) {
 	b, _ := call.RemoteBlessings().ForContext(call)
-	return b
+	return b, nil
 }
 
 type dischargeService struct{}
diff --git a/runtimes/google/rt/mgmt.go b/runtimes/google/rt/mgmt.go
index 56240d6..54926a7 100644
--- a/runtimes/google/rt/mgmt.go
+++ b/runtimes/google/rt/mgmt.go
@@ -84,12 +84,8 @@
 func (rt *Runtime) callbackToParent(ctx *context.T, parentName, myName string) error {
 	ctx, _ = context.WithTimeout(ctx, time.Minute)
 	call, err := rt.GetClient(ctx).StartCall(ctx, parentName, "Set", []interface{}{mgmt.AppCycleManagerConfigKey, myName})
-
 	if err != nil {
 		return err
 	}
-	if ierr := call.Finish(&err); ierr != nil {
-		return ierr
-	}
-	return err
+	return call.Finish()
 }
diff --git a/runtimes/google/vtrace/vtrace_test.go b/runtimes/google/vtrace/vtrace_test.go
index bfc442e..8ef5ece 100644
--- a/runtimes/google/vtrace/vtrace_test.go
+++ b/runtimes/google/vtrace/vtrace_test.go
@@ -73,15 +73,10 @@
 			vlog.Error(err)
 			return err
 		}
-		var outerr error
-		if err = call.Finish(&outerr); err != nil {
+		if err := call.Finish(); err != nil {
 			vlog.Error(err)
 			return err
 		}
-		if outerr != nil {
-			vlog.Error(outerr)
-			return outerr
-		}
 	}
 	vtrace.GetSpan(ctx.Context()).Annotate(c.name + "-end")
 
@@ -221,13 +216,9 @@
 	if err != nil {
 		t.Fatal("can't call: ", err)
 	}
-	var outerr error
-	if err = call.Finish(&outerr); err != nil {
+	if err := call.Finish(); err != nil {
 		t.Error(err)
 	}
-	if outerr != nil {
-		t.Error(outerr)
-	}
 }
 
 // TestCancellationPropagation tests that cancellation propogates along an
