diff --git a/afrouter/afrouter/router.go b/afrouter/afrouter/router.go
index f1e729f..f71bd30 100644
--- a/afrouter/afrouter/router.go
+++ b/afrouter/afrouter/router.go
@@ -18,38 +18,38 @@
 package afrouter
 
 import (
-	"fmt"
 	"errors"
+	"fmt"
 	"google.golang.org/grpc"
 )
 
 const (
-    RT_RPC_AFFINITY_MESSAGE = iota+1
-    RT_RPC_AFFINITY_HEADER = iota+1
-    RT_BINDING = iota+1
-	RT_ROUND_ROBIN = iota+1
+	RT_RPC_AFFINITY_MESSAGE = iota + 1
+	RT_RPC_AFFINITY_HEADER  = iota + 1
+	RT_BINDING              = iota + 1
+	RT_ROUND_ROBIN          = iota + 1
 )
 
 // String names for display in error messages.
-var rTypeNames = []string{"","rpc_affinity_message","rpc_affinity_header","binding", "round_robin"}
-var rAssnNames = []string{"","round_robin"}
+var rTypeNames = []string{"", "rpc_affinity_message", "rpc_affinity_header", "binding", "round_robin"}
+var rAssnNames = []string{"", "round_robin"}
 
 var allRouters map[string]Router = make(map[string]Router)
 
 // The router interface
 type Router interface {
-	Name() (string)
+	Name() string
 	Route(interface{}) *backend
-	Service() (string)
+	Service() string
 	BackendCluster(string, string) (*backendCluster, error)
-	FindBackendCluster(string) (*backendCluster)
+	FindBackendCluster(string) *backendCluster
 	ReplyHandler(interface{}) error
-	GetMetaKeyVal(serverStream grpc.ServerStream) (string,string,error)
+	GetMetaKeyVal(serverStream grpc.ServerStream) (string, string, error)
 }
 
 func newRouter(config *RouterConfig) (Router, error) {
-	r,err := newMethodRouter(config)
-	if  err == nil {
+	r, err := newMethodRouter(config)
+	if err == nil {
 		allRouters[r.Name()] = r
 	}
 	return r, err
@@ -59,19 +59,19 @@
 	idx := strIndex(rTypeNames, config.Type)
 	switch idx {
 	case RT_RPC_AFFINITY_MESSAGE:
-		r,err := newAffinityRouter(rconf, config)
+		r, err := newAffinityRouter(rconf, config)
 		if err == nil {
 			allRouters[rconf.Name+config.Name] = r
 		}
 		return r, err
 	case RT_BINDING:
-		r,err := newBindingRouter(rconf, config)
+		r, err := newBindingRouter(rconf, config)
 		if err == nil {
 			allRouters[rconf.Name+config.Name] = r
 		}
 		return r, err
 	case RT_ROUND_ROBIN:
-		r,err := newRoundRobinRouter(rconf, config)
+		r, err := newRoundRobinRouter(rconf, config)
 		if err == nil {
 			allRouters[rconf.Name+config.Name] = r
 		}
@@ -79,6 +79,4 @@
 	default:
 		return nil, errors.New(fmt.Sprintf("Internal error, undefined router type: %s", config.Type))
 	}
-
-	return nil, errors.New(fmt.Sprintf("Unrecognized router type '%s'",config.Type))
 }
