diff --git a/afrouter/afrouter/affinity-router.go b/afrouter/afrouter/affinity-router.go
index 443a55e..30d1982 100644
--- a/afrouter/afrouter/affinity-router.go
+++ b/afrouter/afrouter/affinity-router.go
@@ -20,6 +20,7 @@
 import (
 	"fmt"
 	"errors"
+	"regexp"
 	"strconv"
 	"io/ioutil"
 	"google.golang.org/grpc"
@@ -28,6 +29,11 @@
 	pb "github.com/golang/protobuf/protoc-gen-go/descriptor"
 )
 
+const (
+	PKG_MTHD_PKG int = 1
+	PKG_MTHD_MTHD int = 2
+)
+
 type AffinityRouter struct {
 	name string
 	routerType int // TODO: This is probably not needed 
@@ -45,6 +51,7 @@
 func newAffinityRouter(rconf *RouterConfig, config *RouteConfig) (Router,error) {
 	var err error = nil
 	var rtrn_err bool = false
+	var pkg_re *regexp.Regexp = regexp.MustCompile(`^(\.[^.]+\.)(.+)$`)
 	// Validate the configuration
 
 	// A name must exist
@@ -150,8 +157,14 @@
 						// Determine if this is a method we're supposed to be processing.
 						if needMethod(*m.Name, config) == true {
 							log.Debugf("Enabling method '%s'",*m.Name)
+							pkg_methd := pkg_re.FindStringSubmatch(*m.InputType)
+							if pkg_methd == nil {
+								log.Errorf("Regular expression didn't match input type '%s'",*m.InputType)
+								rtrn_err = true
+							}
 							// The input type has the package name prepended to it. Remove it.
-							in := (*m.InputType)[len(rconf.ProtoPackage)+2:]
+							//in := (*m.InputType)[len(rconf.ProtoPackage)+2:]
+							in := pkg_methd[PKG_MTHD_MTHD]
 							dr.methodMap[*m.Name], ok = msgs[key{in, config.RouteField}]
 							if ok == false {
 								log.Errorf("Method '%s' has no field named '%s' in it's parameter message '%s'",
@@ -243,7 +256,7 @@
 func (r AffinityRouter) decodeProtoField(payload []byte, fieldId byte) (string, error) {
 	idx :=0
 	b := proto.NewBuffer([]byte{})
-	b.DebugPrint("The Buffer", payload)
+	//b.DebugPrint("The Buffer", payload)
 	for { // Find the route selector field
 		log.Debugf("Decoding afinity value attributeNumber: %d from %v at index %d", fieldId, payload, idx)
 		log.Debugf("Attempting match with payload: %d, methodTable: %d", payload[idx], fieldId)
@@ -305,6 +318,7 @@
 			}
 			// Not a south affinity binding method, proceed with north affinity binding.
 			if selector,err := r.decodeProtoField(sl.payload, r.methodMap[sl.mthdSlice[REQ_METHOD]]); err == nil {
+				log.Debugf("Establishing affinity for selector: %s", selector)
 				if rtrn,ok := r.affinity[selector]; ok {
 					return rtrn
 				} else {
diff --git a/afrouter/afrouter/api.go b/afrouter/afrouter/api.go
index 7f7ba54..5766e8d 100644
--- a/afrouter/afrouter/api.go
+++ b/afrouter/afrouter/api.go
@@ -20,8 +20,9 @@
 import (
 	"net"
 	"fmt"
-	"strconv"
 	"errors"
+	"runtime"
+	"strconv"
 	"google.golang.org/grpc"
 	"golang.org/x/net/context"
 	"github.com/opencord/voltha-go/common/log"
@@ -217,6 +218,10 @@
 	return &pb.Result{Success:true,Error:""},nil
 }
 
+func (aa ArouterApi) GetGoroutineCount(ctx context.Context, in *pb.Empty) (*pb.Count, error) {
+	return &pb.Count{Count:uint32(runtime.NumGoroutine())}, nil
+}
+
 func (aa *ArouterApi) serve() {
 	// Start a serving thread
 	go func() {
diff --git a/afrouter/afrouter/method-router.go b/afrouter/afrouter/method-router.go
index e4824da..379bf11 100644
--- a/afrouter/afrouter/method-router.go
+++ b/afrouter/afrouter/method-router.go
@@ -36,10 +36,12 @@
 func newMethodRouter(config *RouterConfig) (Router, error) {
 	mr := MethodRouter{name:config.Name,service:config.ProtoService,mthdRt:make(map[string]map[string]Router)}
 	mr.mthdRt[NoMeta] = make(map[string]Router) // For routes not needing metadata (all expcept binding at this time)
+	log.Debugf("Processing MethodRouter config %v", *config)
 	if len(config.Routes) == 0 {
 		return nil, errors.New(fmt.Sprintf("Router %s must have at least one route", config.Name))
 	}
 	for _,rtv := range config.Routes {
+		//log.Debugf("Processing route: %v",rtv)
 		var idx1 string
 		r,err := newSubRouter(config, &rtv)
 		if err != nil {
@@ -61,24 +63,24 @@
 				return r, nil
 			} else {
 				log.Debugf("Setting router '%s' for single method '%s'",r.Name(),rtv.Methods[0])
-				if _,ok := mr.mthdRt[""][rtv.Methods[0]]; ok == false {
+				if _,ok := mr.mthdRt[idx1][rtv.Methods[0]]; ok == false {
 					mr.mthdRt[idx1][rtv.Methods[0]] = r
 				} else {
 					err := errors.New(fmt.Sprintf("Attempt to define method %s for 2 routes: %s & %s", rtv.Methods[0],
 						r.Name(), mr.mthdRt[idx1][rtv.Methods[0]].Name()))
-					log.Debug(err)
+					log.Error(err)
 					return mr, err
 				}
 			}
 		default:
 			for _,m := range rtv.Methods {
-				log.Debugf("Setting router '%s' for method '%s'",r.Name(),m)
+				log.Debugf("Processing Method %s", m)
 				if _,ok := mr.mthdRt[idx1][m]; ok == false {
+					log.Debugf("Setting router '%s' for method '%s'",r.Name(),m)
 					mr.mthdRt[idx1][m] = r
 				} else {
-					err := errors.New(fmt.Sprintf("Attempt to define method %s for 2 routes: %s & %s", rtv.Methods[0],
-						r.Name(), mr.mthdRt[idx1][m].Name()))
-					log.Debug(err)
+					err := errors.New(fmt.Sprintf("Attempt to define method %s for 2 routes: %s & %s", m, r.Name(), mr.mthdRt[idx1][m].Name()))
+					log.Error(err)
 					return mr, err
 				}
 			}
