diff --git a/internal/pkg/afrouter/codec.go b/internal/pkg/afrouter/codec.go
index 278fc0a..b11d102 100644
--- a/internal/pkg/afrouter/codec.go
+++ b/internal/pkg/afrouter/codec.go
@@ -17,22 +17,34 @@
 package afrouter
 
 import (
-	"fmt"
 	"github.com/golang/protobuf/proto"
 	"github.com/opencord/voltha-go/common/log"
-	"google.golang.org/grpc"
+	"google.golang.org/grpc/encoding"
 )
 
-func Codec() grpc.Codec {
+/*
+ * encoding.Codec renamed grpc.Codec's String() method to Name()
+ *
+ * grpc.ForceCodec() expects an encoding.Codec, alternative use of grpc.Codec is deprecated
+ * grpc.CustomCodec() expects a grpc.Codec, has no mechanism to use encoding.Codec
+ *
+ * Make an interface that supports them both.
+ */
+type hybridCodec interface {
+	encoding.Codec
+	String() string
+}
+
+func Codec() hybridCodec {
 	return CodecWithParent(&protoCodec{})
 }
 
-func CodecWithParent(parent grpc.Codec) grpc.Codec {
+func CodecWithParent(parent encoding.Codec) hybridCodec {
 	return &transparentRoutingCodec{parent}
 }
 
 type transparentRoutingCodec struct {
-	parentCodec grpc.Codec
+	parentCodec encoding.Codec
 }
 
 // responseFrame is a frame being "returned" to whomever established the connection
@@ -74,7 +86,15 @@
 	case *responseFrame:
 		t.payload = data
 		// This is where the affinity is established on a northbound response
-		t.router.ReplyHandler(v)
+
+		/*
+		 * NOTE: Ignoring this error is intentional. MethodRouter returns
+		 *       error when a reply is not processed for northbound affinity,
+		 *       but we still need to unmarshal it.
+		 *
+		 * TODO: Investigate error-return semantics of ReplyHandler.
+		 */
+		_ = t.router.ReplyHandler(v)
 		return nil
 	case *requestFrame:
 		t.payload = data
@@ -93,8 +113,12 @@
 	}
 }
 
+func (cdc *transparentRoutingCodec) Name() string {
+	return cdc.parentCodec.Name()
+}
+
 func (cdc *transparentRoutingCodec) String() string {
-	return fmt.Sprintf("%s", cdc.parentCodec.String())
+	return cdc.Name()
 }
 
 // protoCodec is a Codec implementation with protobuf. It is the default Codec for gRPC.
@@ -108,6 +132,6 @@
 	return proto.Unmarshal(data, v.(proto.Message))
 }
 
-func (protoCodec) String() string {
+func (protoCodec) Name() string {
 	return "protoCodec"
 }
